خب، من بعد از نزدیک به یک سال، دوباره شروع کردم به نوشتن. این دفعه، با خودم فکر کردم که یک مجموعهی جدیدی رو شروع کنم به اسم “برنامهنویس شویم” که هدفش اینه، از صفر تا صد مهندسی نرمافزار رو، برای کسایی که میخوان تبدیل به برنامهنویسهای درست و حرفهای بشن شرح بده.
خب آره، صد در صد این کار کار سادهای نیست و منم ادعا نمیکنم که قراره انتهای این دوره شما بتونید مدرک کارشناسی نرمافزار بگیرید! اما در حدی که بتونم گَپ دانشی رو برای تازهکارها پر کنم تلاش میکنم.
نکتهی مهم اینه که این مجموعه به مرور بروز میشه، برای همین هم مهمه که حتما توی خبرنامه ثبتنام کنید تا در جریان آخرین بروزرسانیها باشید.
من برای درست کردن این مجموعه، از دورهی بوتکمپ آژانس لُ استفاده میکنم. یجورایی تمامی مطالبی که اونجا گفته میشه رو، اینجا هم میذارم. روش آموزش هم، بر مبنای آزمون و خطاست، طوری که خواننده جاهایی رو اشتباه کنه و مجبور به درستکردنشون بشه. ضمنا، با ساخت نرمافزار جلو خواهیم رفت.
در مورد این مجموعه که دارم تهیه میکنم، این مجموعه به سه فاز تقسیم میشه. تو فاز اول که من اسمش رو گذاشتم Baby Step Phase، یه تازهکار برای اولینبار با مطالب مرتبط با برنامهنویسی آشنا میشه و اونها رو تمرین میکنه. هدف از این فاز اینه که تازه متوجه بشیم داریم درمورد چی حرف میزنیم و اصل کار برنامهنویسی رو یاد میگیریم.
تو فاز بعدی یعنی فاز دوم، ما مفهمیم که اشتباه کردن بخش جدانشدنی از برنامهنویسی هست و بهترین راه یادگیری برنامهنویسی، آزمون و خطاست. توی این فاز به موضوعات عمیقتر میرسیم و دانش فنیمون رو قویتر میکنیم.
فاز آخر یعنی فاز سه، تازه جاییه که ما تبدیل به برنامهنویس میشیم! اصول و قوائد رو یادگرفتیم و حالا میدونیم چه چیزی رو کجا استفاده کنیم. هدفمون اینه که تو این فاز یه پروداکت رو با هم بسازیم.
حالا بریم و این سه فاز رو با جزئیات بیشتر بررسی کنیم. نکتهی مهم اینه که شما از این سر فصلها میتونید حتی جداگانه استفاده کنید تا برنامهنویس وب رو یاد بگیرید.
نمادها
توی این مطلب از چند نماد استفاده شده که قبل از هرچیز یه توضیح در مورد اونا میدم:
- 💤، یعنی هنوز کاری برای مطلب انجام نشده.
- 💡، یعنی دارم به نحوهی نوشتن فکر میکنم و سناریو میچینم برای مطلب و مسیر آموزشی.
- ✍️، یعنی در حال نوشتن موضوع هستم و هنوز اصل مطلب تو حال Draft قرار داره.
- 🤓، یعنی مطلب رو نوشتم و دارم مرورش میکنم.
- ✅، یعنی نوشتن تموم شده و مطلب رو میتونید مطالعه کنید.
شروع کار
قبل از اینکه کار رو شروع کنید، مطمئن بشید که حتما ابزارهای مورد نیازمون رو نصب دارید.
برای اینکار، یه مطلب جداگانه نوشتم که فقط در مورد این ابزارها توضیح بده.
فاز اول
- ✍️ اینترنت، مطمئنا برای کسی که میخواد برنامهنویسی وب رو شروع کنه، اولین چیزی که لازمه یاد بگیره، اینه که اینترنت چیه؟ مثلا یه نقاش برای اینکه نقاشی رو شروع کنه، باید بدونه بوم نقاشی چی هست!
- 💡 سیستم مدیریت ورژن یا VCS، که یکی از موضوعات خیلی مهم برای برنامهنویسهاست. اینکه یاد بگیرن چطور با گیت کار کنن و ورژنهای مختلف برنامشون رو مدیریت کنن!
- 💤 پایههای امنیت وب، که با موضوعات بنیادی (و کاربردی) امنیت در وب سر و کار داره.
- 💤 پایههای اچتیامال، که فاقد از برنامهنویسی بکاند و فرانتاند، باید با این زبان آشنا و اون رو بلد بود. اینجا در مورد تگها صحبت میکنیم و ساختار این زبان رو درک میکنیم.
- 💤 پایههای سیاساس، که در کنار اچتیامال، عضو جدانشدنی برنامهنویسی وب هست.
- 💤 پایههای جاوااسکریپت، و خب واضحه که این زبان هم، زبان اصلی برنامهنویسی ماست و از همین اول شروع میکنیم باهاش کار کردن و باهاش آشنا شدن.
مسئلهی مهم اینه که، من شخصا مخالف استفاده از کلمات خلاصه شده، اونم اوایل برنامهنویسی هستم. یعنی معتقدم که وقتی باید از کلمات خلاصه استفاده کرد، یا مفاهیم ابسترکت (انتزاعی) رو از همون اول کار با سه حرف خلاصه کرد، که اساس و پایه خوب یاد گرفته شده باشه.
فاز دوم
- 💤 Atomic Design، ایده اینه که با این مفهوم در دیزاین آشنا بشیم تا بتونیم نوع تفکرمون نسبت به فرانتاند رو آروم شکل بدیم. اینکه چطور به یک وباپ یا وبسایت نگاه کنیم و سعی کنیم اون رو از دید پوسته یا UI تحلیل و مهندسی معکوس کنیم.
- 💤 جاوااسکریپت در مرورگر، اینجا فقط به ویژگیهای این زبان در مرورگرها محدود هستیم. اینکه جیاس در مرورگر چطور کار میکنه و وقتی داریم راجع به Client Side بودن چیزی حرف میزنیم، در واقع داریم چطور اون چیز رو توضیح میدیم.
- 💤 جاوااسکریپت در نُدجیاس، که اینجا به ویژگیهای این زبان از دید بکاند نگاه میکنیم تا مفهوم Server Side بودن رو جا بندازیم.
- 💤 Package Managers، که مشخصا در مورد ابزارهای مدیریت پکیجها حرف میزنیم و کاربردها و استفاده از اونا رو بررسی میکنیم.
- 💤 اسکیوال، که زبانی برای توصیف چیزهایی هست که از پایگاههای داده میخوایم. پس اینجا یه سری هم به پایگاههای داده (رابطهای) میزنیم و اونارو بررسی میکنیم. (مشخصا SQlite) – متوجه هستم که هایپ زیادی برای دیتابیسهای بدون رابطه وجود داره، اما لازم هست که موضوعات از پایه توضیح داده بشن، و من خودم شخصا تا وقتی به چیزی نیاز پیدا نکنم، ازش بزور استفاده نمیکنم.
خب، تا اینجا فاز دوم رو استارت زدیم، اما هنوز اصل قضیه مونده، و تمام چیزهایی که تا اینجا یاد میگیریم واسه اینن که بتونیم موضوعات بعدی این فاز رو بهتر بفهمیم:
- 💤 Bootstrap، که یه فریمورک برای سیاساس هست. و یکی از محبوبترینهاش!
- 💤 AlpineJS، که به نظرم بهترین جایگزین برای jQuery هست و میشه بخوبی ازش استفاده کرد.
- 💤 ExpressJS، که یاد میگیریم باهاش حالا برنامههای بکاندی رو درست بنویسیم و سرویسهای درستی بسازیم.
- 💤 Template Engines، میدونم که بحث زیاده که آخه دیگه کی از این سیستمها استفاده میکنه و به چه دردی میخورن؟ اما نباید یادمون بره که ابزارهایی مثل ریاکت، به این خاطر درست شدن که TEها از جایی به بعد کاربردی نبودن. و برای من شخصا فهمیدن چرایی پشت چیزها مهمه.
بهترین ویژگی یه برنامهنویس، صبر و حوصلست!
فاز سوم
این فاز، تازه فازیه که وقتی میگیم برنامهنویسی، خواننده متوجه میشه که داریم در چه موردی حرف میزنیم. از اینجا به بعد، یه جورایی شروع کار ماست!
- 💤 معماری سیستم، بر خلاف اسمش، یه سری به انواع معماریها میزنیم و تفاوتشون رو با Design Patternها و Best Practiceها میسنجیم.
- 💤 UI/UX، همچنان یک توضیح کلی از چراییها و چگونگیها و اینکه مسیر خوب برای اینکاره شدن چی میتونه باشه.
- 💤 اسکیوال ۲ با ORM، که همچنان برای پایگاههای داده هست و ابزاری سطحبالاتر برای تعریف و استفاده از مدلها.
- 💤 RestAPI، برای طراحی سرویسهای بکاندی با این ساختار ایپیآی.
- 💤 NestJS و TypeScript، همچنان یک فریمورک برای برنامهنویسی بکاند، اینبار به زبان تایپاسکریپت.
- 💤 ReactJS، که لایبرری معروف برای برنامهنویسی برنامههای فرانتانده.
- 💤 Tailwind، برای استایل دادن به برنامههای فرانتاندی، و نقطه مقابل بوتاسترپ.
خب، عملا تا اینجا هر آنچه که لازم بود برای برنامهنویس شدن مطرح شده و خواننده میتونه از اینجا به بعد واقعا استارت کار رو بزنه. صد در صد نوشتن تمامی این مطالب زمانبر هست و تمومکردنشون یه ایدهآل! اما کاری نیست که نشدنی باشه و میشه به مرور انجامش داد.
مسئلهی مهم که بالاتر هم بهش اشاره کردم، صبر و حوصلست. برنامهنویس شدن واقعا کار یک شب نیست و باید مداوم روش کار بشه. تازه خیلیها هستن که واقعا تجسم درستی از این کار ندارن و همون اوایل که شروع میکنن، بیخیالش میشن.
منم هدف واقعا این نیست که همه رو تبدیل به برنامهنویس کنم، اما تمام تلاشم رو میکنم که طوری موضوعات رو مطرح کنم، که خواننده احساس سخت بودن مطلب رو نداشته باشه و واقعا بتونه تا جایی که در توانش هست جلو بیاد.
امیدوارم کار خوبی بشه.