هر چه کمتر، بهتر: برنامه‌نویس بی‌رحم

Nathan Lemon وقتی یک خبر جدید در مورد یک زبان برنامه‌نویسی یا یک تکنولوژی می‌شنوید چه می‌کنید؟ احتمالا مثل بیشتر برنامه‌نویس‌ها کمی در مورد این خبر مطالعه می‌کنید و توجه‌تان جلب خواهد شد. چند وب سایت آموزشی را پیدا می‌کنید و سریعا به لیست در حال یادگیری اضافه می‌شود :)حتی ممکن است مشغول یادگیری هم شوید؛ چند ویدئوی آموزشی ببینید، نگاهی به مستندات بیاندازید و کمی سرگرم شوید. اما معمولا قبل از اینکه ماهر شوید یک تکنولوژی جدید ظهور می‌کند و توجه شما بازهم جلب موضوع جدیدتر خواهد شد.سوال واضح است: با این همه تکنولوژی موجود در دنیای امروز چگونه در می‌توان در همه آن‌ها مهارت پیدا کرد؟ جواب از سوال واضح‌تر است: نمی‌توانید :)ما نه زمان نامحدود داریم و نه توان نامحدود. خوشبختانه یا متاسفانه امکان یادگیری همه چیز برای ما وجود ندارد. در واقع برای برنامه‌نویس شدن باید خیلی کمتر از چیزی که فکر می‌کنید را یاد بگیرید.تنها یک گنج وجود دارد: زمانسال جدید چه برنامه‌ای دارید؟ یادگیری یک زبان برنامه‌نویسی جدید؟ ماهر شدن در یک فریمورک یا کتابخانه؟ تغییر مسیر برنامه‌نویسی؟ قبل از تصمیم‌گیری از خودتان بپرسید چرا؟ احتمالا خواهید گفت چون احساس می‌کنم این زبان یا مسیر را دوست دارم یا می‌خواهم پیشرفت بیشتری در کارم داشته باشم یا چون احتمال می‌دهم در آینده دور این تکنولوژی سهم زیادی از بازار را اشغال می‌کند نمی‌خواهم جایگاهم از دست برود و می‌خواهم در رینگ بمانم :)آیا این‌ها دلایل خوبی هستند؟ الزاما خیر. اگر زمان اضافی کافی نداشته باشید‌ (که احتمالا هیچ‌کس زمان اضافی ندارد!) آیا باز هم حاضرید صرفا به خاطر علاقه یا احتمال موفقیت در آینده زمان خود را به یادگیری یک زبان جدید اختصاص دهید؟ اگر زمان نامحدود ندارید یادگیری از سر تفریح اتلاف وقت است :)تنها یک دلیل قانع کننده و محکم برای یادگیری یک مهارت جدید وجود دارد: استفاده از آن.چرا ساعت‌ها زمان صرف یادگیری چیزی کنیم که در نهایت یا استفاده نخواهد شد یا استفاده بسیار کمی دارد؟ اگر فقط چند ماه از یک زبان برنامه‌نویسی که به تازگی آموخته‌اید استفاده نکنید احتمالا همه چیز فراموش خواهد شد و به نقطه اول برمی‌گردید.اگر شما هم به سرمایه گذاری علاقه‌مندید، زمان با ارزش‌ترین سرمایه شماست. به سادگی از دستش ندهید. یادگیری چیزهای بی فایده به اندازه صرف وقت در اینستاگرام بی فایده است! پس احترام وقت خود را حفظ کنید و با دروغ گفتن به خود فکر نکنید در حال پیشرفت در زندگی و کار هستید.تنها راه حل برای یادگیری بهینه تمرکز بر ضروریات و حذف بخش‌های اضافی است. برای رسیدن به این هدف باید بی‌رحم باشید. فریب هیاهوی رسانه‌ای را نخورید. احتمالا به خیلی چیزهایی که احساس می‌کنید باید سریعا یاد بگیرید نیاز نخواهید داشت و در عرض چند ماه فراموش خواهد شد. چه چیزی لیاقت وقت شما را دارد؟ Chase Clarkقبل از هر چیز باید تشخیص دهیم یادگیری کدام مهارت ارزش صرف زمان را دارد. مهارت‌های مختلف برای افراد مختلف مهم است. پس شما یک نمونه خاص هستید و در ادامه فقط چند راهنمایی برای انتخاب مهارت‌های اساسی ذکر شده است. انتخاب اینکه کدام زبان برنامه نویسی مناسب است با خود شماست :)مهارت‌هایی که استفاده می‌کنیداین مورد بسیار واضح است اما ممکن است نادیده گرفته شود. در هر زمینه‌ای که فعالیت می‌کنید دارای یک دانش فنی هستید. اگر برنامه‌نویس سمت سرور هستید شاید با لاراول آشنایی داشته باشید یا اگر برنامه‌نویس سمت کاربر باشید با ری‌اکت غریبه نیستید. به هرحال اگر می‌خواهید یک مهارت جدید یاد بگیرید اول از خودتان سوال کنید در استفاده از ابزارهایی که در حال استفاده از آن‌ها هستم به مهارت کافی رسیده‌ام؟بسیاری از زبان‌ها یا فریمورک‌های بزرگ دائما در حال به روز رسانی هستند. بسیاری از این به روز رسانی‌ها کار برنامه نویس‌ها را آسان‌تر می‌کنند پس اول سعی کنید به روز باشید و مهارت خود در استفاده از تکنولوژی‌هایی که قبلا یاد گرفتید را بالا ببرید.تسلط بر ابزاری که قبلا استفاده کرده‌اید دو مزیت مهم دارد:۱. سریعا از دانش جدید خود استفاده می‌کنید.۲. برای مهارت جدید خود حقوق می‌گیرید (یا خواهید گرفت).مهارت‌هایی که مرتبط با مهارت‌های کسب شده قبلی هستندوقتی که در یک زمینه ماهر شدید زمان رشد است. بهترین فضا برای رشد زمینه‌ای است که در آن متخصص هستید. تغییر مسیر بین زبان‌های برنامه‌نویسی مختلف جز اتلاف زمان صرف شده فایده‌ای نخواهد داشت. فرض کنیم شما یک برنامه‌نویس سمت کاربر هستید که با کتابخانه React آشنایی دارید و مهارت بالایی در پیاده‌سازی رابط‌های کاربری دارید. اگر قرار باشد یک موضوع جدید در حوزه تخصص خود یاد بگیرید احتمالا Serverless گزینه مناسبی خواهد بود. بعد از یادگیری این مهارت قادر هستید که برنامه‌های خودتان را بدون نیاز به یک برنامه‌نویس سمت سرور پیاده‌سازی کنید. یک گزینه مناسب دیگر احتمالا طراحی رابط کاربری خواهد بود. در این حالت از کمک یک طراح یا گرافیست بی‌نیاز خواهید شد :)مهارت‌هایی که در آینده نزدیک استفاده خواهید کردممکن است شما علاقه‌ای به عمیق شدن در زمینه تخصصی حال حاضر خود نداشته باشید یا زمینه مرتبط جذابی برای تخصص شما وجود نداشته باشد. احتمالا شما هم مثل بقیه چند ایده ناب برای برنامه‌نویسی دارید :)مهارت هایی که لازم دارید تا این ایده‌ها را پیاده‌سازی کنید یاد بگیرید. به این صورت هم مهارت‌هایی که یاد می‌گیرید را سریعا استفاده می‌کنید هم شاید واقعا ایده شما ناب باشد و زندگی‌تان عوض شود.البته این کار بسیار خطرناک است پس لطفا مراقب باشید. بسیاری از برنامه‌نویس ها ایده برنامه‌های مبهم و غیرکاربردی را دارند و با ورود به این فضا تنها چند ماه را برای انتخاب زبان یا پایگاه داده‌ی اشتباهی به هدر می‌دهند. برای جلوگیری از این خطا ابتدا از مهارت‌های خود برای ساخت برنامه‌ها استفاده کنید و تنها در مورد لزوم سراغ یادگیری یک مهارت جدید بروید.پیاده‌سازی یک ایده نباید بهانه‌ای برای جدا شدن از فضای حاضر و یادگیری مجموعه کاملا جدید از مهارت‌ها باشد، بلکه باید شما را کمک کند تا مرحله به مرحله دانش خود را افزایش دهید.مفاهیم اساسی و بنیادیبه هر حال هر زمانی ممکن است نتوانید انتخاب کنید مهارت بعدی برای یادگیری چه چیزی باشد، اینجا یک قانون وجود دارد:هر وقت نمی‌دانستید چه چیزی را باید یاد بگیرید مفاهیم اساسی و بنیادی را انتخاب کنید. این انتخاب قطعا انتخاب اشتباهی نخواهد بود.مهارت در الگوریتم‌ها، ساختارهای داده (Data Structures) و الگوهای طراحی (Design Patterns) همیشه گزینه‌های مناسبی هستند. شاید فکر کنید شما هیچوقت از این مهارت‌ها استفاده نخواهید کرد اما هر زمانی که برنامه‌نویسی می‌کنید در حال استفاده از این مفاهیم بنیادی هستید. اگر با علم و اختیار از این مفاهیم استفاده کنید کدهای شما تفاوت اساسی با گذشته خواهد داشت.به علاوه مفاهیم بنیادی برنامه‌نویسی همه جا کاربرد دارند و شما همیشه در حال استفاده از آن‌ها خواهید بود. به همین دلیل یادگیری این مهارت‌ها مستقل از زبان‌های برنامه‌نویسی به شما کمک خواهند کرد.چه چیزی لیاقت وقت شما را ندارد؟Andy Tحالا که چند توصیه در مورد استفاده درست از زمان را دیدیم، چند هشدار هم برای انتخاب موضوعات جدید ببینیم. باز هم تاکید می‌کنم این‌ها صرفا توصیه‌هایی هستند برای داشتن دیدی شفاف‌تر و انتخابی هوشمندانه.یک زبان برنامه‌نویسی جدید و تازه (فریمورک / کتابخانه)به محض انتشار یک زبان به سراغش نروید. مهم نیست بقیه بگویند این بهترین زبان برنامه‌نویسی از ابتدا تا کنون است. مهم نیست کسانی که شما تحسین‌شان می‌کنید ذوق زده باشند. مهم نیست که مدیر شما دیوانه‌وار از این زبان تعریف می‌کند.دنیای تکنولوژی بی‌رحم است و خیلی از تکنولوژی‌های نوظهور خیلی زود محو می‌شوند. حتی خیلی از غول‌ها هم به سادگی شکست می‌خورند. تنها کسی که در این شرایط ضرر می‌کنند برنامه‌نویسی است که زمان خود را صرف یادگیری این تکنولوژی‌ها کند. اما این توصیه به معنی این است که نباید هیچ چیز جدیدی یاد بگیریم؟ خیر. پس چه معیاری برای انتخاب مناسب است؟اگر به موضوع جدیدی برخورد کردید که شانس موفقیت زیادی دارد و همچنین به حوزه تخصص شما هم مرتبط است احتمالا گزینه خوبی برای یادگیری است. اگر خوش شانس باشید خیلی زود به موفقیت بزرگی دست پیدا می‌کنید ولی امکان تلف شدن زمان زیادی از شما هم وجود دارد. این یک معامله با ریسک بالا خواهد بود، یا وقت شما تلف شده است و یا جزو اولین متخصصان آن حوزه خواهید شد.مهارت‌هایی که احتمالا یک بار استفاده خواهید کردگاهی اوقات باید کاری را انجام دهید اما قرار نیست تکرار شود. در این مواقع نیازی نیست وقت زیادی را صرف یادگیری کنید، فقط سریع‌ترین راه برای انجام این مسئولیت را پیدا کنید. فرض کنید یک برنامه‌نویس سمت کاربر هستید و نیاز دارید چند چارت را پیاده‌سازی کنید. یکی از گزینه‌ها برای ساخت چارت های پیچیده D3.js است. اما واقعیت این است که صرف زمان برای یادگیری این کتابخانه ارزش لازم را ندارد. با یک جستجوی ساده شاید ابزارهای ساده‌تری پیدا کنید. حتی شاید بتوانید از ابزارهای بدون کدنویسی استفاده کنید. حتی شاید سپردن این وظیفه به یک برنامه‌نویس دیگر که با D3.js آشنا باشد هزینه‌ی کمتری از صرف ساعت‌ها یا روزها برای یادگیری مهارتی که احتمالا بعدا به درد شما نمیخورد، داشته باشد.مهارت‌های بی‌ربطیادگیری مهارت‌هایی بی‌ربط به تجربیات حال حاضر در بیشتر مواقع اتلاف وقت خواهد بود. برنامه‌نویس سمت کاربری که تجربه کار با React را دارد و کمی هم با PHP کار کرده است اگر زمان خود را صرف Machine Learning کند تنها وقت خود را هدر داده است.البته خیلی برنامه‌نویس‌ها هم وقت خود را با آموختن هم‌زمان چندین فریمورک و کتابخانه هدر میدهند. فرض کنید شخصی با React کار می‌کند و زمان خالی را صرف یادگیری Vue، Angular و Svelte می‌کند. این شخص اگر همین زمان را روی React Native بگذارد احتمالا نتیجه بهتری خواهد گرفت :)مهارت‌ها را به صورت تصادفی صرفا با گفته‌های دیگران انتخاب نکنید، زمان خود را صرف تکامل خود کنید.اما اگر اصرار به یادگیری یک مهارت خارج از حوزه تخصصی خود دارید لطفا در سریع‌ترین زمان ممکن از این مهارت استفاده کنید.زبان‌های منسوخ شده یا رو به زوالخاطرم هست اولین جایی که مشغول به کار شدم دوستی بود که بقیه افراد گروه را به یادگیری COBOL تشویق می‌کرد :)یادگیری زبان‌های منسوخ‌شده یا در حال نسخ فقط اتلاف وقت خواهد بود. لطفا به تکنولوژی به چشم عزیزان نزدیک خود نگاه نکنید، تکنولوژی روزی عرضه می‌شود و روزی هم از بازار خارج خواهد شد. هر زبانی عمری دارد. تشخیص اینکه یک زبان به انتهای عمرش نزدیک می‌شود قطعا سخت خواهد بود اما به محض فهمیدن این موضوع باید به فکر افتاد. شاید سال‌ها پیش jQuery بهترین گزینه برای انتخاب یک کتابخانه JavaScript بود اما در حال حاضر قطعا این انتخاب React خواهد بود. فریب کاسبان برنامه‌نویسی را نخورید، شما به هیج عنوان به jQuery نیازی ندارید :)در آخرزمانی را به آموختنِ چگونه آموختن اختصاص دهید و می‌بینید در بلند مدت ساعت‌ها از زمان شما را ذخیره خواهد کرد.شروع هر کاری سخت است، اما به یاد داشته باشید هر روز کمی آسان‌تر خواهد شد :)بازنشر و نظر شما با ارزش و باعث دلگرمی است ❤︎این نوشته ترجمه ای آزاد بود از Learn Less, Achieve More: How To Optimize Your Learning.