خانه توسعهدهنده توسعهدهنده موفق یادگیری برنامهنویسی به روش جانکی
یادگیری برنامهنویسی به روش جانکی
Malcolm Gladwell در کتاب خود به نام ازمابهتران (Outliers) ادعا کرده است که برای تسلط بر هرچیزی 10,000 ساعت زمان لازم است. بنابراین اگر روزی سه ساعت برای تمرین هرچیزی وقت بگذارید کنید، در عرض ده سال در آن حوزه خواهید درخشید. اما 10,000 ساعت خیلی طولانیتر از آن چیزی است که به نظر میرسد و فراگیران بااراده، علیرغم هوشمندی و اشتیاقی که دارند، همیشه سریع یاد نمیگیرند. با این حال با استفاده از سیستمهای تکرار فاصلهدار (Spaced Repetition Systems) نهتنها میتوانید زمان صرفشده برای یادگیری را کاهش دهید، بلکه کیفیت یادگیری بهتری نیز خواهید داشت.
Jack Kinsella یک تکنیک تکرار فاصلهدار برای کوتاهکردن زمان یادگیری برنامهنویسی پیشنهاد کرده است که یادگیری برنامهنویسی به روش جانکی است. این تکنیک بر مبنای استفاده از فلشکارتهای اپلیکیشن Anki است که باید در فواصل زمانی معین یادآوری شوند. Jack Kinsella معتقد است هر برنامهنویس باهوش و منظمی که از این روش استفاده کند، میتواند در کمتر از 12 ماه در یکی از حوزههای برنامهنویسی مهارت پیدا کند.
چالشهای فرایند یادگیری
۱. خیلی زود فراموش میکنیم
تا به حال شده است یک هفته وقت صرف مطالعه برای یک امتحان کرده باشید و دو ماه بعد تقریباً تمام آن را فراموش کرده باشید؟ فراموشی یکی از موانع یادگیری مهارتهایی مانند برنامهنویسی است که به حجم فشردهای از دانش نیاز دارد. اگر بخواهید برنامههای بزرگی بسازید، باید زبانها، راهحلها، کتابخانهها و خطاهای مختلف را به خاطر بسپارید و از آنجا که مطالب فنی میتوانند خیلی انتزاعی و خشک باشند، بهسرعت فراموششان میکنید.
قانون اول یادگیری برنامهنویسی به روش جانکی: هر بار که چیز جدیدی یاد گرفتید، یک فلشکارت پرسشوپاسخ ایجاد کرده و آن را به Anki اضافه کنید.
با ایجاد یک دسته فلشکارت به نام مثلاً «علوم کامپیوتر» شروع کنید. هر دسته شامل تعداد زیادی کارت است و هر کارت یک سؤال و یک پاسخ دارد. کارتها را با برچسبهایی نشانهگذاری میکنید که محتوایش را به بهترین شکل توصیف کند. برای مثال، برچسب یک کارت میتواند «Rails» و برچسب یک کارت دیگر میتواند «SQL» باشد. هر کارت میتواند چندین برچسب داشته باشد، که نشان میدهد فناوریهای مختلف با هم همپوشانی دارند.
ممکن است به این مقاله هم علاقهمند باشید: تاریخچه برنامهنویسی
با گذشت زمان، مخزنی طبقهبندیشده از دانش برنامهنویسی خواهید داشت که بهراحتی قابل جستوجو است. داشتن چنین مخزنی مفید است، اما هیچ کمکی در به خاطر سپردن دانش نمیکند. کلید این موضوع در مرور کارتهای Anki است. Anki هرروز محاسبه میکند که کدام کارتها در خطر فراموشی قرار دارند و از شما میخواهد که آنها را مرور کنید.
هنگام مرور هر کارت، Anki سؤال را به شما نشان میدهد و نمیتوانید پاسخ را ببینید. باید در ذهنتان به سؤال پاسخ دهید و بعد جواب صحیح را ببینید تا بررسی کنید که آیا درست جواب دادهاید یا خیر. پس از پاسخدادن، چهار دکمه در پایین صفحه ظاهر میشوند که عبارتاند از: «دوباره»، «سخت»، «خوب» و «آسان». باید ببینید پاسخ به آن سؤال چقدر برایتان راحت بود و بر اساس آن، یکی از چهار گزینه را انتخاب کنید. Anki براساس گزینهی انتخابی تشخیص میدهد که چه زمانی دوباره آن کارت را به شما نشان دهد، بنابراین اگر میخواهید الگوریتم درست کار کند، باید صادقانه جواب دهید.
۲. خیلی زود تسلیم میشویم
بیشتر افراد به همان دلیلی برنامهنویسی یاد نمیگیرند که بلد نیستند گیتار بزنند و آن دلیل این است که خیلی زود تسلیم میشوند. در چند هفتهی اول سخت تمرین میکنند، اما خیلی زود انگیزهشان را از دست میدهند و قبل از اینکه به نتیجه برسند، تسلیم میشوند. برنامههایی که با دورههای زمانی کوتاه و شدید آغاز شود و سپس با وقفههای طولانی همراه باشد، مشکلآفرین است. ذهن شما برای جذب آموختههای جدید به زمان نیاز دارد، بنابراین نمیتوان مهارتهای یادگیری را محدود به تعطیلات آخر هفته کرد. با پذیرش این واقعیت و استفاده از رویکرد یادگیری پیوسته و روزمره، احتمال خستگی کمتر و احتمال موفقیت بیشتر خواهد بود.
قانون دوم یادگیری برنامهنویسی به روش جانکی: باید هر روز حتی تعطیلات آخر هفته از Anki استفاده کنید و به آن متعهد باقی بمانید. مرور کارتهای Anki باید مثل مسواک زدن دندانهایتان عادی باشد و اگر حتی یک روز مطالعهی آنها را از دست بدهید، باید احساس گناه کنید.
این قانون آنقدرها هم که در ابتدا به نظر میرسد، سخت نیست. پس از چند ماه تمرین، مرور کارتها تنها 5-8 دقیقه طول میکشد. خالی کردن زمان برای انجام آن نمیتواند خیلی سخت باشد زیرا Anki روی تلفنهای هوشمند قابلنصب است و میتوانید هنگام پیادهروی به سمت محل کار، در اتوبوس یا در وقتهای خالیِ کوتاهی که در محل کار دارید، آنها را مرور کنید.
۳. مطالب را به کار نمیگیریم
یادگیری خارج از کاربرد اتلاف وقت است. خواندن پشت سر هم کتابهای مرجع میتواند جالب باشد، اما اگر آن مفاهیم را با مشکلات فنی که با آنها مواجه هستیم مرتبط نکنیم، پسزمینهی ذهنی لازم برای جذب مؤثر آن دانش را نخواهیم داشت.
قانون سوم یادگیری برنامهنویسی به روش جانکی: مطالب را در کاربرد یاد بگیرید. یک پروژه را انتخاب کنید و در مسیر انجام پروژه، موارد لازم برای انجام آن را یاد بگیرید.
۴. فکر میکنیم بدون انجام دادن میتوانیم یاد بگیریم
وقتی برای یادگیری موضوعی یک کتاب برنامهنویسی را مطالعه میکنید، بسیاری از نکات بیاهمیت به نظر میرسند. اما این نکات که از آنها سرسری میگذریم، میتوانند در عمل نقشی حیاتی داشته باشند. تنها با امتحان کردن کدها است که متوجه ظرافتهای آن قوانین میشوید و واقعاً آن زبان، تکنیک و دستورات موردنظر را میآموزید. وقتی بدون آنکه برنامهنویسی کنید، صرفاً دربارهی تکنولوژیها میخوانید، تصویری ذهنی ایجاد میکنید که ناقص است، فهم ضعیفی دارد و بهسختی میتوان آن را عملی کرد.
قانون چهارم یادگیری برنامهنویسی به روش جانکی: تنها زمانی اجازه دارید یک کارت را به مجموعهکارتهای خود اضافه کنید که یک بار آن را پیادهسازی کرده باشید.
فرض کنید دارید روی برنامهای کار میکنید که با پایگاه دادهی SQL پشتیبانی میشود. برای ایجاد آن باید به مقالات طراحی پایگاه داده و SQL مراجعه کنید. هنگامی که دارید روی برنامه کار میکنید با مفاهیم جدیدی مواجه میشوید. قبل از افزودن اطلاعات جدید به Anki، آنها را امتحان کنید. بهعنوان مثال، اگر درمورد روش حذف یک ردیف از جدول پایگاه داده مطالعه کردهاید، قبل از ایجاد کارت Anki، یک ردیف واقعی از پایگاه دادهی خود را حذف کنید.
۵. بیش از اندازه اشتباه میکنیم
اشتباهات گذشته بیشترین خدمت را در به حافظهی ما میکنند. به همین دلیل است که با انجامدادن کارها بهتر یاد میگیریم. اما از آنجایی که اشتباهات پرهزینه هستند، منطقی است که وقوع آنها را به حداقل برسانیم. سعی کنید هر بار که مرتکب اشتباه شدید، درمورد آن فکر کرده و از آن درس بگیرید. با این کار هر اشتباه تبدیل به یک تجربهی یادگیری میشود.
قانون پنجم یادگیری برنامهنویسی به روش جانکی: هر بار که مرتکب اشتباه شدید، درمورد آن فکر کرده و سعی کنید از آن درس بگیرید. به این فکر کنید که برای جلوگیری از تکرار آن اشتباه باید چه کار کنید و نتایج را وارد مجموعهکارتهای خود کنید.
با اعمال این قانون، کارتهای جانکی را جایگزین اشتباهات دنیای واقعی میکنید و بهجای آنکه قرار باشد از تکرار اشتباهات درس بگیرید، از کارتهای Anki خواهید آموخت. با وارد کردن شکستهای خود به کارتها فقط از تکرار آنها جلوگیری نمیکنید، بلکه با کالبدشکافی و بررسی علل اصلی خطاها، حوزهی خود را نیز بهتر درک میکنید.
۶. دربارهی تصویر کلی تأمل نمیکنیم
با پیروی از پنج قانون اول جانکی، بهسرعت در جزئیات اولیهی برنامهنویسی یعنی توابع و دستورات، ورودیها و خروجیهای موردانتظار این توابع، راهحلهای رایج دیباگ و روشهای سازماندهی کد مهارت پیدا خواهید کرد. اما با افزایش تجربه، با سؤالات بزرگتری مانند تصمیمات ساختاری درمورد برنامه، چگونگی به حداقل رساندن پیچیدگی و همچنین توازن بین عملکرد و ظرافت مواجه خواهید شد. پاسخ به این سؤالات مستلزم دانش عمیق و تجربهی قابلتوجهی است و به همین دلیل هرگز نباید فرصتی را برای افزایش دانش خود در این موضوعات از دست بدهید.
قانون ششم یادگیری برنامهنویسی به روش جانکی: در پایان هر پروژه از خود بپرسید که چه درسهایی آموختید و اگر بخواهید با دید امروزتان پروژه را تکرار کنید، کجای آن را تغییر خواهید داد.
پس از انجام هر پروژه، زمانی را صرف تأمل دربارهی آن کنید. از خود بپرسید:
- آیا وقتم را برای مورد خاصی تلف کردم؟ چگونه میتوانم در آینده چنین مواردی را پیشبینی کرده و مانع از تکرارشان شوم؟
- آیا فناوریهای مناسبی را انتخاب کردم؟ آیا میتوانم طرحی ترسیم کنم تا بتوانم دفعهی بعد انتخاب درستی داشته باشم؟
- آیا زمان موردنیاز را دقیقاً برآورد کردم؟
- آیا میتوانستم معماری سادهتری ایجاد کنم؟
- آیا میتوانم فهرستی ایجاد کنم که توسعهی ویژگیها را در آینده برایم تسهیل کند؟
پاسخ به برخی از این سؤالات دشوار خواهد بود چون باید گزینههای جایگزین را در ذهنتان بررسی کنید و به مزایا و معایب هریک فکر کنید. اما ارزشش را دارد زیرا تصمیمات معقول معماری مانع از اتلاف وقت و انرژی شما میشود.
۷. دانشمان را بهطور آشفته گسترش میدهیم
ممکن است یکی از زبانهای برنامهنویسی، در ویرایش جدید تغییر زیادی کرده باشد و اکنون بخشی از کارتهای شما نامعتبر شده باشد. شاید بعضی از کارتها دیگر آنقدر مفید نباشند که ارزش مرور دورهای داشته باشند. به علاوه در مسیر یادگیری، به مرور راههای سادهتری کشف خواهید کرد. بنابراین باید کارتهای خود را طوری بهروزرسانی کنید که این درک جدید بهبودیافته را منعکس کنند.
قانون هفتم یادگیری برنامهنویسی به روش جانکی: همهی کارتهای نادرست، قدیمی، ناقص، غیرضروری یا آنهایی را که به خاطر سپردنشان سخت است، حذف یا اصلاح کرده و وقتی به درک بهتری از آن مفهوم رسیدید، کارتهای موجود را بهروزرسانی کنید.
در تصاویر زیر کارتی که در ابتدا با درک ضعیفی نوشته شده بود، کمی بعد با استفاده از درکی عمیقتر بهروزرسانی شده است.
۸. از منابع اصلی یادگیری استفاده نمیکنیم
طراحان گرافیک، هنرمندان، معماران و دیگر افراد خلاق آلبومهایی از طرحهای محبوبشان جمعآوری میکنند تا بعداً وقتی روی یک پروژه کار میکنند بتوانند از آنها الهام بگیرند. منبع اصلی الهام یک برنامهنویس نیز کدهای دیگران است.
پروژههای منبعباز را دانلود کرده و آنها را مرور کنید. دربارهی قسمتهایی که نمیفهمید، جستوجو کنید و در صورت لزوم، کارتهای جدید ایجاد کنید. یک قلم و کاغذ بردارید و مسیرهای برنامه را ترسیم کنید. ورودیهای برنامه چه هستند و خروجیهای موردانتظار چهچیزهایی هستند؟ چرا به این شکل طراحی شدهاند؟ از چه روشهایی استفاده شده است؟ با خواندن کدها میتوانید با سبکهای مختلف برنامهنویسی و راهحلهای مختلف آشنا شوید. از بعضی چیزها خوشتان میآید و از خیلی چیزها نه و درنهایت به مرور زمان سبک خودتان را پیدا میکنید.
قانون هشتم یادگیری برنامهنویسی به روش جانکی: بهطور منظم کد بخوانید. اگر به چیز جالبی برخورد کردید که میتواند یک الگوریتم، یک ترفند یا یک تصمیم معماری باشد، یک کارت ایجاد کنید و در آن جزئیات آن روش را بیاورید.
مزایای جانکی فراتر از بهبود حافظه
شاید اصلیترین مزیت استفاده از Anki برای یادگیری برنامهنویسی بهبود حافظه باشد. اما استفاده از Anki در یادگیری برنامهنویسی مزایای دیگری هم دارد؛ مزایایی که در طولانیمدت بهرهوری شما را بهعنوان یک برنامهنویس بهبود خواهد داد.
۱. برنامهنویس سریعتری خواهید شد
دانستن هزاران دستور برنامهنویسی باعث صرفهجویی در زمان میشود چون دیگر لازم نیست هربار در گوگل دستورها را جستوجو کنید. تکنیک جانکی به شما کمک میکند تا هنگام مواجهه با یک مسئله، فوراً راهحلهای مختلف و گزینههای دردسترس را به یاد آورید و بدین ترتیب شانس خود را برای یافتن راهحلهای سریعتر افزایش دهید. ممکن است بگویید با دانشی که از راه تجربه به دست میآید نیز میتوان سرعت خود را به همین اندازه افزایش داد. درست است، اما تکنیک جانکی قرار است به شما کمک کند سریعتر به دانش و مهارت موردنظرتان برسید.
۲. یک آرشیو قابل جستجو از اطلاعات برنامهنویسی خواهید داشت
Anki امکان جستجو در میان تمام کارتهای موجود را فراهم میکند. شما همچنین میتوانید کارتها را بر اساس تاریخ یا برچسب جستوجو کنید. برای مثال میتوانید کارتهای حاوی کلمهی «ssh» که بیش از 6 ماه پیش ایجاد شده و دارای برچسب «پیادهسازی» هستند را جستوجو کنید.
همیشه باید پس از حل یک مشکل، تعدادی کارت که شامل اطلاعات لازم برای جلوگیری از تکرار آن اشتباه در آینده هستند را به مجموعهکارتهای خود اضافه کنید. با این کار اگر مجدداً با آن اشکال مواجه شوید، فقط کافی است آرشیو خود را جستوجو کنید.
۳. نیازی نیست چرخ را از اول اختراع کنید
زبانهای برنامهنویسی مدرن الگوریتمهای ازپیشنوشتهشدهی بسیاری دارند که بهراحتی در قالب بخشی از یک کتابخانهی مرکزی در دسترس هستند. اگر ندانید که الگوریتم مرتبسازی در داخل آن زبان تعبیه شده است، ممکن است خودتان بخواهید آن را بنویسید. با این کار کدهایی که مینویسید، برای کاربرانی که در آینده آنها را میخوانند ناآشنا خواهد بود. زیرا ممکن است فکر کنند به دلیلی غیر از ناآگاهی، به جای استفاده از الگوریتمهای کتابخانه، خودتان یک الگوریتم مرتبسازی جدید نوشتهاید. با پر کردن مجموعهکارتهای خود با الگوریتمهای ازپیشنوشتهشده، از نوشتن دوبارهی آنها به روشی گیجکننده جلوگیری خواهید کرد.
توصیههای کلی در یادگیری برنامه نویسی به روش جانکی
۱. Anki یک پایگاه داده برای جستوجوی مجموعهکارتهایی که دیگران به اشتراک گذاشتهاند در اختیار شما قرار میدهد. اگرچه مجموعه کارتهای زیادی در حوزهی علوم کامپیوتر وجود ندارد اما ممکن است بتوانید برخی از آنها را پیدا کرده و از آنها بهعنوان مجموعهی اولیهی خود استفاده کنید. با این حال این کار را بهدقت انجام دهید زیرا ممکن است مواردی را به مجموعهکارتهای خود اضافه کنید که هیچ فایدهای برایتان ندارند. باید به نویسندهی کارتها اعتماد داشته باشید، قرار نیست دانش قدیمی یا غلطی را یاد بگیرید.
در حالت ایدئال، شما باید از همان ابتدا، خودتان مجموعهکارتهایتان را با استفاده از تجربیات برنامهنویسی خود بسازید. به این ترتیب کارتهای خود را با دانشی پر میکنید که درک درستی از آن دارید و با منطق جملهبندی و دستهبندی آنها نیز آشنایی دارید. اما اگر میخواهید از کارتهای دیگران استفاده کنید، مطمئن شوید که درک درستی از آنها دارید و اگر کدی را برای اولین بار دیدید، حتماً آن را امتحان کنید.
۲. فناوری بهسرعت در حال رشد است و کتابخانههای امروز، فردا قدیمی میشوند. همچنین باید بین دانشی که ارزش حفظ طولانیمدت دارد با دانشی که در کوتاهمدت نیاز است، تمایز قائل شد. بنابراین فقط در صورتی کارتی را به مجموعهکارتهای خود اضافه کنید که این ویژگیها را داشته باشد:
- کارت حاوی اطلاعاتی دربارهی منطق کلی علوم رایانه باشد.
- کارت شامل اطلاعاتی دربارهی یک فناوری بزرگ باشد که مدت زیادی است وجود دارد و احتمالاً ماندگار است.
- کارت شامل اطلاعاتی باشد که اگرچه بخشی از یک کتابخانه است و احتمال دارد تغییر کند اما چیزی است که هرروز از آن استفاده میکنید و انتظار دارید که تا مدتی برایتان کاربرد داشته باشد.
منبع: