درس‌های مهم برای زنده ماندن کارآموز در توسعه اولین نرم افزار

یادمه دوران مدرسه وقتی معلم مبحثی رو می‌گفت و متوجه نمی‌شدم از بچه‌ها می‌خواستم که برام توضیح بدن، علتش این بود که به نکاتی توجه می‌کردن که پیش پا افتاده بود و شاید از نظر معلم باید خودمون اون‌ها رو بدونیم. حالا اگه شما در شرکتی کارآموز یا جونیور هستید و می‌خواید اولین پروژه‌ی واقعی‌تون رو بنویسید با چالش‌های زیادی مواجه می‌شید که به نظرم این مسیر لذت بخشه اما شاید قبلش در کنار این‌که سنیور و مدیرفنی‌تون مثل معلم کمک‌تون می‌کنه نیاز داشته باشید در کنارش یکی از بچه‌ها هم یه سری چیزها رو بهتون بگه تا مقابله با اون چالش‌ها ساده‌تر بشه، نوشته زیر رو به عنوان حرف‌های دانش‌آموز میز بغلی‌تون می‌نویسم.خب من مهدی هستم برنامه‌نویس اندرویدم تو فرمالو و قرار شد تا پروژه‌ای رو تحت عنوان کوییزآپ که یک بازی اسم و فامیله رو برای پلتفرم اندروید بنویسیم تا هم خودم با apiهای فرمالو آشنا بشم و هم مابقی دولوپرها. توضیحات فنی پروژه و نحوه‌ی کارکردش به صورت مجزا تو این‌جا نوشته شده.انتخاب تکنولوژییکی از مواردی که باید از ابتدا مشخص کنید، انتخاب تکنولوژی و لایبراری‌های موجود برای کدنویسی پروژه‌ست، برای پلتفرم مورد نظر ما که اندروید بوده باشه لایبراری‌های متفاوتی برای انجام یه کار وجود داره که اول باید مشخص کنید که چه روش‌هایی برای انجام اون کار وجود داره و بعد از پیدا کردن لایبراری‌های موجود، برای امکانات و مقایسه‌شون کافیه به انگلیسی سرچ کنید و برای انتخاب بین اون‌ها به نسبت مزایا و معایبی که دارند، بر حسب نیازتون به اندازه‌ی پروژه انتخاب کنید.نکته: اگه ددلاین‌تون کمه، ترجیحن از چیزی استفاده کنید که قبلن کار کردید و مقداری تسلط داریدبرای مقایسه می‌تونید از این عبارت انگلیسی زیر استفاده کنید، و وبسایت‌های quera، medium و stackoverflow معمولن برای اون‌ها جواب‌هایی دارند:what is the difference between retrofit and volleyRetrofit vs Volleyخوردن داکیومنت پروداکت پروژهیکی از مواردی که باعث گمراهی شما در اواسط پروژه می‌شه عدم توجه کامل به داکیومنت پروداکته، یعنی ممکنه شما چندبار داکیومنت رو خونده باشید و چک کرده باشید اما نیازه که بر حسب داکیومنتِ پروداکت یه وایرفریمی طراحی شده باشه که به نسبت وایرفریم، یوزر استوری‌های متفاوت رو پیش ببرید. این‌طوری هم به مرحله‌ی دیزاین رابط کاربری کمک می‌شه و هم به توسعه خود نرم افزار. چرا که برای حالت‌های مختلف اپلیکیشن ممکنه نقطه کورهایی باشه که با خوندن داکیومنت پروداکت متوجه اون نشید و اواسط کار سرعت‌تون رو کم می‌کنه، پس بهتره ابتدا این کار رو انجام بدید تا نقطه کورهای داکیومنت رو متوجه بشید و شفاف سازی کنید.یافتن فلوی برنامهاین مهم‌ترین کاریه که شما قبل از شروع پروژه باید انجام بدید، منظورم از فلو اینه که بخش‌ها و صفحات و بخش‌های مختلف اپلیکیشن و نرم افزار قراره چطور با هم ارتباط داشته باشن. این مورد رو تو بخش بالا توضیح دادم که چطور مشخص کنیم، حالا نیازه از لحاظ فنی مشخص کنیم که این ارتباط و فلویی که طی می‌شه توسط کدوم apiها و فیچرهای بک‌اندمون قراره انجام بشه، اگه با api شرکت‌تون آشنایی ندارید حتمن این کار رو با یه فرد سنیورتر از خودتون، کدنویس بک‌اند پروژه و یا آشنا با api شرکت پیش ببرید.شما خدا نیستید، بپرسیدیکی از مواردی که حین پروژه بهش برخوردم نپرس بودنم بود، یعنی وقتی کار با یه قسمت خاصی از api رو متوجه نمی‌شدم یا داکیومنتش موجود نبود سعی می‌کردم تمام حالت‌های ممکن رو تست کنم تا بفهمم چطور کار می‌کنه، یا مثلن وقتی می‌خواستم لیستی از لیست‌ها بسازم یکی دو روز تایم گذاشتم تا در نهایت بعد پرسیدن فهمیدم لایبراری tableView هم وجود داره. خوبه بیش‌تر چیزها رو به مرور خودتون سرچ و تحقیق کنید و یاد بگیرید اما برای مواردی که نیاز به تجربه دارن، دنبال روش انجام هستید و یا در یک جمله پاسخ دارن بهتره که تایم‌تون رو درگیر اون نکنید و بپرسید.داکیومنت نیست، بک‌اند کار که هستاگر داکیومنت کاملی از بک‌اند نداشته باشید می‌تونه یه چالش بزرگ برای برنامه‌نویس (خصوصن جونیور) باشه. در حالت کلی وجود داکیومنت لازمه‌ی شروع یه پروژه‌ست اما در مواردی پیش میاد که وقتی فلو مشخص کردید نیاز به استفاده از فیچرهای بک‌اندی داشته باشید که در قدیم توسعه داده شده باشه. دو حالت کلی وجود داره: اول ممکنه داکیومنتش وجود نداشته باشه، دوم اگه وجود داشت ممکنه اپدیت نشده باشه و ناقص باشه. هر وقت به چنین موردی برخوردید که شک داشتید بپرسید یا نه، بخش «شما خدا نیستید، بپرسید» رو بخونید و بعد از بک‌اند کار بپرسید. معمولن بک‌اند کارها مثل فرمانده‌های میدان هستن و شما باید حواس‌تون باشه که اگه راهنمای استراتژی جنگ رو ندارید مستقیم وسط میدون نمی‌رید از فرمانده بپرسید. می‌تونید از شوالیه‌های دیگه‌ای که سابقه جنگ دارن کمک بگیرید. مثلن در مواردی بوده که منی که اندروید کد می‌زدم (که می‌تونیم فرانت محسوب کنیم) برای چالشم از فرانت‌اند کار وب شرکت کمک گرفتم چرا که یه بار با apiهای شرکت کار کرده بود.استفاده از ماژول‌های قبلیوقتی وارد شرکتی می‌شید به احتمال زیاد اپلیکیشن‌هایی دولوپ شده و اگه دولوپرهای خوبی همکارتون باشن اون‌ها رو به صورت ماژولار نوشتن. استفاده از ماژول‌های موجود برای پروژه‌ای که دارید می‌نویسید می‌تونه خیلی کمک کننده باشه. اگه هم ماژولی نبود شما می‌تونید اپلیکیشن‌های قبلی شرکت رو مرور کنید تا نحوه کار با api و پیاده سازی و هندل کردن یه بخش رو بفهمید.ناقص ارسال کنید، فیدبک بگیریدبه عنوان یه کمال‌گرای تمام عیار، عادت دارم یه چیز رو تکمیل کنم یا حداقل به جای خوبی برسونم و بعد برای تست یا دمو به بقیه نشون بدم اما موردی که تو این مسئله بود ممکن بود من بعضی جاها رو اشتباه پیاده کنم و بعد تو دمو متوجه بشم که کلن اون مسیر رو اشتباه رفتم، برای کاهش اشتباه خوندن بخش «خوردن داکیومنت پروژه» و «یافتن فلوی برنامه» به شدت کمک می‌کنه اما در کنارش خوبه که بعد تکمیل فانکشنالیتی هر بخش، اون رو به بچه‌های شرکت یا کسی که داکیومنت پروژه رو نوشته ارسال کنید و فیدبک بگیرید. این‌طوری هم اون در جریان پروژه هست که تا کجا و چه‌قدر پیش رفته و هم شما فیدبک می‌گیریدمایندست رشد رو فعال کنیددر توضیح کوتاه مایندست رشد می‌گه ما با تمرین هر چیزی رو می‌تونیم یاد بگیریم و بلد نبودن یه مهارت بابت عدم توانایی ما نیست و نیازه تمرین کافی داشته باشیم تا شبکه عصبی مغزمون اتصال قوی‌تری رو برای انجام اون کار داشته باشه. تو هوش مصنوعی می‌دونیم که یه سری دیتا به الگوریتم می‌دیم تا خودش رو train کنه و بهینه‌ و دقیق‌تر پاسخ بده، کارکرد مغز انسان برای تمرین هم به همین صورته که شما هر چه‌قدر دیتاست‌های بیش‌تری بهش بدید و تمرین کنید، راحت‌تر می‌تونید یه مسئله یا چالش فنی‌تون رو حل کنید.مثلن من برای پروژه کوییزآپ نیاز داشتم تا یه جیسون ریسپانس پیچیده‌ای که قسمتیش هم داینامیک بود رو به کلاس کاتلین parse کنم، چندبار تلاش کردم و نتونستم این‌جا احساس بدی نسبت به خودم داشتم که شاید توانایی ذهنیم برای برنامه‌نویسی کافی نباشه و کلی برچسب و خودزنی دیگه. اما در کنارش به این فکر می‌کردم در حالت فعلی اگه بتونم این فایل جیسون رو تبدیل کنم می‌شه هر چیز دیگه‌ای رو parse کنم و این قضیه انگیزه‌ی از دست رفته‌ی منو بهم بر می‌گردوند تا بشینم و دوباره دست به کیبورد بشم.موارد بالا باتل‌نک‌هایی بود که اگه تو پروژه بعدیم رعایت کنم در بدترین حالت سرعتم برای تکمیل پروژه تا ۵۰٪ افزایش پیدا می‌کنه، شاید تایتل‌وار همشون رو بدونیم اما نیازه که تجربه بشه تا درک کنیم هدف این نوشته این بود که بهتون کمک کنه موقع انجام پروژه انگیزتون کم نشه و حواس‌تون باشه که به این نکات توجه کنید.لینک گیت‌هاب پروژه: https://github.com/formaloo/quiz-app-android برنامه‌‌ی کوییزاپ: https://myket.ir/app/com.formaloo.quizapp