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