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

تصویر از اینجا چند روز پیش توی گروه صرفا جهت اطلاع برنامه نویسان در تلگرام که بچه های خوبی هستن - البته از روی کارشون و زحمتی که میکشن - این مطلب را دیدم: Finding Time to Become a Better Developer.یکم ازش خوندم و دیدم چقدر توی سال‌هایی که برنامه نویسی کردم درگیر این موضوع بودم و واقعا بهم کمک کرد شرایط را بهتر درک کنم. مطلب را خودتون میتونید کاملش را بخونید توی لینک بالا اما فهوای کلامشرا میتونید اینجا بخونید: ۱. لازم نیست هرچیزی که هست را یاد بگیرید!شکی در این نیست که اگر میخواهید یک برنامه نویس خوب باشیم باید همواره در حال یاد گرفتن باشیم. اما اینکه کجا زمانمون را صرف میکنیم میتونه در نتیجه‌ای که میگیریم در حوزه کاریمون خیلی تفاوت داشته باشه. به عبارت دیگه اگر تخصصی پایتون میخونیم یا تمرکز کردیم روی PHP یا جاوا یا Node بعد میبینیم یک چیز خیلی هیجان انگیز توی مثلا زبان R اومده، بریم و زمانمون را صرف اون بکنیم خیلی فرق میکنه تا همون زمان را ببریم توی حوزه‌ای که توش تخصص داریم صرف کنیم و یک مفهوم جدید یا الگوی طراحی جدید توی اون بخش را - با توجه به دانش قبلیمون توی اون حوزه - یاد بگیریم.برای همین خیلی درگیر تیترهای خبری که روی وبلاگ‌ها هر ۳۷ ثانیه یک تکنولوژی جدید اعلام می‌کنند نشیم. خیلی از این تکنولوژی‌ها فریم‌ورک‌ها و ویژگی‌های هیچ‌وقت مورد توجه درست و حسابی قرار نمی‌گیرند و به عبارت دیگه اصلا لازم نیست اون‌ها را یاد بگیریم. برای اون‌ تکنولوژی‌هایی هم که در آینده بهشون توجه میشه زمان بسیار زیادی میبره تا بیان و جای یک ابزار یا تکنولوژی فعلی را بگیرن. بنابراین تمرکز یادگیریمون را بگذاریم روی این موارد:اصول بنیادی یا Fundamentals. یک قانون هست که میگه اگر پایه را بدونی همیشه در یادگیری چیزهای دیگه خیلی سریعتر عمل میکنی. یعنی مثلا اگر JS را عمیق درک کردیم، یادگیری یک فریم‌ورک در اون حوزه برامون خیلی سریعتر خواهد بود. یادگیری عمیق اصول سرعت ما را و کیفیت یادگیریمون را ۱۰ برابر افزایش میده.آخرین نسخه‌ها و و یژگی‌های مجموعه تکنولوژی‌هایی که در حال استفاده از اون هستیم. یک مجموعه از تکنولوژی‌ها هست که ما هر روز استفاده می‌کنیم و زندگیمون را تامین میکنه. وقتی نسخه جدید این ابزارها عرضه میشه مطمئن بشیم که یادشون گرفتیم.فناوری‌های مورد نیاز شرکت‌های بزرگ و تعیین کننده در بازار مثل گوگل، فیس‌بوک یا مایکروسافت. یعنی اگر شرکت‌هایی مثل اینها چیز جدیدی ارایه میکنه ارزش وقت گذاشتن داره. مثلا ۱۰۰ ها فریمورک جاوااسکریپت تو بازار بود بعد Angular و React اومدن و توجه خیلی بیشتری را به خودشون جلب کردن. این معنیش این نیست که یک شرکت کوچیک یک گوشه دنیا نمیتونه یک چیزی ارایه کنه که همه برن به سمتش خیلی عالی باشه ولی خوب راجع به اغلب موارد صحبت میکنیم.و نکته بسیار مهم اینکه یادگیری باید بخشی از برنامه کاریمون باشه. هر روز زمانی را برای یادگیری کنار بگذاریم. لازم هم نیست خیلی زمان زیادی باشه. ۲۵ تا ۳۰ دقیقه مطالعه و تجربه کردن در یک سال میشه حدود یک ماه مطالعه!۲. اینطوری به‌نظر نمیاد، ولی نوشتن کد خوب زمان کمتری از نوشتن کد بد میگیره!ما خیلی وقتا زمانی را که برای نوشتن یک قطعه کد یا یک ویژگی جدید میگذاریم را زمان نوشتن اون کد میدونیم. اما واقعیت اینه که این تازه اول کاره! زمانی که توسعه که قطعه کد جدید از ما میگیره، در واقع شامل زمان نوشتن، زمان تست و زمان رفع اشکال - دیباگینگ - و همینطور بازنویسی‌های - ریفکتور - متعدد برای خوروندن بقیه کدها به کدیه که با یک طراحی ضعیف نوشته شده. وقتی به زمان پیاده‌سازیمون اینطوری نگاه کنیم خیلی واضحه که وقتی زندگیمون برنامه‌نویسی هست بهتره که طراحی‌هایی انجام بدیم که خطای کمتری تولید کنه. دو روش برای کاهش خطا و طراحی بهتر میتونیم انجام بدیم:استفاده از توسعه مبتنی بر تست (test-driven development). اول تست را بنویسیم و بعد کدی را بنویسیم که با تست کار کنه. این روش نه تنها باعث تولید خطای کمتری میشه بلکه ما را به سمت طراحی های بهتر سوق می‌ده چون وقتی کدها را طوری مینویسیم که قابل تست باشند، طوری کد می‌زنیم که توابع کوچک‌تر و با وابستگی‌های کمتر توسعه داده بشه.توسعه مبتنی بر طراحی تعاملی (interactive design). قبل از اینکه کد کار بکنه سعی نکنید بهترین طراحی را انجام دهید. ما هرگز، هرگز نمیتونیم تمام مسئله را توی ذهنمون جا بدیم و ارزیابی کنیم. اول یک کدی بزنیم که کار کنه و بعد اون کد را ارتقا بدیم. به قول آقا کنت بک (Kent Beck):راهش بنداز، عالیش کن، سریعش کن. و با همین ترتیب. Make it work, Make it right, Make it fast۳. کارکردن بدون وقفه از شما قهرمان نمیسازه! مدیریت انتظارات اینکارو میکنه!این یکی کشنده است. ما خیلی وقت‌ها به هر انتظار احمقانه‌ای از کارفرما یا رییسمون پاسخ مثبت میدیم. چون میترسیم بگیم «نه». یا اینکه میترسیم ازمون ناراحت بشن. و بعد پدر خودمون را در میاریم که قولی را که دادیم را نگه داریم. بعد مجبوریم پشت میزمون غذا بخوریم و بخوابیم و توی ماراتون‌ هفته‌ای ۴۰ ساعت کد زدن باشیم.اولش هم خیلی مزه میده. مثل یک ستاره میدرخشیم. یک بار گنده‌ای روی دوشمونه و این بهمون احساس افتخار و غرور میده که چه خفنیم. اما واقعیت اینه که این حجم انتظار کنترل نشده، زندگیمون را از بین میبره. و خیلی سریع تبدیل میشیم به آدم‌هایی که قابل اتکا نیستند و نمیشه ازشون انتظار کار به موقع داشت. چیزی که باید بدونیم و یادش بگیریم اینه که قهرمان‌های واقعی کسانی هستند به‌ شکل توقف‌ناپذیری قابل اعتماد هستند و اونکاری را که میگن انجام میدن را انجام میدن. و تنها راهی که میشه همچین آدمی بود اینه که بتونیم انتظارات از خودمون را مدیریت کنیم.لازمه که کنترل برنامه زمانیمون دستمون باشه تا بتونیم همیشه و همیشه سر زمان کد با کیفیتی را به مشتریمون تحویل بدیم. اولش خیلی سخته چون مستلزم گفتن «نه»های زیاده. و طبیعتا از سمت مقابل هم فشار خیلی زیادی بهمون وارد میشه، ولی وقتی کار را به موقع و با کیفیت تحویل بدیم اوضاع تغییر میکنه. و میبینیم که در طول زمان جایگاهمون در تیم کاری به بالاترین سطح ممکن میرسه. چون قابل اعتمادیم :)۴. همه زمانی که روی «بهتر» کردن کد وقت میذارین برنمیگرده!وقت ما سرمایه‌مون هست. و وقتی صرف کاری می‌کنیمش داریم سرمایه‌گذاری می‌کنیم. و طبیعیه که وقتی شما سرمایه‌گذاری می‌کنید انتظار داری که این سرمایه‌گذاری برگرده. و خوب انتظار اینه که در بدترین حالت همونقدری که گذاشتیم برداشت کنیم.درواقع اگر بخوایم برگردیم به جمله «کنت بک» باید به یک موضوعی حواس بدیم که توی چاله‌اش نیفتیم: «عالی» کردن به معنای «بی‌نقص» کردن نیست و «سریع» کردن به معنی «سریعترین چیز ممکن» نیست.کد «عالی»، کدی هست که درست و مطمئن کار میکنه و ریفکتور کردنش راحته. و کد «سریع» کدیه که روی کلیت تجربه کاربری کاربر تاثیر منفی نذاره. به عبارت دیگه مهم اینه که سایتمون از نظر کاربر سریع باشه.بنابراین وقتمون را صرف کم کردن زمان تابعی که به ندرت استفاده میشه نکنیم. یا سعی نکنیم چند میلی‌ثانیه از زمان لود یک تابع کم کنیم. چون کاربر متوجهش نمیشه. و از همه مهم‌تر، کدی را که داره کار میکنه و خیلی هم خوب نوشته شده را صرف اینکه یک تکنولوژی جدید یاد گرفتیم ریفکتور نکنیم.چون زمانی به خودتون میاید که کل کاری را که کردیم را داریم ریفکتور میکنیم و برای اینکار به شما پولی نمیدن! دیدم که میگم :)۴. زمان برنامه‌ریزی شده، شما را کاراتر میکنه!باورش و قبول کردنش برامون سخته. چجوری میشه کاراتر بود وقتی تمام وقتت را صرف تولید چیزی نمیکنی؟ خوب حقیقت داره!طبق تحقیق صورت گرفته که با هدف مطالعه تقاضای کاری و محرک‌های کارجویان صورت گرفته مشخص شده که ما آدم‌ها میزان مشخص و محدودی از منابع را داریم و وقتی به‌طور مداوم این منابع را استفاده میکنیم به اندازه‌ای که میتونیم کارا نخواهیم بود. وقتی ما خسته می‌شیم، کاراییمون و توان حل مسئلمون کاهش پیدا میکنه.مغز ما نیاز داره که منابعش را برگردونه و خودش را سر و سامان بده. و اگر این نیازش برآورده نشه طبیعتا کاراییش در حل مسئله و در مجموع کارایی کلی ما پایین میاد. بدن و مغز ما نیاز به استراحت داره. و دوست داشته باشیم یا نه به‌دستش میارن. همون موقع‌هایی که حال هیچ کاری را نداریم یا مسئله ای که ۱۰ بار حلش کردیم را نمیدویم حتی از کجا کپی کنیم یا با همکارمون دعوامون میشه همون موقع‌ها اس :) پس زمانتون را برنامه‌ریزی کنید. واقعا قلم بردارید و روی تقویم، زندگیتون را برنامه‌ریزی کنید. این کار باعث میشه تا برای زمانمون برنامه داشته باشیم بدون اینکه در مورد کارهامون احساس گناه بکنیم:)همین :)پی‌نوشت ۱: میخواستم بگم یادم توی قسمت ۰ آموزش کاتلین یادم رفت بنویسم در بخش قبل که من به جز آموزش کاتلین موارد دیگه ای هم که ببینم و دوست داشته باشم به طور مرتب هر چند وقت یبار :) اینجا مینویسم! برام لذت بخشه و امیدوارم شما هم بخونید و لذت ببرید و نظراتتون را با من سهیم بشید :)پی‌نوشت ۲: اگر موضوعی براتون جذابه بهم بگید بهش نگاه میکنیم اگر میگنجید در زمان و سوادمون حتماً بهش می‌پردازیم :)