سال ۹۷، ادامه یک ماجراجویی

حدود یک سال از راه‌اندازی وبلاگم میگذره و الان که یاد نوشتن اولین پستم میفتم فاصله عجیب غریب خودمو با چیزی که قبلن بودم، حس می‌کنم. اصلن یکی از بزرگترین دلایلی که اینجا رو راه انداختم همین داستان بودش.حالا تصمیم گرفتم تجربیاتی که تو سال گذشته پیدا کردم رو اینجا بنویسم تا سال آینده باز خودمو ارزیابی بکنم و شاید هم به درد کسایی که تازه میخوان به طور حرفه‌ای این مسیر رو شروع کنن مناسب باشه.تقریبن از اواخر سال ۹۵ تصمیم گرفتم که به طور جدی حوزه کاریمو تغییر بدم و بیام روی توسعه برنامه های وب. این تصمیم رو وقتی گرفتم که مدتی برنامه‌نویسی اندروید رو به صورت نیتیو (جاوا) انجام میدادم و بعد از مدتی به دلایل مختلف مثل طولانی بودن زمان توسعه‌ی پروژه‌های اندرویدی، دست‌مزد به نسبت کم و سر و کله زدن‌های الکی با ابزارهای توسعش و چیزای دیه … دیدم این نوع از توسعه‌ی برنامه‌ها چیزی نیست که من دنبالش باشم و بهش علاقه داشته باشم.نکته‌ای که برنامه‌نویسی اندروید داره اینه که شیب یادگیری این پلت‌فرم اولش خیلی سریع هستش و با آموزش خیلی کم شما میتونین به راحتی برنامه‌های نسبتن خوبی رو تولید کنین و فکر میکنین همه چیزِ اندروید رو یادگرفتین اما از یکجایی که قراره شما به عنوان یک دولوپر به اصطلاح سِنیور کار کنین و دست‌مزد های اون پوزیشن شغلی رو بگیرین همه چیز تغییر میکنه و با یک سری مفاهیم عجیبُ غریب و گنگ با شیب یادگیری بسیار کند مواجه میشین که خب من به شخصه اون مفاهیم رو موردعلاقه‌ی خودم ندیدم.این در حالی هستش که در حال حاضر کمپانی‌های مختلف برای پروژه‌های موبایلیِ خودشون نیاز به نسخه برنامه موردنظر روی هر دو سیستم‌عامل اندروید و iOS دارن و اینکه بیان یک دولوپر اندروید و یک دولوپر iOS جدا استخدام کنن و به هرکدوم هم دست‌مزد یک برنامه‌نویس ارشد رو بدن یک حرکت گرون و کمیابی هست و ترجیح میدن یک نفر رو بیارن و بعد یک تایم مشخص و با نصف اون هزینه، پروژه رو توی هر دو سیستم‌عامل با خروجی نسبتن مطلوب تحویل بگیرن.نکته بعدی اینکه اگر هم شرکت یا استارتاپی قصد انجام پروژه‌های موبایلیش به صورت جداگونه روی دو سیستم‌عامل داشته باشه و همینطور بودجه‌اش رو هم داشته باشه، افراد با سابقه‌تر خیلی زیادی توی صف هستند که چندین ساله دارن توی این حوزه کار میکنن.با این اوصاف، وقت گذاشتن و تبدیل شدن به یک سنیور دولوپر اندروید کار توجیه‌پذیری برای من نبود. (البته که این دلایل شخصی من هستند و نه یک نسخه عمومی برای همه)اینم بگم که این اولین تغییر حوزه کاریم نبوده و تقریبن هر کاری رو توی زمینه نرم‌افزاری، از طراحی، برنامه‌نویسی اندروید، برنامه‌نویسی تحت دسکتاپ و … انجام دادم تا علاقه اصلیِ خودمو بلاخره پیدا کردم و پیشنهادم هم همین هستش که حداقل برای یکبار هم که شده حوزه‌های مختلف رو تست کنین، چون ممکنه جزو علاقه‌مندی‌هاتون باشه و خودتون بی‌خبر باشین و صرفن به حرف این و اون و مطالب داخل نت اکتفا نکنین!مطلب بعدی اینکه خیلیا میپرسن کدوم حوزه درآمدش بیشتره؟! بازارکار بهتری داره؟!این سوال هیچ جواب مشخصی نداره و اینطوری بگم که اگر شما در هر حوزه‌ای سِنیور بشین، براتون موقعیت شغلی مناسب با دست‌مزد مناسب هستش. تنها دلیل انتخاب یک حوزه، باید علاقه شما به اون حوزه باشه و نه هیچ چیز دیگه‌ای.پس اگر جایی دیدین کسی از برتری فریمورک یا زبان برنامه‌نویسی یا حوزه‌ی کاری داره حرف میزنه بدونین هنوز اول کاره و تخصص لازم توی این حوزه رو نداره.خلاصه بعد از تمام این اتفاقات و تحلیل‌ها من تصمیم گرفتم برم سمت وب. برای شروع، طبق قاعدش با html ,css, کمی جاوااسکریپت, BootStrap و JQuery شروع کردم و به صورت پروژه محور جلو رفتم. بعد از این، از اونجایی که هدفم بک‌اند بود، زمان انتخاب یک زبان برنامه‌نویسی و فریمورک سمت سرور بودش …رودمپ برای مسیر فرانت‌اند دولوپر شدن چیز دیگه‌ای هستش! از اینجا میتونین رودمپ هر دو مسیر رو به صورت جامع ببینین.با کلی سر و کله زدن با برنامه‌نویس‌های سابقه‌دار، دوستان، اینترنت، بنچ‌مارک‌ها، بررسی بازارکار، بررسی سابقه‌ی برنامه‌نویسی خودم، علاقم، آینده اون زبان و فریمورک در ۵ سال بعد و تست کردن خیلی از معروفاشون، تصمیم گرفتم که به صورت جدی روی ASP.NET Core با زبان سی‌شارپ تمرکز کنم. از اینجا میتونین اسلاید ارائه‌ام در مورد این فریمورکِ جوونِ مایکروسافت رو ببینین.برای شروع این داستان، اول باید ASP.NET MVC رو یاد میگرفتم. با استفاده از داکیومنت جامع خود مایکروسافت، دوره‌های یودمی و لیندا شروع به یادگیری پروژه‌محور این فریمورک کردم و در کنارش هم تکنولوژی‌های مرتبط باهاش مثل Linq, Entity Framework, … رو یاد گرفتم و در نهایت دیتابیس‌های مختلف مثل SqlLite, Sql Server, PostgreSql رو به طور جدی‌تر روشون متمرکز شدم. حالا نوبت این شده بود که روی خود ASP.NET Core سوییچ کنم و ویژگی‌های جدیدشو یاد بگیرم.این کار رو هم دوباره با استفاده از داکیومنت جامع خود مایکروسافت و دوره‌های یودمی و لیندا انجام دادم و در کنارش هم سعی کردم یک آشنایی نسبی با فریمورک جاوااسکریپتی سمت کلاینت انگولار پیدا کنم که گریزی هم به سمت فرانت‌اند زده باشم. البته در حال حاضر به خاطر پروژه‌های شرکتی بیشتر درگیر ریکت شدم ?برای آشنایی کلی با ویژگی‌های فریورک انگولار و مقایسش با سایر فریمورک‌ها میتونین به این اسلاید یک سری بزنین.پیشنهاد دیگه من اینه که اگر قصد یادگیری هر فریمورکی رو دارین، قطعن در اولین گام هیچ منبعی به اندازه داکیومنت خود اون فریمورک کامل، معتبر و جامع نیست. نکته بعدی اینکه خیلیا میپرسن منابع فارسی چیا هستش؟! باید بگم خوشبختانه یا متاسفانه اکثر این فریمورک‌ها تولیدات بسیار جدیدی هستند و تقریبن هر ماه تغییرات زیادی میکنن، پس مقالات ترجمه شده قطعن چند دست قدیمی‌تر و گاهن اشتباه هستند و بهترین راه‌حل، اول تقویت زبان انگلیسی و بعدم فقط استفاده از منابع سرچشمه هستش.خلاصه در نهایت الان بسیار از تصمیمی که گرفتم راضیم و همه چیز همونطور که پیش‌بینی میکردم جلو داره میره.برنامه‌هایی که در حال حاضر برای سال ۹۷ در نظر گرفتم و نیاز هست که روشون مسلط بشم رو اگر بخوام خیلی تیتروار و خلاصه بگم شامل کار کردن با دیتابیس‌های no-sql مثل MongoDb و … ، انجام و نوشتن Unit testing و Integration test و کلن مقوله CI یا Continuous Integration ، عمیق‌تر شدن روی Docker و انجام پروژه‌های اسکیل‌پذیر با اون، کار با ORM های دیگه مثل Dapper, … و Identity Server و احتمالن موارد دیگه که موقع نیاز به این لیست اضافه میشن!سال ۹۶، سال خیلی خوبی واسم بود و تقریبن هر هفته با هفته قبلم قابل قیاس نبود و این برام خیلی خوشحال‌کننده هستش. امیدوارم سال جدید هم به همین شکل برم جلو و اتفاقات خوبی واسه هممون بیفته مرسی که تا اینجای مطلبو خوندین و باهام همراه بودین.