نحوه آموزش برنامه نویسی


برنامه نویسی یک موضوع چالش برانگیز برای آموزش است. تعداد کمی از زمینه‌ها بر لایه‌های انتزاعی زیادی قرار دارند. از بستر ترانزیستورها، 1 و 0های باینری، زبان‌های سطح پایین و پرسرعت مانند C، زبان‌های کامپایل‌شده و تفسیر شده مانند پایتون یا جاوا اسکریپت، و در نهایت، فریم‌ورک‌هایی که در بالای همه چیز قرار دارند. این قبل از اینکه حتی به انتشار چیزی در وب فکر کنید.

نکته: بهترین زبان های برنامه نویسی در سال 2022 یا 1401؟ پردرآمدترین آن کدام هستند؟ یادگیری آن ها چگونه است؟ هر آنچه که باید درباره برنامه نویسی بدانید در وبسایت هادی عظیمی به آن پرداخته شده است. تنها کافی است که بر روی این لینک کلیک کنید.

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

"آموزش برنامه ریزی به کسی" به چه معناست؟

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

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

اگر شبیه سازی را دوست دارید، این ممکن است کمک کند. تصور کنید کودکی را می شناسید که آرزو دارد روزی دوچرخه سوار شود. مشکل اینجاست که آنها حتی نمی توانند در حال حاضر دوچرخه سواری کنند. اولین هدف شما احتمالاً سوار کردن آنها با کمک چرخ های آموزشی خواهد بود. هنگامی که آنها روی دوچرخه راحت شدند، چرخ های تمرین را بردارید و به آرامی به آنها فشار دهید.

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

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

راه اندازی محیط آموزشی

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

دانش‌آموز شما باید تا آنجا که ممکن است با کیبورد رانندگی کند، مگر اینکه به طور ناامیدکننده‌ای گیر کند. بله، این ممکن است به معنای املای پر زحمت دستورات با صدای بلند برای تایپ کردن آنها در ترمینال باشد و این اشکالی ندارد! آنها هنوز هم بیشتر از اینکه شما این کار را برای آنها انجام دهید، بیشتر یاد خواهند گرفت.

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

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

برعکس اهداف دانش آموز کار کنید

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

به هدفشان نزدیکتر باشند این باعث تقویت روحیه دانش آموز شما می شود. من مشاهده کرده‌ام که یکی از دلایل اصلی که دانش‌آموزان از یادگیری برنامه‌نویسی منصرف می‌شوند این است که وقتی نمی‌دانند آنچه که می‌آموزند چگونه به هدف کلی آنها کمک می‌کند، ناامید می‌شوند.

پروژه ای ایجاد کنید که با هدف یادگیرنده مرتبط باشد

بیشتر زبان آموزان اهدافی دارند که بسیار فراتر از سطح مهارت فعلی آنهاست. بهترین راه برای شروع این است که از آنها بخواهید چیزی بسازند که نسخه ای بسیار ساده و کوچک شده از چیزی است که در نهایت دوست دارند بسازند.

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

اگر دانش‌آموز می‌خواهد یک بازی موبایل سه بعدی اصلی بسازد، از او بخواهید با ساخت یک کلون تتریس دو بعدی شروع کند.

اگر دانش‌آموز می‌خواهد یک دانشمند داده شود، از او بخواهید با یک مجموعه داده واحد، مانند این فهرست از مسافران کشتی تایتانیک، کار کند.

زبان آموزان باید تکالیف داشته باشند

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

زبان آموزان باید تکالیف خود را انجام دهند

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

گاهی اوقات زندگی مانع می شود، اما شما می توانید تفاوت بین فردی که بهترین تلاش خود را برای تمرین خارج از کلاس می کند و کسی که از انجام تکالیف خود اجتناب می کند، تشخیص دهید. این را الزامی کنید که برای تدریس، یادگیرنده باید در بیشتر هفته ها کار را خارج از کلاس انجام دهد. در غیر این صورت ممکن است هر دوی شما وقت خود را تلف کنید.

سبک یادگیرنده را دریابید

من مشاهده کرده‌ام که اکثر مردم یکی از سه سبک یادگیری را در برنامه‌نویسی دارند.

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

نحوه شناسایی قیاس پردازان: آنها برای توضیح چیزها تشبیهات خود را ارائه می دهند.

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

نحوه شناسایی Deep Divers: آنها سوالات چالش برانگیز زیادی خواهند پرسید.

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

چگونه آزمایش‌کنندگان را شناسایی کنیم: آن‌ها قبل از اینکه شما حتی توضیح آن را برایشان تمام کنید، شروع به آزمایش با یک مفهوم جدید می‌کنند.

هر بار یک ابزار/زبان/چارچوب جدید را معرفی کنید

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

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

بدون زمینه مناسب، این پروژه های ساده می توانند بسیار دور از اهداف نهایی یادگیرنده به نظر برسند. وقت بگذارید و توضیح دهید که چگونه چیزهایی که یاد می گیرند به پیشرفت آنها کمک می کند.

اهدافی را فقط فراتر از سطح مهارت فعلی یادگیرنده تعیین کنید

اهداف افزایشی می تواند کاری را که برای یادگیرنده غیرممکن به نظر می رسد بسیار کمتر دلهره آور کند. اهداف کوچک و فزاینده ای را تعیین کنید که فراتر از سطح مهارت فعلی زبان آموز است یا نمی توان به آنها دست یافت مگر اینکه مهارت جدیدی را یاد بگیرد.

توسعه آزمایش محور (TDD) به نظر می رسد در اینجا می تواند مفید باشد. با این حال، در حالی که من از طرفداران بزرگ TDD هستم، معتقدم تنها زمانی باید آن را معرفی کرد که دانش آموز با اصول برنامه نویسی راحت شد. برای من، درخواست از یک زبان آموز در مراحل اولیه برای انجام TDD مانند این است که از کسی بخواهیم که چگونه به ژاپنی "Kon'nichiwa" بگوید "Kon'nichiwa" را بخواهم به این زبان غزل بنویسد. شاید بتوان آن را انجام داد، اما نتایج ضعیف خواهد بود.

برای افرادی که به تازگی سفر خود را با برنامه نویسی شروع می کنند، «توسعه مبتنی بر خطا» راهی فوق العاده برای معرفی زبان آموز با برخی از مفاهیم زیربنایی TDD است. Rails با پیام‌های خطای نسبتاً دوستانه و قابل تجزیه آسان، کاندیدای خوبی برای این امر است. بازدید از مسیری که ایجاد نشده است (به عنوان مثال /people) منجر به یک خطا می شود: PeopleController ثابت اولیه. این به دانش‌آموز می‌گوید که در مرحله بعد باید چه کاری انجام دهد: PeopleController را ایجاد کنید. پس از انجام این کار، بازدید از مسیر یک خطای دیگر ایجاد می کند: هیچ اقدامی برای کنترلر وجود ندارد. ایجاد اکشن برای کنترلر مرحله بعدی دانش آموز است. این زنجیره «خطا را ببینید، خطا را برطرف کنید» دانش‌آموز را به سمت اجرای یک ویژگی بسیار شبیه به آهنگ TDD یعنی «تست بنویس، شکست بخور، سپس موفق کن» هدایت می‌کند.

مهمتر از همه، این رویکرد به دانش‌آموزان می‌آموزد که پیام‌های خطا را به‌عنوان راهنماهای مفیدی ببینند که آنها را به مرحله بعدی راهنمایی می‌کند، نه دیوارهای ترسناک متن قرمز بی‌معنی. یک ضدالگوی رایج برای یادگیرندگان با این نگرش که "خطا = بد" این است که بدون خواندن خطا در اسرع وقت از خطا دور شوند. آنها در عوض کد خود را بررسی می کنند و سعی می کنند آنچه را که پیام خطا قبلاً به آنها می گوید مهندسی معکوس کنند. توسعه مبتنی بر خطا می تواند به رفع این مشکل کمک کند.

به آنها بیاموزید که در اسرع وقت راه حل های خود را پیدا کنند

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

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

با دانش آموز خود منعکس کنید

زمان صرف شده در چرخه آموزش و یادگیری باید با زمان صرف شده برای انعکاس فرآیند متعادل شود. این سوالات را مرتباً از زبان آموز بپرسید:

  • آیا چیزی وجود دارد که ما پوشش داده‌ایم که احساس می‌کنید آن‌قدر که نیاز دارید نمی‌فهمید؟
  • آیا چیزی وجود دارد که ما پوشش داده ایم و دلیل مهم یا مفید بودن آن را نمی دانید؟
  • آیا فکر می کنید آنچه که اکنون روی آن کار می کنیم به شما کمک می کند تا به سمت اهداف خود پیشرفت کنید؟
  • آیا چیزی وجود دارد که ما آن را پوشش نداده ایم که بخواهید در مورد آن بیاموزید؟
  • قدم زدن برای شما چگونه است؟ خیلی سریع؟ خیلی آهسته؟ درست است؟

این سوالات به شما این فرصت را می دهد که شکاف های دانشی را که ممکن است زبان آموز را عقب نگه دارد، کشف کنید. به عنوان مثال، اگر آنها از نحوه عملکرد متغیرها گیج و غرق شده باشند، نمی توانند با اطمینان روش ها/توابع را بنویسند. بیشتر اوقات وقتی یادگیرندگان مفهوم خاصی را «دریافت» نمی‌کنند، یا به نظر می‌رسد کندتر از حد انتظار پیش می‌روند، به این دلیل است که شما فرض کرده‌اید که آنها یک مفهوم اساسی را درک کرده‌اند در حالی که درک نکرده‌اند.

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

به آنها یک فشار نهایی بدهید

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

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

در نهایت، فراموش نکنید که خود شما نیز یک مهارت ارزشمند را به دست آورده‌اید: توانایی آموزش، و کمک به رشد و پیشرفت شخص دیگری در جهت رسیدن به اهدافش.