دوران سربازی یک برنامه‌نویس

با سلاممن احمد عبدالله‌زاده هستم و قصد دارم در این مطلب در مورد تجربیات خودم به عنوان یک برنامه‌نویس و برای برنامه نویسان در دوران سربازی بگم.امیدوارم براتون مفید باشه :-)مطلب در perceptبیوگرافی‌ای از من در این رشته:ورود من به رشته کامپیوتر از سال ۱۳۹۳ همزمان با ورودم به دانشگاه در رشته مهندسی نرم‌افزار بود. https://vrgl.ir/I3wjb از همون اول به برنامه نویسی و اپن سورس علاقمند شدم.ترم اول را با پایتون شروع کردیم و همزمان با راهنمایی‌ بچه های ترم بالایی شروع به یادگیری لینوکس کردم که پیشنهاد میکنم اگه میخواین وارد این رشته بشین حتما یادگیری لینوکس رو به برنامه هاتون اضافه کنین چون هم میتونه ایجاد فرصت شغلی بکنه که اولین شغل رسمی من که بابتش پول دریافت کردم هم مرتبط با لینوکس یعنی لینوکس سیستم ادمین بود البته یادگیری لينوکس باعث افزایش احتمال استخدام شما در دیگر مشاغل هم می‌شود. (توضیحات کاملتر در مورد درآمد با لینوکس را در اینجا مطالعه کنید.) و هم اینکه در مقاطع بالاتر از لیسانس ممکنه بهش نیاز پیدا کنین و دیگه زمان و فرصت مناسب برای یادگیریش رو نداشته باشین و البته شمارو وارد دنیای زیبایی می‌کنه و کلی ازش لذت میبرین.بعد از پایتون ترم دو رو به یادگیری زبان‌های C و CPP گذروندیم که باعث آشنایی ما با مباحث اشاره‌گرها و کمی برنامه نویسی نزدیک‌تر به سخت افزار شد.ترم سوم با یادگیری زبان C Sharp با مباحث کاربردی شی‌گرایی آشنا شدیم و کم‌کم به سمت Thread ها رفتیم. من با C Sharp هم مدتی مشغول به کار بودم (در زمینه windows form application )به مرور تا آخر دوره ی لیسانس javascript, کار با برد ARDUINO و FPGA رو هم کار کردیم.چند درس در زمینه‌ی هوش‌مصنوعی مثل پردازش تصویر و پردازش گفتار کار کردیم که اکثرا با زبان‌های متلب و پایتون کار می‌کردیم.آشنایی با شبکه‌های کامپیوتری و ساختمان‌های داده و … هم بسیار مفید بود.دوران لیسانس و تجربه اندوزی در این مباحث باعث آشنایی من با تعدادی از شاخه‌های رشته‌ی کامپیوتر شد، در واقع در دوران لیسانس بود که علاقه‌ی خودم رو در بین گرایش های رشته‌ی کامپیوتر پیدا کردم.من خودم شدیدا مشتاق به یادگیری بودم و به صورت خودخوان طراحی سایت با php laravel و python django رو هم یاد گرفتم و به‌صورت پروژه محور درآمدی هم ازشون داشتم. https://vrgl.ir/RTctL تا دوران لیسانس تموم شد و دقیقا موقعی که میخواستم بصورت جدی و تمام وقت وارد بازار کار بشم به معضلی برخورد کردم به اسم سربازی.اصلا بریم سربازی یا نه؟نظرات میتونه متفاوت باشه و نظر من اینه که رفتنش بهتر از نرفتنش هست به چند دلیل:اول اینکه آدم از آینده خودش خبر نداره، ممکنه الان بگید ما که وارد بازار کار آزاد می‌شیم و نیازی به کارت پایان خدمت نداریم ولی در آینده معلوم نیست با چه فرصت شغلی یا فرصت کار در یک کشور خارجی یا حتی کار در یک پست دولتی با حقوق معقول مواجه بشیم و آیا نیازی به پایان خدمت داریم یا نه؟!!! دوم اینکه قوانین سربازی در ایران دائما در حال تغییره و مشخص نیست که تا چند سال آینده برای چه فعالیت هایی در ایران نیاز به کارت پایان خدمت داریم و برای چه کار هایی نیازی به کارت پایان خدمت نداریم.پس در مجموع از نظر من رفتن به سربازی کار معقول‌تر یا کم ریسک‌تری به نظر میرسه.چه تفاوتی بین کسی که بصورت بومی و غیر بومی به خدمت گرفته میشن هست؟افرادی که در شهر محل زندگی خودشون دوران سربازی رو می‌گذرونن دسترسی خیلی بیشتری به اینترنت و کامپیوتر‌ دارن و خیلی راحت تر می‌تونن کار کنن یا خودشونو برای کار بعد از سربازی یا ادامه تحصیل آماده کنن.اول از همه سعی کنید امریه بشید یا در یکی از پادگان های شهر محل سکونت خودتون پذیرش بگیرید تا در بعد از ساعت کاری به اینترنت دسترسی داشته باشین و دانش خود را بروز نگه داشته و از دنیای برنامه نویسی و تکنولوژی فاصله نگیرید.ولی اگه شهر دیگه ای هم افتادین میتونید با خوندن کتاب های مرتبط که بعضیاشونو معرفی میکنم و استفاده از روز های مرخصی تا حدی خودتون رو نزدیک به این حوزه نگه دارین و کلا ریست نشین.البته فرصت خوبی برای تقویت زبان انگلیسی و یا خواندن کتاب‌هایی که در گذشته خیلی فرصت خوندنشونو نداشتین هم هست (من خودم در مورد خیلی از زمینه‌هایی که دوست داشتم در موردشون حداقل کمی اطلاعات داشته باشم مثل فلسفه و جامعه‌شناسی مطالعه کردم که خیلی هم برام مفید بود و بهشون علاقمند شدم)چه فعالیت هایی من انجام دادم تا کمتر از این حوزه فاصله بگیرم ؟اگه مثل من در شهری به جز شهر محل سکونت خودتون خدمت می‌کنید و دسترسی به لپتاپ و اینترنت ندارین خواندن کتا‌‌ب‌هایی که مستقیما با آموزش یک زبان برنامه‌نویسی خاص یا یک فریم‌ورک خاص میپردازه نمیتونه موثر باشه چون برای یادگیری درست یک زبان برنامه‌نویسی یا فریم‌ورک نیاز به لپتاپ و اینترنت دارین تا مطالب را تست کنید ولی در عوض خواندن کتاب‌هایی که به آموزش مفاهیم پایه‌ی برنامه نویسی یا مفاهیم مدیریت میپردازه خیلی می‌تونه مفیدتر باشه.هر بار که به مرخصی میاین تمرین کد نویسی کنید و مثال های ساده اما دارای الگوریتم های اصیل و معروف رو حل کنید.شرکت در مسابقات برنامه نویسی هم میتواند مفید باشد.برای این کار سایت leetcode بسیار مفید است.بصورت دوره‌ای روی تخصص های خود کار کنید و آنها را رها نکنید.یک پیشنهاد بسیار عالی:اگر مسلط به فریم ورک خاصی هستید یا در زمینه‌ای تخصص دارید از ابتدای شروع سربازی یک پروژه‌ی شخصی برای خود تعریف کنید و مرخصی به مرخصی آنرا کاملتر کنید.این کار مانع از فراموشی تخصص شما می‌شود.کتاب‌های Clean Code, Clean Coder, Clean Architecture و Refactoring رو که در مورد مفاهیم مختلف برنامه‌نویسی توضیح میدهند رو مطالعه کردم:۱. کتاب Refactoring:کتاب Refatoring در مورد بهبود طراحی کد موجود است. این روند تغییر یک سیستم نرم افزاری است به گونه ای که رفتار خارجی کد را تغییر ندهد ، اما ساختار داخلی آن را بهبود بخشد. با refactoring حتی می توانید یک طراحی بد را بدست آورید و دوباره آن را به یک طراحی خوب تبدیل کنید. این کتاب بحث کاملی در مورد اصول بازسازی (Refactoring) را شامل می شود ، از جمله اینکه کجا می توان فرصت ها را برای Refactoring پیدا کرد و نحوه تنظیم تست های مورد نیاز را ذکر کرد. همچنین کاتالوگ بیش از ۴۰ مورد اثبات شده با جزئیات مربوط به زمان و دلیل استفاده از آن و دستورالعمل های گام به گام برای اجرای آن و نمونه ای از نحوه کار این کتاب وجود دارد. این کتاب با استفاده از جاوا به عنوان زبان اصلی آن نوشته شده است ، اما ایده ها برای هر زبان OO قابل استفاده هستند.۲. کتاب Clean Code:کتاب Clean Code به سه قسمت تقسیم شده است. اولی اصول ، الگوها و روش های نوشتن کد تمیز را توصیف می کند. قسمت دوم شامل چندین مورد موردی در زمینه افزایش پیچیدگی است. هر مطالعه موردی تمرینی برای تمیز کردن کد است که دارای برخی از مشکلات به یک صدا سالم و کارآمد است. بخش سوم بازپرداخت است: یک فصل واحد شامل لیستی از اکتشافات و "بو" هایی که هنگام ایجاد مطالعات موردی جمع شده است. نتیجه یک دانش بنیان است که نحوه تفکر ما هنگام نوشتن ، خواندن و تمیز کردن کد را توصیف می کند.۳. کتاب Clean Coder:این کتاب رفتار برای برنامه نویسان حرفه ای ، رشته ها ، فنون ، ابزارها و شیوه های ساخت نرم افزار واقعی را معرفی می کند. این کتاب با مشاوره عملی همراه است در مورد همه چیز ، از تخمین و کدگذاری تا refactoring و آزمایش. این بسیار بیشتر از تکنیک را پوشش می دهد: این مربوط به نگرش است. مارتین نشان می دهد که چگونه می توان با افتخار ، عزت نفس و افتخار به توسعه نرم افزار نزدیک شد. خوب کار کنید و تمیز کار کنید صادقانه ارتباط برقرار کنید و تخمین بزنید. با وضوح و صداقت با تصمیمات دشوار روبرو شوید. و درک کنید که دانش عمیق مسئولیت عمل را به همراه دارد.۴. کتاب Clean Architecture:این کتاب با بهره گیری از بیش از نیم قرن تجربه در محیط های نرم افزاری از هر نوع قابل تصوری ، به شما می گوید که چه انتخاب هایی را انجام دهید و چرا برای موفقیت شما حیاتی است. همانطور که انتظار داشتید از عمو باب انتظار داشته باشید ، این کتاب با راه حل های مستقیم و بی معنی برای چالش های واقعی روبرو می شود آنهایی که پروژه های شما را می سازند یا خراب می کنند.۵. برای طراحی الگوریتم کتاب clrs رو خوندم.۶. کتاب دیتابیس‌های سیلبرشاتس رو برای مرور مفاهیم طراحی دیتابیس خوندم.۷. برای تقویت زبان انگلیسی با خواندن کتاب‌هایی مانند 504 essential words و چند رمان انگلیسی خوندم.۸. خواندن انواع روش‌های مدیریت پروژه مانند:AgileScrumKanbanLeanWaterfallSix SigmaPMI/PMBOKبازار کار چه تغییراتی در دوران سربازی من کرد؟بازار کار تغییر چندانی در زمان کمتر از ۲ ساله‌ی سربازی من نکرد و می‌تونم بگم حدودا ۸۰% یا ۹۰٪ به همون روال باقی موند البته در زمینه هایی که من کار میکردم و بجز تغییرات کمی در زمینه ی سیستم ادمین لینوکس مثل اضافه شدن برخی تکنولوژی‌ها یا آمدن ورژن جدیدتر برخی نرم‌افزارها یا فریم‌ورک‌ها حداقل من هنوز تغییر زیادی ندیدم و اگه بتونید مطالعه خودتونو در زمان سربازی حفظ کنید فکر نمی‌کنم بعد از سربازی به بیشتر از ۱ ماه زمان برای ریکاوری نیاز داشته باشین.امیدوارم این مطلب مورد توجهتون قرار گرفته باشه و بتونه یکم از استرس های قبل از رفتن به سربازیتون کم کنه.