۷ روش برای یادگیری یک زبان برنامهنویسی جدید
برنامهنویسی کار سختی است و تنها افرادی که این سختی را قبول ندارند، برنامهنویسان باتجربه هستند. طبیعی است که در هنگام یادگیری یک زبان برنامهنویسی جدید، فشار زیادی را برروی خود احساس کنید، چراکه در هر زبان مسائل بسیار زیادی هستند که باید بیاموزید و فراموش کردن آنها نیز بسیار آسان است.
در حقیقت اگر یادگیری برنامهنویسی را به روش درست آن انجام ندهید، دوران سختی در پیشرو خواهید داشت. قطعا زمانی که اقدام به یادگیری یک زبان، کتابخانه یا یک «فریمورک» (Framework) میکنید، میخواهید که هر چه سریعتر فرایند یادگیری را به پایان برسانید. خوشبختانه نکاتی وجود دارند که میتوانند در یادگیری برنامهنویسی به ما کمک کنند که در این مقاله به برخی از آنها اشاره میکنیم.
راه صد ساله را یک شبه نروید
شاید کسی دوست نداشته باشد این را بشنود، ولی یادگیری سریع و یکدفعه، بدترین راه یادگیری برنامهنویسی است. متاسفانه در دوران مدرسه و دانشگاه، تنها راهی که برای مطالعه یاد میگیریم همین است که همه چیز را یک شبه مطالعه کنیم. ولی باید بدانید که هرچه سعی کنید یک چیزی را یکدفعه یاد بگیرید، بیشتر آن را از یاد خواهید برد. این مساله تقریبا در تمام موضوعات غیر حفظی وجود دارد، ولی در برنامهنویسی از هر جایی بیشتر است.
در واقع این قضیه در یک تحقیق که در سال 2008 در دانشگاه کالیفرنیا در شهر سندیگو صورت گرفت، مشخص شد. در نتایج این تحقیق آمده است که:
«اگر مطالعه به صورت بخش بخش در طی چند جلسه صورت بگیرد، دانشآموز بهتر عمل خواهد کرد تا اینکه بخواهد تمام مطالب را یک جا بیاموزد.»
دلیل این امر چیزی به نام «اثر موقعیت در زنجیره» (Serial position effect) است:
«اثر موقعیت در زنجیره میگوید که یک فرد بهترین گرایش را به بخش اول و آخر یک زنجیره و بدترین را به بخش وسطی آن دارد.»
به عبارتی دیگر، در هر مطالعه، احتمال بیشتری وجود دارد که بخش اولی و آخری مطالعه را به یاد بسپارید و بخش وسطی را فراموش کنید. بهتر است که تعداد بخشهای شروعی و پایانی را به حداکثر آن برسانید، به همین جهت برای یادگیری مفاهیم جدید، بهتر است چندین جلسهی مطالعهی کوتاه داشته باشید تا اینکه طی تعدادی جلسهی بلند به مطالعهی بپردازید.
دفعهی بعدی که خواستید برنامهنویسی یاد بگیرید، موضوع به موضوع پیش بروید و بین هر موضوع استراحت کنید (البته حواستان باشد این استراحتها منجر به تعویق افتادن یادگیری نشود).
مرور کنید، مرور کنید و مرور کنید
یکی دیگر از دلایلی که یادگیری عجولانه برای علوم دراز مدت مناسب نیست، نا مانا بودن حافظه است. البته همیشه اینطور نیست، برخی از خاطرات از کودکی در حافظه میمانند و هیچوقت از بین نمیروند، ولی این مساله تنها برای خاطراتی است که با احساسات همراه هستند.
بحثهای زیادی در رابطه با این مساله صورت گرفته است که آیا حافظه بعد از مدتی از بین میرود یا توسط خاطرات جدید جایگزین میشود. فرقی ندارد کدام یکی از این تئوریها صحیح باشند، نتیجهی هر دو این است که پس از مدتی حافظهها محو میشوند. اهمیت مرور کردن در اینجا مشخص میشود.
فرض کنید که در یک جنگل از حافظهها در حال قدم زدن هستید. هر زمانی که بخواهید به یک حافظه دسترسی داشته باشید، باید یک مسیر عصبی برای آن پیدا کنید. هر بار که به سمت آن حافظه میروید، مسیر آن کمی باز میشود (درست همانند مسیری خاکی که با گذر مکرر مردم از آن، شکل یک جاده به خود میگیرد). اگر از این مسیر استفاده نکنید، با گذر زمان از بین میرود و آن حافظه در جنگل گم میشود.
از این بحث روانشناسی بگذریم، اصل کلام این است: وقتی پای برنامهنویسی وسط میآید، تنها یادگیری یک موضوع کافی نیست. باید هر کدام از این دروس را بارها و بارها مرور کنید تا هرچه عمیقتر در ذهن شما ثبت شود. اگر به یادگیری یک شبه عادت داشته باشید، ممکن است این کار برایتان سخت باشد، ولی وقتی شروع به مرور یادگرفتههایتان کنید، از تاثیر آن شگفت زده خواهید شد.
از منابع مختلف استفاده کنید
یکی از سختترین بخشهای برنامهنویسی برای تازه کاران، گستردگی جزئیات و نکاتی میباشد که برای شروع باید با آنها آشنا شوند و تا زمانی که به درک عمیقی از این موارد نرسند، همه چیز برایشان سوال خواهد بود.
هر زبان قوانینی دارد که باید آنها را بیاموزید. این قوانین میتوانند کلمات کلیدی، سمیکالنها، فضاهای خالی و هر چیز دیگری باشند که برای کدنویسی در آن زبان باید بدانید. برخی زبانها حساستر هستند، برخی کمتر ایراد میگیرند و برخی نیز به طور کلی دستورات (Syntax) خودشان را دارند که در هیچ جای دیگری مشاهده نکردهاید. اگر تجربهی قبلی در کدنویسی نداشته باشید، این موارد میتوانند برایتان گیج کننده باشند.
اگر از مفاهیم خاص هر زبان بگذریم، باز مفاهیمی نظیر شیء گرایی، «entity-component systems» و الگوها «observer» وجود دارند که یادگیری آنها در بار اول میتواند کار طاقت فرسایی باشد. مثلا فرض کنید شخصی یک تصویر از یک مجسمه به شما نشان داده است. شاید این تصویر کمک کند یک دید کلی نسبت به مجسمه پیدا کنید، ولی جزئیات آن را نخواهید فهمید. یک تصویر از راه دور جزئیات کافی ندارد و یک تصویر از نزدیک دید کافی نخواهد داشت. با این حال با هر تصویر جدید میتوانید متوجه بافت، اندازه و جزئیات از زوایای مختلف نظیر جلو، کنار یا بالا شوید.
یادگیری زبان یک مساله شخصی است. ممکن است همه از منبع A به عنوان بهترین روش برای یادگیری زبان X یاد کنند ولی شما اصلا آن را قبول نداشته باشید. شاید همه از منبع B متنفر باشند و شما در یک نگاه جذب آن شوید، و شاید شخصی دیگر با منابع A و B به مشکل بخورد ولی منبع C برای وی مفید باشد. به همین جهت است که باید از انواع منابع استفاده کنید، چراکه نحوهی یادگیری در هر فرد متفاوت است. اگر با یک موضوع مشکلی دارید، به دنبال یک منبع دیگر بگردید، شاید منبع جدید برایتان مناسبتر باشد، شاید هم نباشد.
حتی اگر فکر میکنید به موضوع خاصی تسلط کافی دارید، باز هم ممکن است چیز بیشتری برای یادگیری در آن وجود داشته باشد. حتی ممکن است توضیحات کسی بتواند مفهوم را در ذهنتان سادهتر کند. به این دلایل، بهتر است تا حد ممکن از منابع مختلف استفاده کنید.
مفاهیمی که یاد میگیرید را آموزش دهید
در برنامهنویسی مفهومی داریم به نام «تکنیک گفتوگو با اردک پلاستیکی» (rubber duck debugging) که یعنی کد را به صورت خط به خط به یک اردک پلاستیکی توضیح دهید. این تکنیک زمانی استفاده میشود که بخشی از کد مشکل دارد، ولی دلیل مشخصی برای آن پیدا نمیکنیم.
مسالهی جالب این است که اکثر برنامهنویسها در هنگام توضیحات کد، متوجه مشکل منطقی آن میشوند. صحبت کردن باعث فعال شدن بخش متفاوتی از مغز میشود و شما را مجبور میکند که مشکل را از زاویهی متفاوتی مشاهده نمایید. این روش در یادگیری مطالب جدید نیز برای ما مفید خواهد بود. شاید جملهی زیر از آلبرت انیشتین را شنیده باشید:
«اگر نمیتوانید چیزی را توضیح دهید، یعنی به خوبی متوجه آن نشدهاید.»
این جمله تقریبا در همه جا صحت دارد. هرچه درکتان از یک موضوع بیشتر باشد، بهتر میتوانید آن را به شخصی بدون دانش قبلی توضیح دهید، به طوری که وی نیز متوجه آن شود. مخالف این موضوع نیز وجود دارد. زمانی که سعی در تدریس یک موضوع میکنید، متوجه مفاهیمی میشوید که نمیتوانید به خوبی آنها را به زبان بیاورید. این روش به شما کمک میکند متوجه ضعفتان در آن موضوع شوید و با پیدا کردن توضیح مناسب آن، مفهوم را در ذهنتان استوارتر کنید. به این کار «یادگیری با تدریس» (learning by teaching) میگویند و تقریبا از روی همان تکنیک گفتوگو با اردک به وجود آمده است.
البته نیازی نیست که حتما هر مفهومی که یاد میگیرید به یک نفر بیاموزید، ولی میتوانید هر موضوع جدید را به یک اردک پلاستیکی یا یک دوست نامرئی توضیح دهید. شاید ابتدا این کار به نظر احمقانه بیاید، ولی با مرور زمان ثمر آن را در مانایی آن حافظه خواهید دید.
تمرین آگاهانه نتیجهی خوبی دارد
مفهوم جا افتاده از «استعداد» کاملا اشتباه است. هیچ کسی به طور مادرزاد یک ویولنیست، کشتیگیر یا برنامهنویس قهار به دنیا نمیآید. درست است که هر کسی به رشتهی خاصی علاقهی بیشتری دارد، ولی استعداد بدون تجربه بی فایده است. سخت کوشی نیز همیشه از استعداد ارزش بیشتری دارد.
«Malcolm Gladwell» مخترع قانون «10,000 ساعت» است که میگوید باید برای هرچیزی 10,000 ساعت زمان بگذارید تا به آن تسلط کامل پیدا کنید. با اینکه این جمله صحیح است، ولی خیلی از مردم حرف وی را اشتباه برداشت میکنند. به طور خلاصه، 10,000 ساعت اصلا تضمینی برای تسلط کامل نیست. از قدیم گفتهاند:
«تمرین شما را خوب نمیکند، خوب تمرین کردن شما را خوب میکند.»
برای اینکه تمرین ارزشمند باشد، باید آگاهانه صورت بگیرد. تسلط کامل فقط با 10,000 ساعت تمرین آگاهانه به وجود میآید.
اینکه چگونه تمرین کنید، از اینکه چقدر تمرین کنید بسیار مهمتر است. مطالعه، مشاهدهی فیلمهای آموزشی، گوش کردن به فایلهای صوتی، همه و همه گذرا هستند. شاید به عنوان یک برنامهنویس تازه کار دوست داشته باشید از یک آموزش به آموزش بعدی بروید، موضوعی پس از دیگری را شروع کنید و در هنگام یادگیری از هیچکدام از آن دانشهای تئوری به طور عملی استفاده نکنید، ولی این کار کاملا اشتباه است و باید از انجام آن خودداری کنید.
درک یک مثال با حل یک مساله از پایه، کاملا متفاوت هستند. اگر میخواهید مراحل یادگیری را سریعتر طی کنید، باید حاضر باشید که به جای انجام کارهای گذرا، کمی خودتان فعالیت داشته باشید. تمرین عملی تنها نوع یادگیری است که در نهایت اهمیت خواهد داشت.
برروی پروژههای شخصی آزمایش کنید
در دوران مدرسه، تکلیف برای همه دانشآموزان همانند اقدامی از سوی دبیران بود که سرگرمی را از ما بگیرند و سرمان را به درس مشغول کنند. ولی الان که به عقب نگاه میکنیم، تکالیف به نظر چیزی منطقی میآیند و ما را مجبور میکردند از دانش جدیدی که به دست آوردهایم به طور عملی استفاده کنیم.
اگر در کلاس برنامهنویسی ثبت نام کردهاید، به هیچ عنوان نقش موثر تکالیف را دست کم نگیرید. همیشه آن را جدی بگیرید و به عنوان شانسی برای استحکام بخشیدن به دانشتان در حافظهی بلند مدت به آن نگاه کنید. البته در خیلی مواقع، تکلیف نیز کافی نیست. حتی در برخی اوقات که به صورت خود آموز اقدام به یادگیری میکنید، حتی دبیری ندارید که تکلیفی به شما بدهد.
در همچین شرایطی، باید برای خودتان پروژه تعریف کنید. میتوانید چندین ایده از خودتان مطرح کرده و آنها را پیادهسازی کنید یا اگر ایدهای ندارید نیز میتوانید از مطلب «برنامهنویسی را سریعتر بیاموزید – ۵ ایده برای شروع کدنویسی» در فرادرس کمک بگیرید. اگر کاملا در برنامهنویسی تازه کار هستید، میتوانید یک بازی دوز یا «Hangman» طراحی کنید. اگر تجربه دارید و میخواهید یک «فریمورک» جدید را بیاموزید، یک اپلیکیشن موبایل یا بازی تحت وب طراحی کنید. هر چیزی که شخصا به آن علاقهمند باشید، گزینهی مناسبی است. این روش به دو دلیل بسیار کارآمد است.
اولا، توجه شما را به خود جلب خواهد کرد. تحقیقات نشان دادهاند که دانشآموزان در هنگام کار برروی موضوعاتی که به آن علاقه دارند، بهتر یاد میگیرند. یک پروژهی شخصی نیز دقیقا همین ویژگی را دارد. شما در این حالت هدفی دارید که واقعا میخواهید به آن برسید، در نتیجه انگیزهی بیشتری نیز برای جذب اطلاعاتی که شما را به آنجا برساند خواهید داشت.
ثانیا، هیچ فشاری برای موفقیت برروی شما نیست. موفق شدن همیشه چیز خوبی است، ولی رسمی نبودن آن باعث میشود بتوانید خلاقیت بیشتری در آن خرج کنید و با قوانین بیشتر بازی کنید. درست است که به طور مداوم به مشکل خواهید خورد، ولی این کار بیشتر شبیه به لگوبازی خواهد بود تا انجام تکلیف، لذت آن بیشتر و اضطراب آن کمتر است.
خونسرد باشید و همه چیز را نشانهگذاری کنید
هیچ برنامهنویسی تمام آموختههایش را به یاد ندارد، این یک حقیقت است. حتی اگر مدت زمان زیادی را صرف کار با یک فریمورک یا کتابخانه کرده باشید، باز هم طبیعی است که نتوانید تمام توابع یا متغیرهای آن را نام ببرید. در واقع، سعی در حفظ کردن همه چیز فقط اتلاف زمان و انرژی است. وجود دفترچه یادداشتها بی دلیل نیست، وقتی میتوان یک چیزی را تنها در مواقع نیاز مطالعه کرد، چه لزومی دارد که تمام آن را در ذهنمان ذخیره کنیم؟ همین کار را با (API)های برنامهنویسی نیز میتوان انجام داد.
باید بدانیم که در چه مواقعی نیاز به حفظ کردن داریم و چه موقع فقط یادداشت کردن کافی است. وقتی پای مسائل مفهومی در میان است، همیشه باید تا حد توان آنها را یاد بگیرید و حفظ کنید. حتی اگر تنها بخش تئوری آن را درک کنید کافی است و نیازی نیست حتما بتوانید از آن در کدنویسی استفاده کنید (البته باید مفهوم تئوری را به قدری خوب متوجه شده باشید که بتوانید آن را به دیگران نیز تدریس کنید).
برای سایر مباحث نظیر نام توابع، لیست پارامترها یا حتی قوانین هر زبان، نیازی به حفظ کردن آنها ندارید. همینکه آنها را یادداشت کنید کفایت میکند. بعضی مواقع آنقدر یک چیزی را یادداشت و مطالعه میکنید که ناخواسته در ذهنتان مینشیند. اگر این اتفاق بیفتد که خیلی خوب است، اگر هم نیفتد، باز مشکلی نیست.
سخن آخر
برنامهنویسی سخت است و به طور طبیعی هر کسی در آن به مشکل میخورد. حتی افرادی که سالها برنامهنویس بودهاند نیز در گاهی اوقات برای یادگیری مفاهیم جدید باید با خودشان کلنجار بروند. اگر جایی به مشکل برخوردید یا چیزی به یادتان نیامد، خودتان را مقصر ندانید.
امیدواریم که راههای بالا برایتان مفید بوده باشند و در یادگیری برنامهنویسی به شما کمک کنند. اگر مشتاق به آموختن برنامهنویسی هستید، مطالب زیر نیز میتوانند برایتان مفید باشند:
- مجموعه آموزشهای برنامهنویسی
- مطالعه منظم را تنها در سه مرحله بیاموزید
- ۵ نکته برای شروع برنامهنویسی اندروید — قبل از ساخت اولین اپلیکیشن بخوانید.
#
از نسخه یک v1.0 شروع کنید
توضیحات شما خیلی خوب است. سپاسگزارم
سلام . خیلی متن ها در این مورد خوانده ام. متن شما بدون اغراق فوق العاده مفید است. الهی که زنده باشید. من همیشه مجله فرادرس را به دیگران توصیه کرده ام.
ممنون بابت مطالب مفیدتون
سلام
مرسی بابت مطلب خوبتون