چگونه برنامهنویسی را بهتر یاد بگیریم؟
۲۲ بهمن ۱۳۹۹
جملهی کلیدی که بایستی در همان ابتدای مقاله به آن اشاره داشته باشیم این است که کمتر یاد بگیرید اما دستاوردهای بیشتری داشته باشید. اکثر افرادی که تازه وارد دنیای برنامهنویسی شدهاند با آمدن تکنولوژیهای جدید، سریعا آنها را به لیست یادگیریهای خود اضافه میکنند اما معمولا قبل از تسلط بر آن، تکنولوژی تازهتری ظاهر میشود و توجه افراد را به خود جلب میکند.
در حال حاضر بسیاری فناوریهای محبوب وجود دارند که با خبرهای جنجالی انتشار آنها وسوسه میشوید یادگیری آنها را شروع کنید اما چگونه میتوان بر روی همهی این تکنولوژیهای تسلط پیدا کرد؟ حتی پرسیدن این سوال هم اشتباه است زیرا شما زمان محدودی برای زندگی در اختیار دارید.
چرا یاد میگیرید؟
میخواهید یک زبان برنامهنویسی جدید را یاد بگیرید؟ شاید هم ترجیح میدهید که فریمورک یا کتابخانه جدیدی را امتحان کنید؟ اما چرا؟
شاید از افرادی باشید که تمایل شدیدی به رشد دارند یا اعتقاد داشته باشید که با یادگیری چیزهای جدید میتوانید ارتباط خود را با حرفهتان حفظ کنید. اگر این تکنولوژی آینده را تغییر دهد، چطور؟ حتما که شما میخواهید با یادگیری آن در اوج بمانید.
اینها فقط برخی دلایلی هستند که یک فرد میتواند در ذهن خود آنها را تصور کند و سریعا تصمیم بگیرد تا فناوری جدیدی را امتحان کند اما آیا این دلایل برای یادگیری یک تکنولوژی جدید، کافی و مناسب هستند؟ مطلقاً نه!
ممکن است دوست داشته باشید که چیزهای جدیدی را بیاموزید حتی اگر مفید نباشند اما اگر تصمیم شما حرفهای شدن است، یادگیری برای سرگرمی نتیجهای نخواهد داشت. تنها یک دلیل قانع کننده برای یادگیری مهارت جدید وجود دارد آن هم این است که مهارت جدید را در حرفهمان استفاده کنیم.
چرا صدها ساعت وقت و زمان را صرف یادگیری یک زبان برنامهنویسی جدید میکنید درصورتی که هرگز از آن استفاده نخواهید کرد؟ حتی پس یک یا دو سال همهی چیزهایی که یاد گرفتهاید نیز فراموش میشوند. زمان، گرانبهاترین سرمایه شما است. بهراحتی آن را صرف چیزهای بیفایده نکنید. یادگیری چیزهای اشتباه به اندازهی تماشای Netflix بیفایده است. بنابراین مراقب باشید که زمان خود را صرف چه چیزهایی میکنید.
تنها راه حل برای یادگیری کارآمد، تمرکز بر موارد مهم و رها کردن سایر موارد است. برای رسیدن به هدف خود باید منظم و شکست ناپذیر باشید. هیاهوی موجود در شبکهها و رسانههای اجتماعی را رها کنید.
چه مهارتهایی ارزشمند هستند؟
شما بایستی بیاموزید که چگونه مهارتهای ارزشمند را تشخیص دهید. مهارتهای مختلف برای افراد مختلفی ارزشمند هستند بنابراین وضعیت شما منحصر به خودتان است اما برخی دستورالعملها میتوانند در انتخاب مهارتهای صحیح به شما کمک کنند:
مهارتهایی که استفاده میکنید
یکی از موارد بسیار مهم که باید در یادگیری عمیقتر آنها زمان خود را صرف کنید، مهارتهای فعلی شما هستند. برای مثال اگر از فریمورک Laravel برای بکاند و از React برای فرانتاند برنامه خود استفاده میکنید بایستی در استفاده از آنها بهعنوان ابزارهای خلق ارزشهای تجاری، حرفهای شوید.
زبانها و فریمورکها بهطور مداوم بهروز میشوند و شما نیز باید علم خود را بهروز کنید چونکه بسیاری از ویژگیهای جدید، کار شما را آسان یا سریع میکنند. تسلط بر ابزاری که استفاده میکنید، دو مزیت عمده را بههمراه دارد:
- بلافاصله میتوانید از دانش خود استفاده کنید.
- برای مهارتهای خود حقوق دریافت میکنید.
مهارتهایی در ارتباط با مهارتهای فعلی شما
پس از حرفهای شدن در مهارتهایی که از آنها مرتبا استفاده میکنید زمان آن است که دانش خود را توسعه دهید و بهترین مهارتهایی که میتوانید یاد بگیرید، مهارتهایی در ارتباط با مهارت فعلی شما هستند. برای مثال فرض میکنیم که شما یک توسعهدهنده فرانتاند هستید و با React رابطهای کاربری خارقالعادهای را خلق میکنید. حال یادگیری ساخت برنامهای serverless میتواند قدم بعدی شما باشد تا بدون نیاز به یک توسعهدهنده بکاند، برنامههای خود را توسعه دهید یا حتی به سمت طراحی بروید تا بدون کمک طراح گرافیکی قادر باشید برنامههای خود را طراحی کنید.
مهارتهای مرتبط برای یک توسعهدهنده حرفهای بکاند میتواند یادگیری DevOps یا اصول اولیه فرانتاند باشد. با توسعهی دانش خود به یک توسعهدهنده full-stack تبدیل میشوید که میتواند بهطور مستقل برنامهها را توسعه داده و کارهای استقرار آن را نیز انجام دهد.
مهارتهایی که میخواهید در آینده استفاده کنید
گاهی اوقات احساس میکنید آنچنان که باید به مهارتهای فعلی خود علاقهمند نیستید و هیچکدام از مهارتهای مرتبط نیز هیجان انگیز نیستند. در این صورت اگر ایدهای برای ساخت یک برنامه در ذهن خود داشته باشید بایستی مهارتهای لازم برای ساخت آن برنامه را بیاموزید.
البته باید مراقب باشید زیرا بسیاری از برنامهنویسان ایدههای مبهمی دارند و در هنگام انتخاب ابزار و دانش مورد نیاز خود اشتباههایی غیر قابل جبران میکنند که حتی پس از دو ماه تازه متوجه میشوند که در توسعهی برنامهی خود به جایی نرسیدهاند. برای جلوگیری از این مسئله میتوانید مهارتهای خود را تقویت کنید و فقط در مواردی که نیاز جدی احساس میکنید به یادگیری تکنولوژیهای جدید بپردازید. ساخت برنامه را بهانهای برای یادگیری یک مجموعه کامل از زبانها و ابزارهای جدید برنامهنویسی قرار ندهید.
مبانی اولیه
ممکن است احساس کنید که در مسیر خود گم شدهاید و نمیدانید که باید بر روی چه چیزی تمرکز کنید. در این حالت فقط یک قانون ساده را دنبال کنید:
اگر شک دارید، بر روی مبانی پایه و اصول اساسی تمرکز کنید.
تسلط بر الگوریتمها، ساختمان داده، دیزاین پترنها و … همیشه گزینه مناسبی است. حتی شاید خودتان نیز متوجه نشوید اما دائما از دانشهای پایه استفاده میکنید. همچنین اصول پایه برنامهنویسی را میتوانید در همهی زبانها و فریمورکها استفاده کنید و به ابزار و تکنولوژی خاصی محدود نمیشوید.
چه مهارتهایی کم ارزش هستند؟
راهنماهای بسیاری برای انتخاب مهارتهای لازم در حوزههای مختلف وجود دارد اما باید به خطوط قرمز نیز توجه داشته باشید و قبل از شروع یادگیری آنها را بدانید.
تکنولوژیهای جدید
هر تکنولوژی جدیدی را یاد نگیرید. فرقی نمیکند که سازندگان آن تکنولوژی چه ادعاهایی میکنند. مهم نیست افرادی که شما از آنها الگو میگیرید با این تکنولوژی جدید هیجان زده شدهاند. بیشتر تکنولوژیهای جدید بهسرعت محو میشوند. دنیای برنامهنویسی بهسرعت در حال تغییر است و زمانی که برای یادگیری این تکنولوژیهای جدید صرف میکنید هیچوقت جبران نخواهند شد. البته اینها به این معنا نیست که باید از یادگیری هر چیز جدیدی اجتناب کنید.
منطقی است که به یادگیری تکنولوژیهای جدیدی بپردازید که زمینههای موفقیت آنها در آینده وجود دارد یا در حرفهی فعلی شما مورد استفاده قرار میگیرند. تخصص در یک تکنولوژی جدید یک استراتژی پر خطر است زیرا میتواند وقت شما را تلف کند اما همچنین میتواند بسیار خوب باشد زیرا در زمان کمی میتوانید به آن مسلط شوید.
تکنولوژیهایی که فقط یک بار میخواهید از آنها استفاده کنید
بعضی اوقات قصد ندارید که از یک تکنولوژی یا مهارت جدید چندین بار استفاده کنید. این میتواند دلیلی باشد که شما نباید وقت خود را به یادگیری آن اختصاص دهید. بیایید فرض کنیم که شما یک توسعهدهنده فرانتاند هستید و باید چند نمودار پیچیده را توسعه دهید. ممکن است وسوسه شوید که d3.js را یاد بگیرید اما شما باید بررسی کنید که آیا یادگیری d3.js ارزشش را دارد یا خیر؟ زیرا اکثر مواقع شما فقط یک مشکل دارید، مثلا در این مثال فقط به نمودارها نیاز دارید اما یادگیری d3.js بهطور کامل میتواند فقط وقت شما را تلف کند.
در این مواقع میتوانید راه حلهای سادهتر را در اولویت قرار دهید تا فقط کار را به پایان برسانید. همچنین ابزارهایی که به کدنویسی نیازی ندارند هم میتوانند مفید باشند زیرا یادگیری آنها به زمان زیادی نیاز ندارد. حتی اگر انتخابی جز d3.js وجود نداشت میتوانید بخشی از هزینهی پروژه را به فرد دیگری بدهید تا نمودارها را برای شما توسعه دهد.
تکنولوژی غیرمرتبط با مهارت فعلی شما
یادگیری مهارتهای غیرمرتبط با حوزهی تخصص شما اغلب وسوسه انگیز است. برای مثال اگر شما یک توسعهدهنده فرانتاند با React باشید ممکن است وسوسه شوید که به سراغ یادگیری Vue.js یا حتی Angular.js بروید. حتی در برخی مواقع از حوزهی تخصص خود خارج میشوید و سراغ حوزهای مانند Machine Learning میروید اما همانطور که میتوانید تصویر کنید پس از گذشت زمان، هیچ چیزی از مهارتهای جدیدی که برای آنها وقت گذاشتهاید را به یاد نخواهید آورد زیرا استفادهی منظمی از آنها نخواهید داشت.
بهتر است که شما هرگز این اشتباهها را تکرار نکنید و به یادگیری مهارتهایی بپردازید که شما را در حوزهی تخصصی خودتان کاملتر میکنند اما اگر متقاعد شدهاید که میخواهید مهارتهای غیر مرتبط دیگری را بیاموزید توصیه میشود که اطمینان حاصل کنید از آن مهارت جدید مرتباً استفاده خواهید کرد.
تکنولوژیهای مُرده و در حال مرگ
یادگیری تکنولوژیهای مُرده و در حال مرگ، اتلاف وقت است. اگر متوجه شدهاید که یک تکنولوژی در حال مرگ است سعی کنید در سریعترین زمان ممکن از آن فاصله بگیرید و بهدنبال جایگزینی برای آن باشید. اگر سالها قبل میخواستید در زمینهی توسعهی وب فعالیت کنید بایستی یادگیری jQuery را در اولویتهای خود قرار میدادید اما امروزه باید تمرکز خود را بر روی یادگیری تکنولوژیهای مدرنتری مانند React بگذارید.