نود و هفت چیزی که هر برنامه‌نویسی باید بداند: تمرین آگاهانه لازمهٔ حرفه‌ای شدن است!


فرض کنید شما در یک کلاس برنامه نویسی شرکت کرده اید، یا یک دوره ی برنامه نویسی، مانند دوره های آنلاین برنامه نویسی در سکان آکادمی را گذرانده اید. مطمئناً در این دوره ها با مفاهیم زیادی مثل استفاده از شرط ها و حلقه ها، اصول شیء گرایی، مدیریت اکسپشن ها و بسیاری موارد پایه ای دیگر آشنا شده اید. به علاوه در هر کدام از این دوره ها با جزئیات عملی زیادی مثل این که در زبان پایتون برای بلوک بندی قطعه کدها به جای کروشه از تورفتگی استفاده می کنیم، یا این که زبان جاوا نسبت به حالت حروف حساس است آشنا شده اید.

با وجود آشنایی با تمام این مفاهیم و جزئیات عملی ممکن است شما باز هم نتوانید یک اپلیکیشن خوب توسعه دهید. دلیل این موضوع این است که دانش مفاهیم نظری پایه ی کار برای شروع برنامه نویسی است، با این حال تنها تمرین کردن و تمرین کردن و تمرین کردن در کدنویسی و کسب مهارت است که از شما یک برنامه نویس حرفه ای می سازد.

هیچ جایگزینی برای تمرین وجود ندارد. شما نمی توانید به خودتان بگویید که خب من یک منبع خوب برای یادگیری برنامه نویسی پیدا کردم و با مطالعه ی آن تا دو هفته ی دیگر تبدیل به یکی از خبرگان برنامه نویسی می شوم. بدون تمرین مفاهیم نظری هم به سرعت فراموش خواهند شد. با این حال همان طور که اگر برای یادگیری مفاهیم نظری استاد خوب و منابع درسی کاملی در دست داشته باشید می توانید با سرعت بیش تری مطالب را بفهمید و یاد بگیرید، در مورد یادگیری مهارت های عملی نیز راه هایی وجود دارد که می توانید با استفاده از آن ها سرعت خود را بیش تر کنید، یا اگر بخواهیم به طور دقیق تر صحبت کنیم با استفاده از این روش ها شما وقت خود را برای تمرین های بیهوده که تأثیری در مهارت آموزی شما نخواهند داشت تلف نخواهید کرد.

Deliberate Practice یا «تمرین آگاهانه» تکنیک قدرتمندی است که به شما این اطمینان را می دهد که از زمانی که برای تمرین کردن اختصاص داده اید، بیش ترین استفاده را کرده اید. تکنیک تمرین آگاهانه بر اساس تحقیقات کی. آندرس اریکسون طراحی شده است. این تکنیک چندین اصل پایه ای برای تمرین آگاهانه دارد، اما در این جا ما روی دو مورد از آن ها تمرکز می کنیم:

1- تمرین بر لبه ی توانایی ها و دانش کنونی:
تمرین بسیار ساده چیز تازه ای به شما یاد نمی دهد و تمرین بسیار سخت مانع پیشرفت شما خواهد شد. اولین نکته بسیار آشکار است. اگر سطح دشواری تمرین های شما بسیار پایین باشد، پیشرفت چندانی نخواهید داشت. اگر شما مدتی است که یادگیری برنامه نویسی را شروع کرده اید، نوشتن یک برنامه ی ساده ی HelloWorld هیچ کمکی به شما نخواهد کرد و چیز تازه ای به شما یاد نخواهد داد.

بنابراین حتی در پیاده سازی برنامه های ساده نیز خلاقیت به خرج دهید. اگر روی مثال های آموزشی خود کار می کنید، سعی کنید آن ها را به نحوی تغییر دهید و با دانش قبلی خود ترکیب کنید. مثلاً اگر یاد می گیرید که فانکشنی بنویسید که یک آرگومان استرینگ می گیرد، سعی کنید خودتان فانکشن های جدیدی بنویسید که تعداد آرگومان های بیش تر، با انواع متنوع تری داشته باشد. با این حال اگر سطح دشواری تمرین های شما بیش از حد بالا باشد، شانس زیادی برای موفقیت نخواهید داشت. اگر شما روی یک برنامه ی بسیار پیشرفته کار کنید که نتوانید بفهمید هر بخش آن چطور کار می کند، در این صورت تمرین کردن بی معنی خواهد بود. اگر شما همین دیروز شروع به یادگیری برنامه نویسی کرده اید، و امروز بخواهید روی کدنویسی یک پروژه ی بزرگ کار کنید قطعاً راه به جایی نخواهید برد.

2- بازخورد گرفتن:
کارهای خود را به دیگران ارائه کنید و از آن ها بخواهید نظر خود را در مورد نقاط ضعف و قوت برنامه هایتان اعلام کنند.
اصل دوم نیز بسیار مشهود است، با این حال بسیاری از افراد در زمان تمرین یک مهارت جدید آن را فراموش می کنند. بازخورد گرفتن به طور غیر قابل باوری اهمیت دارد، زیرا به شما این امکان را می دهد تا کار خود را تصحیح و تعدیل کنید. اگر هیچ کس به شما نگوید که چه اشتباهی کرده اید، چطور پی به خطای خود می برید و آن را اصلاح می کنید؟

مثلاً فرض کنید شما کدهای برنامه ی خود را روی یک برگه کاغذ بنویسید؛ این کار برای شما راحت تر خواهد بود، اما تا زمانی که آن ها را در محیط کامپیوتری کامپایل و اجرا نکرده باشید چطور مطمئن خواهید بود که برنامه ی درست و بدون باگی نوشته اید. به علاوه تمام تکنیک های کدنویسی را نمی توان تنها با اجرای کامپیوتری برنامه ها یاد گرفت. لازم است گاهی دیگران نگاهی به کار شما بیاندازند و نظر خود را در مورد آن بگویند.

تمرین کردن کدنویسی بدون آن که کار خود را به دیگران ارائه کنید و از آن ها بازخورد بگیرید، مثل این است که در تاریکی قدم برمی دارید. ممکن است به جلو پیش روید، ممکن است تنها دور خود بچرخید، اما نمی توانید تفاوت این دو را بفهمید.

 

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
محسن
محسن
یک موردی که در تبدیل یک برنامه نویس آماتور به خبره مهم هست
میزان تسلط به الگوریتم ها و مهمتر از اون داشتن تفکر الگوریتمی هست
اینکه وقتی با یک چالش مواجه میشن چطور بتونن اول رو تو ذهنشون با آنالیز و شفاف کن، چیزی که با مفهوم فلوچارت در برنامه نویس معمولا اجرا میشه
و بعد این طرح رو به صورت الگوریتم دربیارن که کار باید از کجا شروع بشه و مرحله به مرحله چه جوری پیش بره تا به جواب برسن
البته یک سری الگوریتم ها هم هستن که در پروژه ها زیاد استفاده میشن و تسلط در پیاده سازی اون ها هم می تونه خیلی کمک کنه، یعنی تمرین در پیاده سازی این الگوریتم ها و مسایل رایج در دنیای برنامه نویسی با استفاده از دانشی که یاد گرفتیم خیلی کمک کننده هست
سایت های زیادی هم برای دیدن این چالش ها وجود داره که بعضی ها جایزه هم دارن و در سطح حرفه ای مسابقات ACM در این زمینه برگزار میشن
Insight
Insight
بسیاری از مدرسان و متخصصان برنامه نویسی به دانشجویان و افراد تازه‌کار توصیه میکنن در هنگام یادگیری مثلا یک زبان برنامه نویسی، همزمان روی یک پروژه کار کنن و برای اونها این سوال پیش میاد که هنوز که اون زبان رو بلد نیستم پس چطور باید پروژه بنویسم؟!
در اینجا منظور این هست که این افراد وقتی که مثلا یک دستور و یا یک ساختار رو فرا گرفتن برای خودشون یک مسئله تعریف کنن و با همون دانشی که تا اون مرحله دارن سعی کنن که به حل اون بپردازن. مطمئنا این تمرین از مباحث تئوری که بیان میشه موثرتر خواهد بود و همین مسائل کوچک هستن که بعدا عناصر سازنده ی پروژه های بزرگ میشن.
کاربر میهمان
محمدمن یک کاربر مهمان هستم
تمرین فقط نیاز به تعهد به کار و فداکاری در کار دارد و بدون این دو عمرا برنامه نویس نشیم
احمدرضا برفر
احمدرضا برفر
ممنون،امروز با موبایل سايتو باز کردم واقعا جای تحسین داره،واسه صفحات موبایل خیلی خوب بهینه شده
حسن مقدم
حسن مقدم
سلام خوب بود ولی ادامش کو؟ چرا دو تاست؟
کاربر میهمان
ایرجمن یک کاربر مهمان هستم
ممنون از شما