معرفی
مهندس نرمافزار شدن با یادگرفتن زبان برنامهنویسی تمام نمیشود. باید بتوانید کدی بنویسید که همتیمیها آن را بفهمند، تغییر دهند، آزمایش کنند و در محصولی واقعی نگه دارند. این نقشه راه از مبانی برنامهنویسی آغاز میشود و به ساخت پروژهای قابل ارائه با طراحی، تست، کنترل نسخه و اجرای تکرارپذیر میرسد.
این مسیر شامل چند گام اصلی است:
گامهای پایه: گامهای نخست، پایه مشترک همه شاخهها را تشکیل میدهند.
انتخاب شاخه تخصصی: پس از گامهای پایه، باید یکی از شاخههای بکاند، فرانتاند یا توسعه اپلیکیشن موبایل را انتخاب کنید.
با احتساب تمرین، بازبینی و اصلاح کد، مسیر مشترک و شاخه تخصصی حدود ۳۸۰ تا ۵۲۰ ساعت زمان میبرد. برای کسی که هفتهای ۱۰ ساعت تمرین منظم دارد، این بازه معادل ۹ تا ۱۲ ماه است.
هسته مسیر برای همه مهندسان نرمافزار شامل موارد زیر است:
برنامهنویسی و حل مسئله
طراحی شیءگرا و الگوریتم
تست نرمافزار و اشکالزدایی
استفاده از Git و مستندسازی
طراحی سیستم در مقیاس کوچک
تمرکز اصلی در شاخههای تخصصی به شرح زیر است:
شاخه بکاند: تمرکز بر API و پایگاه داده
شاخه فرانتاند: تمرکز بر رابط وب و اتصال به API
شاخه موبایل: تمرکز بر ساخت اپلیکیشن و نگهداری وضعیت
برای انتخاب شاخه و پشته فناوری، گامهای زیر را دنبال کنید:
آگهیهای شغلی هدف خود را در پلتفرمهای کاریابی ایرانی بررسی کنید.
عنوان شغل، فناوریهای تکرار شونده، نوع محصول و سطح تجربه خواسته شده را در جدولی ثبت کنید.
زبان و فناوریهایی را انتخاب کنید که با شاخه مورد نظر شما سازگار باشند و در آگهیهای هدف تکرار شوند.
برای آمادهسازی رزومه و درخواست شغل به راهنمای ورود مهندس نرمافزار و برای تمرین جلسه استخدامی به راهنمای مصاحبه مهندس نرمافزار مراجعه کنید.
مخاطبان نقشه راه
این مسیر برای افرادی است که از نقطه صفر یا با آشنایی مقدماتی با برنامهنویسی شروع میکنند و میخواهند برای موقعیتهای جونیور با عنوان مهندس یا توسعهدهنده نرمافزار آماده شوند. دانشجویان رشتههای مرتبط، تغییر مسیردهندگان شغلی و برنامهنویسانی که تجربهشان به تمرینهای پراکنده محدود است، مخاطب اصلی این نقشه راه هستند.
دستاورد پایانی
در پایان مسیر میتوانید مسئلهای مشخص را به نیازمندیهای فنی کوچکتر تبدیل کنید، کدی قابل نگهداری بنویسید، تغییرات را با Git مدیریت کنید، برای رفتارهای مهم تست بنویسید و با بررسی لاگ و خطا اشکالزدایی انجام دهید. همچنین، با انتخاب یکی از شاخههای بکاند، فرانتاند یا موبایل، پروژهای قابل اجرا با مستندات و تاریخچه تغییرات برای ارائه در موقعیتهای جونیور خواهید داشت.
پیشنیازها
پیش از شروع، بهتر است با موارد زیر آشنا باشید.
- توانایی کار روزمره با رایانه و مدیریت فایلها
- انگلیسی فنی در حد خواندن مستندات، پیام خطا و جستوجوی راهحل
- دسترسی منظم به رایانه شخصی برای تمرین عملی
مسیر یادگیری شغل مهندس نرمافزار
-
۷۰ ساعت
مبانی برنامهنویسی و حل مسئله
هدف گام: یاد بگیرید مسئله را به ورودی، خروجی، حالتهای مرزی و گامهای قابل پیادهسازی تبدیل کنید.
یکی از زبانهای برنامهنویسی را برای شروع انتخاب کنید و تا پایان گامهای پایه روی همان زبان بمانید:
«پایتون» (Python): برای شروع سریع و تمرین مفاهیم انتخابی مناسب است.
جاوامیکرو/«جاوا» (Java)، «سیشارپ» (#C) یا «جاوااسکریپت» (JavaScript): زمانی این زبانها را انتخاب کنید که آگهیهای هدف و شاخه مورد نظر شما به اکوسیستم آنها نزدیک باشد.
هدف این گام حفظ کردن دستور زبان نیست، بلکه نوشتن برنامههای کوچک و قابل آزمون است. برای اجرای درست این گام، دستورالعملهای زیر را دنبال کنید:
پروژه را با Git مدیریت کنید: از نخستین تمرین، پروژه را در مخزن Git محلی نگه دارید و تغییرات مهم را ثبت کنید.
سناریوها را روی کاغذ رسم کنید: هر تمرین را ابتدا با چند مثال ورودی و خروجی روی کاغذ مشخص کنید.
حالتهای مرزی را بررسی کنید: برنامه را برای ورودی خالی، داده نامعتبر و حالتهای مرزی اجرا کنید.
مهارتها
ابزارها
مفاهیم تکمیلی
متغیرها و نوع دادهشرط و تکرارتابع و محدوده متغیرهاورودی و خروجی برنامهمدیریت خطاهای پایهتحلیل مثالها و حالتهای مرزیثبت تغییرات اولیه پروژهپروژه پیشنهادی: برنامهای در خط فرمان برای مدیریت فهرست کارها بسازید که افزودن، نمایش، جستوجو، تکمیل و حذف کار را انجام دهد. ورودیهای نامعتبر را مدیریت کنید، دادهها را در فایل محلی نگه دارید و تغییرات هر قابلیت را در Git ثبت کنید.
معیار پایان گام: میتوانید مسئلهای کوچک را به توابع مستقل تقسیم کنید، برای آن چند حالت مرزی بنویسید، علت خطای ساده را پیدا کنید و تغییرات پروژه را در Git ثبت کنید.
-
۶۵ ساعت
ساختار کد، شیءگرایی و الگوریتم
هدف گام: کد را به اجزای قابل فهم تقسیم کنید و برای مسئلههای متداول، ساختار داده و الگوریتم مناسب انتخاب کنید.
پس از تسلط نسبی بر پایه زبان، روی سازماندهی کد تمرکز کنید. قوانین و توصیه آموزشی این گام به شرح زیر است:
کلاسها را هدفمند بسازید: کلاس و شی را فقط برای استفاده از اصطلاحات شیگرایی به کار نبرید. هر کلاس باید مسئولیت روشن و محدودی داشته باشد.
وابستگیها را کاهش دهید: وابستگیهای غیر ضروری میان اجزا را حذف کنید، زیرا تغییر و تست را دشوار میکنند.
ساختار دادهها را تحلیل کنید: همزمان، ساختمان دادههای رایج و تحلیل تقریبی هزینه زمانی و حافظه را تمرین کنید.
انتخاب خود را استدلال کنید: هدف این گام حل مسابقهای مسئله نیست. شما باید بتوانید علت انتخاب هر روش را برای جستوجو، صف، نگاشت یا مرتبسازی توضیح دهید.
مهارتها
ابزارها
مفاهیم تکمیلی
تفکیک مسئولیت در کدکپسولهسازی و قراردادهای کلاسترکیب بهجای وابستگی غیرضروریآرایه، فهرست، پشته و صفنگاشت و مجموعهمرتبسازی و جستوجوپیچیدگی زمانی و حافظهپروژه پیشنهادی: برنامه مدیریت کتابخانه شخصی را توسعه دهید: کتاب، عضو و امانت را مدل کنید، جستوجو و مرتبسازی اضافه کنید و قواعدی مانند جلوگیری از امانت همزمان یک کتاب را پیادهسازی کنید.
معیار پایان گام: میتوانید مدل مسئله را به اجزای دارای مسئولیت روشن تبدیل کنید، برای انتخاب ساختمان داده دلیل بیاورید و کد تکراری یا وابستگی نامناسب را اصلاح کنید.
-
۳۰ ساعت
کنترل نسخه و همکاری روی کد
هدف گام: تغییرات کد را قابل ردیابی، قابل بازبینی و قابل بازگردانی کنید.
شیوه استفاده از Git را عمیقتر کنید و مهارتهای گروهی را ارتقا دهید:
تغییرات را هدفمند ثبت کنید: تغییرات کوچک و مرتبط را در commit ثبت کنید و پیام commit را طوری بنویسید که هدف تغییر روشن باشد.
از شاخههای جداگانه استفاده کنید: شاخهای جدا برای هر قابلیت یا رفع باگ بسازید تا زمینه بازبینی و بازگرداندن تغییر فراهم شود.
از پلتفرمهای ابری بهره ببرید: یکی از پلتفرمهای مخزن را مانند GitHub یا GitLab بر اساس فرایند تیم یا پروژه انتخاب کنید.
تعامل و بازبینی را تمرین کنید: تغییر خود را با Pull Request یا Merge Request توضیح دهید، بازخورد دریافت کنید و پس از رفع تعارض، تاریخچه سالمی نگه دارید.
مهارتها
ابزارها
مفاهیم تکمیلی
مخزن محلی و مخزن راه دورثبت تغییرات کوچک و مرتبطشاخهبندی برای قابلیت و رفع باگحل تعارض در ادغام تغییراتبازبینی تغییرات همتیمینوشتن توضیح روشن برای تغییراتپروژه پیشنهادی: پروژه کتابخانه را به پلتفرم مخزن منتخب خود منتقل کنید. دستکم سه قابلیت را در شاخههای جدا پیادهسازی کنید، برای هر کدام درخواست ادغام بسازید و یک تعارض ساختگی را حل کنید.
معیار پایان گام: میتوانید قابلیت جدیدی را در شاخهای جدا توسعه دهید. تغییرات را با پیامهای معنادار ثبت کنید، درخواست ادغام بسازید و تعارض ساده را بدون حذف ناخواسته تغییرات حل کنید.
-
۵۵ ساعت
تست، اشکالزدایی و کیفیت تغییرات
هدف گام: رفتارهای مهم نرمافزار را با تست محافظت کنید و باگ را از نشانه تا علت ریشهای پیگیری کنید.
تست را فقط برای پوشش ظاهری کد ننویسید، بلکه اصول زیر را به کار بگیرید:
رفتارهای پرریسک را شناسایی کنید: ابتدا رفتارهای پرریسک شامل اعتبارسنجی ورودی، تغییر وضعیت، محاسبههای مهم و خطاهای قبلی را مشخص کنید.
انواع تست را بنویسید: با چارچوب تست متناسب با زبان انتخابی، تست واحد برای منطق مستقل و تست یکپارچه برای ارتباط اجزا بنویسید.
شاخه بکاند: تست یکپارچه ارتباط API و پایگاه داده را بررسی میکند.
شاخه فرانتاند: تست یکپارچه تعامل کاربر با کامپوننتها را بررسی میکند.
شاخه موبایل: تست یکپارچه رفتار لایههای منطق و رابط را بررسی میکند.
خطاها را مدیریت کنید: برای هر باگ، راه بازتولید مسئله را ثبت کنید و پس از رفع آن، تست رگرسیون اضافه کنید.
مهارتها
مفاهیم تکمیلی
تست واحد برای منطق برنامهتست یکپارچه میان اجزاانتخاب چارچوب تست متناسب با پشتهداده آزمون و حالتهای مرزیبازتولید باگثبت علت ریشهای خطاتست رگرسیون پس از رفع باگخواندن پیام خطا و لاگپروژه پیشنهادی: برای پروژه کتابخانه، تست واحد قوانین امانت و تست یکپارچه مسیرهای اصلی را با چارچوب تست پشته انتخابی خود بنویسید. سه باگ عمدی ایجاد کنید و برای هرکدام گزارش بازتولید و تست رگرسیون ثبت کنید.
معیار پایان گام: برای رفتارهای مهم تست قابل اجرا دارید، یک باگ را با مراحل تکرارپذیر گزارش میکنید و پس از رفع آن، تستی اضافه میکنید که از بازگشت همان خطا جلوگیری کند.
-
۴۵ ساعت
طراحی سیستم در مقیاس کوچک
هدف گام: پیش از پیادهسازی، مرز اجزا، جریان داده، خطاها و هزینههای راهحل را آگاهانه طراحی کنید.
طراحی سیستم در سطح جونیور به معنای طراحی سامانه عظیم نیست. گامهای زیر را در نظر بگیرید:
مسیر داده را ترسیم کنید: برای یک قابلیت واقعی توضیح دهید که درخواست یا رویداد از کجا وارد میشود، داده کجا نگهداری میشود، چه وابستگیهایی وجود دارد و در صورت خطا چه اتفاقی میافتد.
معماری را ساده نگه دارید: با یک معماری ساده و قابل تغییر شروع کنید، زیرا پیچیدگی زودهنگام نگهداری را سختتر میکند.
تصمیمها را مستند کنید: برای قابلیتهای مهم، فرضها، گزینههای بررسیشده، دلیل انتخاب، محدودیتها و ریسکها را ثبت کنید.
مفاهیم کلیدی را بشناسید: مفاهیم کش، صف و سرویسهای جدا را در حد تشخیص مسئلهای که حل میکنند بشناسید و فقط در صورت نیاز مشخص وارد پروژه کنید.
مهارتها
مفاهیم تکمیلی
تفکیک لایههای نرمافزارمرز مسئولیت اجزاجریان درخواست و دادهمدیریت خطا و زمانسنجی درخواستکش و اعتبار دادهمقیاسپذیری در برابر پیچیدگیثبت تصمیمهای معماریپروژه پیشنهادی: برای قابلیت جدیدی در پروژه، کتابخانه، جریان داده، مدل خطا، محدودیتها و گزینههای طراحی را در سند اختصاصی به صورت کوتاه بنویسید. سپس راهحل سادهتر را پیادهسازی کنید و دلیل انتخاب خود را ثبت کنید.
معیار پایان گام: میتوانید معماری پروژه کوچک را با نمودار یا متن روشن توضیح دهید، برای تصمیمهای اصلی گزینه و محدودیت بیان کنید و از افزودن اجزای پیچیده بدون مسئله مشخص پرهیز کنید.
-
۳۵ ساعت
اجرای قابل تکرار و مشاهدهپذیری پایه
هدف گام: پروژه را در محیطی قابل تکرار اجرا کنید و برای تشخیص خطا، اطلاعات کافی تولید کنید.
محیط توسعه همتیمیها نباید با دستورهای مبهم و تنظیم دستی زیاد ساخته شود. اقدامات زیر را انجام دهید:
راهنمای شفاف بنویسید: راهنمای پروژه باید نشان دهد که برنامه با چه پیشنیازهایی و در چه ترتیبی اجرا میشود.
محیط را یکسانسازی کنید: در شاخهای که سرویس و پایگاه داده دارد، از Docker برای تکرارپذیرکردن محیط محلی استفاده کنید.
ردیابی خطاهارا ساده کنید: برای مسیرهای مهم، لاگ ساختاریافته و پیام خطای قابل پیگیری اضافه کنید.
تغییرات را پیش از انتشار بررسی کنید: اطلاعات لازم برای تشخیص خطا را بشناسید و تغییرات خود را پیش از انتشار به دقت ارزیابی کنید.
مهارتها
ابزارها
مفاهیم تکمیلی
یکسانسازی محیط توسعهپیکربندی با متغیرهای محیطیثبت رویداد و خطای قابل پیگیریبررسی سلامت برنامهاجرای خودکار تستها پیش از ادغاممستندسازی اجرای محلیپروژه پیشنهادی: راهنمای اجرای محلی پروژه را بنویسید، متغیرهای محیطی را مستند کنید و فرایند خودکار برای اجرای تستها هنگام ارسال تغییرات به مخزن تنظیم کنید.
معیار پایان گام: هر شخص دیگری باید بتواند با راهنمای شما پروژه را اجرا کرده و تستها را اجرا کند. همچنین در صورت خطا از لاگها و مستندات برای شروع عیبیابی استفاده کند.
-
۹۰ ساعت
شاخه بکاند: داده، API و سرویس
هدف گام: سرویس بکاند قابل نگهداری با مدل داده، API، تست و محیط اجرای محلی بسازید.
اگر آگهیهای هدف شما به توسعه بکاند نزدیکاند، این شاخه را انتخاب کنید و گامهای زیر را بردارید:
فناوریهای مورد استفاده را مشخص کنید: زبان و چارچوبی را انتخاب کنید. برای مثال، ابزارهای کاربردی در این شاخه شامل Python و FastAPI و PostgreSQL هستند.
ساختار داده را طراحی کنید: پیش از نوشتن جدول، موجودیتها، رابطهها، قواعد یکتایی و عملیات اصلی را مشخص کنید.
ارتباطات API را استاندارد کنید: API با قرارداد ورودی، خروجی، خطا و وضعیتهای HTTP روشن بسازید.
سرویس را تست و اجرا کنید: تست واحد و یکپارچه را با pytest اجرا کرده، درخواستهای API را با Postman بررسی کنید و سرویس و پایگاه داده را با Docker در محیط محلی بالا بیاورید.
مهارتها
ابزارها
مفاهیم تکمیلی
مدلسازی موجودیت و رابطهکلید اصلی و کلید خارجیقیدهای یکپارچگی دادهقرارداد ورودی و خروجی APIکدهای وضعیت HTTPاعتبارسنجی داده ورودیتست واحد و یکپارچه سرویساجرای سرویس با کانتینرپروژه پیشنهادی: سامانهای برای مدیریت درخواست پشتیبانی بسازید که کاربران به کمک آن درخواستها، وضعیتها و یادداشتهای پیگیری را مدیریت کنند. پروژه باید API و PostgreSQL، اعتبارسنجی، تستهای pytest و Docker، تاریخچه Git و فایل راهنمای اجرای کامل داشته باشد.
معیار پایان گام: میتوانید مدل داده طراحی کنید، API دارای اعتبارسنجی و پاسخ خطای روشن بسازید، تستهای pytest را اجرا کنید و پروژه را با Docker و راهنمای مستند بالا بیاورید.
-
۹۰ ساعت
شاخه فرانتاند: رابط وب و اتصال به API
هدف گام: یک رابط وب واکنشگرا، قابل آزمون و متصل به API بسازید.
اگر آگهیهای هدف شما به توسعه رابط وب نزدیکاند، این شاخه را انتخاب کرده و مراحل زیر را اجرا کنید:
فناوریهای مورد استفاده را مشخص کنید: نمونه ابزارهای کاربردی این شاخه JavaScript و React و Vitest هستند.
حالتهای مختلف رابط را تعیین کنید: ابتدا API عمومی یا API پروژه تمرینی را انتخاب کنید و پیش از کدنویسی، حالتهای بارگذاری، خطا، داده خالی و موفقیت را مشخص کنید.
کامپوننتهای ماژولار بسازید: رابط را با اجزای کوچک و مسئولیتهای روشن بسازید. مدیریت وضعیت، اعتبارسنجی فرم و دسترسپذیری پایه را تمرین کنید.
کیفیت کد را بسنجید: برای تعاملهای مهم و منطق مستقل تست قابل اجرا بنویسید و کیفیت اجرای پروژه را با مستندات و تاریخچه Git نشان دهید.
مهارتها
ابزارها
مفاهیم تکمیلی
طراحی کامپوننتهای قابل استفاده مجددمدیریت وضعیت رابطفراخوانی و نمایش داده APIمدیریت حالت بارگذاری و خطااعتبارسنجی فرمطراحی واکنشگرادسترسپذیری پایهتست رفتار رابطپروژه پیشنهادی: رابط وبی برای سامانه مدیریت درخواست پشتیبانی بسازید که فهرست، جستوجو، ثبت و تغییر وضعیت درخواستها را انجام دهد. پروژه باید به API متصل باشد، حالت خطا و بارگذاری داشته باشد، تستهای Vitest و راهنمای اجرای کامل داشته باشد.
معیار پایان گام: میتوانید رابط وب واکنشگرا و متصل به API بسازید، حالتهای خطا و داده خالی را مدیریت کنید، تستهای Vitest را اجرا کنید و ساختار کامپوننتها و تصمیمهای اصلی را توضیح دهید.
-
۹۰ ساعت
شاخه موبایل: اپلیکیشن اندروید و مدیریت وضعیت
هدف گام: یک اپلیکیشن موبایل قابل اجرا با رابط، مدیریت وضعیت، ارتباط API و تستهای پایه بسازید.
اگر آگهیهای هدف شما به توسعه اپلیکیشن موبایل نزدیکاند، این شاخه را انتخاب کنید و مراحل زیر را طی کنید:
فناوریهای مورد استفاده را مشخص کنید: نمونه ابزارهای کاربردی این شاخه شامل Kotlin و Android Studio و Jetpack Compose میشود.
سناریوی کاربر را طراحی کنید: مسئله محدودی را انتخاب کنید و پیش از پیادهسازی، صفحهها، وضعیتهای اصلی، خطاهای ارتباطی و مسیر حرکت کاربر را مشخص کنید.
اتصال داده و وضعیت را پیادهسازی کنید: داده را از API دریافت کرده، وضعیت رابط را مدیریت کنید و برای منطقهای مهم تست قابل اجرا بنویسید.
خروجی را آزمایش و مستند کنید: برنامه را روی شبیهساز یا دستگاه واقعی اجرا کرده و راهنمای نصب و اجرای آن را در مخزن ثبت کنید.
مهارتها
مفاهیم تکمیلی
طراحی صفحهها و جریان کاربرمدیریت وضعیت رابط موبایلفراخوانی APIنمایش خطا و بارگذارینگهداری دادههای محلی در حد نیازتست منطق برنامهاجرای برنامه روی شبیهسازمستندسازی نصب و اجراپروژه پیشنهادی: اپلیکیشن اندروید برای پیگیری درخواستهای پشتیبانی بسازید که فهرست، ثبت، مشاهده جزئیات و تغییر وضعیت درخواستها را انجام دهد. برنامه باید به API متصل شود، خطا و بارگذاری را نمایش دهد، تستهای JUnit داشته باشد و روی شبیهساز اجرا شود.
معیار پایان گام: میتوانید اپلیکیشن اندرویدی متصل به API بسازید. وضعیت رابط و خطاهای ارتباطی را مدیریت کرده، تستهای JUnit را اجرا کنید و روش نصب و اجرای برنامه را مستند کنید.
-
۴۵ ساعت
پروژه نهایی و تثبیت تواناییهای شغلی
هدف گام: پروژه شاخه انتخابی را به نمونهکاری قابل اجرا، قابل توضیح و قابل بازبینی تبدیل کنید.
پروژه نهایی باید مسئلهای محدود اما واقعی مانند سامانه نوبتدهی، مدیریت سفارش ساده، پیگیری درخواستهای پشتیبانی یا مدیریت موجودی را حل کند. اصول زیر را رعایت کنید:
پروژهای مستقل بسازید: از کپیکردن پروژه آموزشی بدون تصمیمگیری مستقل پرهیز کنید. دامنه کوچکتر با کیفیت بهتر از پروژه بزرگ و نیمهکاره ارزشمندتر است.
جزئیات فنی را مستند کنید: در مخزن پروژه، مسئله، قابلیتها، شیوه اجرا، معماری، تصمیمهای مهم، محدودیتها و تستها را توضیح دهید.
پروژه را بهبود ببخشید: قابلیتی را پس از دریافت بازخورد یا کشف باگ اصلاح کنید تا توانایی شما در نگهداری کد اثبات شود.
تمرکز را روی کیفیت بگذارید: پروژه باید شاهدی از شیوه کار شما باشد، نه فهرستی طولانی از فناوریها.
مهارتها
ابزارها
مفاهیم تکمیلی
تبدیل مسئله به قابلیتهای کوچکمستندسازی شیوه اجراتوضیح تصمیمهای فنیبازبینی و اصلاح تغییراتاولویتبندی رفع باگمدیریت دامنه پروژهارائه فنی پروژهپروژه پیشنهادی: پروژه شاخه انتخابی را تکمیل کنید. مخزن باید کد، تستهای قابل اجرا، راهنمای اجرای محلی، توضیح معماری، تصمیمهای مهم، محدودیتها و تاریخچه Git معنادار داشته باشد.
معیار پایان گام: میتوانید پروژه را از ابتدا اجرا کنید. معماری و تصمیمهای اصلی آن را توضیح دهید، باگهای گزارش شده را بازتولید و رفع کرده و با نشاندادن تست و تاریخچه Git، کیفیت فرایند توسعه خود را ثابت کنید.
زمان تقریبی یادگیری
برآورد مجموع زمان آموزش، مطالعه و تمرین تا رسیدن به سطح کاربردی؛ بسته به پیشزمینه شما میتواند کمتر یا بیشتر باشد.
ابزارهای مسیر
خطاهای رایج مسیر
موارد زیر تصویری کلی از این بخش برای این مسیر ارائه میکنند.
-
یادگیری همزمان چند زبان و فریمورک
تا زمانی که با کمک دستهای مشخص از ابزارها بتوانید پروژه کوچک و تست قابل اجرا بسازید، فناوری اصلی را عوض نکنید. انتخاب زبان و ابزارها را با آگهیهای هدف و شاخه مورد نظر هماهنگ کنید، نه با فهرست دورههای پراکنده.
-
ساخت پروژههای بزرگ پیش از تسلط بر مبانی
پروژه را به قابلیتهای کوچک تقسیم کنید و هر قابلیت را کامل کنید: - پیادهسازی - تست - ثبت تغییر و مستندسازی پروژه کوچک قابل اجرا و قابل توضیح، از محصول بزرگ نیمهکاره مفیدتر است.
-
استفاده تشریفاتی از Git
تغییرات مرتبط را در commit-های کوچک ثبت کنید، برای قابلیتها شاخه بسازید و درخواست ادغام بنویسید. فقط ارسال نسخه نهایی پروژه به مخزن، تجربه همکاری روی کد ایجاد نمیکند.
-
نادیدهگرفتن تست تا پایان پروژه
از نخستین منطق دارای قانون کسبوکار تست بنویسید. چارچوب تست را متناسب با پشته انتخابی تعیین کنید و هر باگی که رفع میکنید با دستکم یک تست رگرسیون پوشش دهید.
-
پیچیدهکردن زودهنگام معماری
پیش از افزودن کش، صف، چند سرویس یا ابزارهای عملیاتی، مسئله، بار کاری و محدودیت واقعی را مشخص کنید. برای پروژه جونیور، معماری ساده با مرزهای روشن، انتخاب قابل نگهداریتری است.
-
تکیه بر آموزش بدون بازخورد عملی
کد خود را برای بازبینی در اختیار همکلاسی، منتور یا جامعه فنی قرار دهید. بازخورد را به تغییر مشخص تبدیل کنید و در توضیح درخواست ادغام بنویسید چه چیزی را اصلاح کردهاید.
-
نوشتن مستندات پس از فراموششدن تصمیمها
همزمان با ساخت پروژه، شیوه اجرا، متغیرهای محیطی، قراردادهای رابط و تصمیمهای معماری را ثبت کنید. اگر فرد دیگری نتواند پروژه را اجرا کند، مستندات هنوز کافی نیست.
چکلیست آمادگی شغلی
موارد زیر را یکبهیک بررسی کنید تا چیزی جا نماند:
- میتوانم با یک زبان برنامهنویسی، مسئلهای کوچک را به توابع و اجزای قابل فهم تقسیم کنم.
- میتوانم برای انتخاب ساختمان داده یا الگوریتم در هر مسئله معمول، دلیل فنی بیان کنم.
- میتوانم برای منطق مهم پروژه تست قابل اجرا بنویسم و باگی را با تست رگرسیون پوشش دهم.
- میتوانم با Git شاخه بسازم، تغییرات را در commit-های معنادار ثبت کنم و تعارض ساده را حل کنم.
- میتوانم پروژه را با راهنمای روشن و محیط یا فرایند اجرای تکرارپذیر اجرا کنم.
- میتوانم معماری، محدودیتها و تصمیمهای اصلی هر پروژه کوچک را به صورت روشن توضیح دهم.
- میتوانم پروژهای قابل اجرا با کد، تست، مستندات و تاریخچه تغییرات ارائه کنم.
- میتوانم در شاخه بکاند، API و مدل داده قابل نگهداری پیادهسازی کنم یا در شاخه فرانتاند یا موبایل، رابط کاربری متصل به API بسازم.
پرسشهای پرتکرار
در این بخش، به تعدادی از پرسشهای رایج درباره این مسیر پاسخ داده شده است.
برای شروع این نقشه راه کدام زبان برنامهنویسی را انتخاب کنم؟
زبانی را بر اساس آگهیهای هدف و شاخه موردنظر انتخاب کنید. پایتون برای شروع مفاهیم مناسب است. Java و #C در برخی اکوسیستمهای سازمانی و JavaScript در پروژههای وب کاربرد دارند. تا رسیدن به پروژه قابل ارائه، زبان اصلی را تغییر ندهید.
آیا باید همه ابزارهای این نقشه راه را یاد بگیرم؟
خیر. Git ابزار مشترک مسیر است. پس از گامهای پایه، فقط ابزارهای شاخه انتخابی خود را دنبال کنید. برای نمونه، پشته بکاند، فرانتاند و موبایل ابزارهای متفاوتی دارند.
آیا برای مهندس نرمافزار شدن باید فرانتاند و بکاند را با هم یاد بگیرم؟
خیر. پایههای برنامهنویسی، طراحی، تست و Git مشترکاند. پس از پایه مشترک، یک شاخه بکاند، فرانتاند یا موبایل را انتخاب کنید و نمونهکار خود را در همان شاخه کامل کنید.
چرا در این مسیر طراحی سیستم پیش از پروژه نهایی آمده است؟
طراحی سیستم بدون تجربه ساخت و رفع اشکال، معمولا به حفظکردن اصطلاحات تبدیل میشود. پس از ساخت پروژههای پایه و نوشتن تست، میتوانید درباره مرز اجزا، خطاها و هزینه نگهداری یک تصمیم واقعی بگیرید.
اگر سابقه برنامهنویسی داشته باشم، کدام گامها را سریعتر میتوانم طی کنم؟
اگر بتوانید یک برنامه کوچک را مستقل بنویسید و اشکالزدایی کنید، زمان گام نخست کمتر میشود. با این حال، گامهای Git، تست، طراحی سیستم و پروژه نهایی را حذف نکنید، اینها بخش مهم تفاوت تمرین فردی و کار مهندسی تیمی هستند.
آیا گواهینامه فنی و حرفهای برای ورود به این شغل لازم است؟
الزام یا امتیاز گواهینامه سازمان فنی و حرفهای را در آگهی شغلی و فرایند هر کارفرما بررسی کنید. حتی اگر گواهینامه مورد توجه کارفرما باشد، پروژه قابل اجرا، توانایی فنی و همکاری روی کد را جایگزین نمیکند.
پس از پایان مسیر چگونه برای استخدام اقدام کنم؟
این نقشه راه بر یادگیری تمرکز دارد. پس از تکمیل پروژه نهایی، برای انتخاب آگهی هدف، تنظیم رزومه، ارائه نمونهکار و درخواست موقعیتهای نخست، به راهنمای ورود مهندس نرمافزار مراجعه کنید.