یادگیری نحوه برنامهنویسی سخت است. من اخیرا متوجه شدهام که دانشگاهها و آموزشگاهها مسائل مهم در مورد برنامهنویسی را نادیده میگیرند و دارای عملکرد ضعیفی در رابطه با تدریس به مبتدیان میباشند.
من میخواهم پنج رکن اصلی را به اشتراک بگذارم، که به اعتقاد من یک دوره برنامهنویسی موفق باید بر روی این اصول ساخته شود.
اهداف تازهکاران تسلط بر اصول برنامهنویسی و درک اهمیت کتابخانهها و فریمورکها است.
موضوعات پیشرفته مثل ابر (cloud)، عملیات عمومی یا ابزارهای ساخت نباید بخشی از برنامه درسی باشند. وقتی پای الگوهای طراحی به میان میآید نیز من دچار تردید میشوم. آنها تجربیاتی را فرض میکنند که مبتدیان هرگز ندارند.
پس بیایید نگاهی بیندازیم به مباحثی که برنامهنویسان جدید باید از آنجا شروع کنند.
توسعه تست محور ((Test-Driven Development (TDD)
TDD مزایای زیادی را به ارمغان میآورد. متاسفانه، این مساله موضوع پیشرفتهای است که مبتدیان به اندازه کافی برای آن آمادگی ندارند.
مبتدیان نباید تستها را بنویسند. این امر برای سطوح ابتدایی مهارتهای شما بسیار زیاد است. در عوض آنها باید یاد بگیرند چطور از تستها استفاده کرده و با آنها کار کنند.
هر دوره برنامهنویسی باید با تمرینات همراه باشد. بهتر است تمرینات را با تستهای واحد (unit test) گسترش دهیم و به دانشجویان محیطی را ارائه دهیم که پیش از این برای اجرای این تستها تنظیم کردهایم.
تمام دانشجویان باید کد خود را بنویسند و سپس چراغهای اجراکننده تست را که از قرمز به سبز تبدیل میشود را ببینند.
مثلا اگر تکنولوژی انتخابشده spring است. تمرینات و تستها را در پروژه spring ارائه دهیم. نیازی نیست دانشجویان چیزی در مورد spring بدانند. همه آنها باید محل تمرینات و دکمه اجرای تستها را بدانند.
علاوهبراین دانشجویان باید بدانند چطور از دیباگر استفاده کنند. توانایی تحلیل کد در زمان اجرا و داشتن مکانی برای کسب تجربههای کوچک در TDD ضروری است.
نکته اصلی این است که دانشجویان بعد از اینکه مهارتهای اصلی برنامهنویسی را یاد گرفتند نباید تازه شروع به یادگیری رفتارهای اولیه TDD کنند. تغییر عادتهای دانشجویان بعد از اینکه در شغل خود قرار گرفتند خیلی سختتر از یادگیری این عادتها در شروع کار است. به همین دلیل آنان باید از همان ابتدا با تست واحدها زندگی کنند.
بعدها در زندگی حرفهایشان، آنها باید از پروژههای بدون تست دوری کنند. آنها باید تست واحد را جزئی از برنامه خود بدانند.
اصول اولیه
من اغلب میشنوم که تازهکاران باید بالافاصله با فریمورک شروع کنند. این کار همانند آموزش رانندگی است در حالی که آنها را در ماشین رالی قرار دادهاید و میخواهید که خوب رانندگی کنند. به سادگی این حقیقت نادیده گرفته میشود که آنان هنوز در ترمز گرفتن دچار مشکل هستند.
همانطور که ما آموزش دانشجویان را با فریمورکی مثل انگولار شروع میکنیم. مبتدیان ابتدا باید اصول اولیه برنامهنویسی را درک کنند. آنها باید با عناصر اساسی آشنا شوند.
مفهوم تابع، متغیر، شرط و حلقه برای تازهکاران کاملا ناآشنا است. این چهار عنصر اصول برنامهنویسی را تشکیل میدهند. همه چیز برنامه پیرامون این موارد ساخته میشود.
دانشجویان ممکن است بارها این مفاهیم را شنیده باشند، اما ماهر شدن دانشجویان در آنهاآنآن از اهمیت بالایی برخوردار است. اگر آنان در اصول اولیه مهارت کسب نکنند، همه چیز جادویی به نظر میرسد و منجر به سردرگمی آنان میشود.
مدرسان باید وقت بیشتری را برای آموزش این اصول صرف کنند. اما متاسفانه بسیاری از آنها به سرعت از روی این مباحث میگذرند. مشکل این است که برخی از مدرسان خود را جای دانشجویان نمیگذارند و مشکلاتی که یک مبتدی ممکن است با آن روبهرو شود را فراموش میکنند. این کاملا شبیه راننده حرفهای است. او نمیتواند تصور کند که قبل از ترمز کسی بخواهد فکر کند. او این کار را به طور خودکار انجام میدهد. مدرس باید تمرینات را طوری طراحی کند که دانشجو را با چهار عنصر اصلی به چالش بکشد.
مبانی و اصول اولیه بسیار مهم هستند. کار خود را ادامه ندهید تا زمانی که آنها را به خوبی درک نکردهاید.
کتابخانهها و فریمورکها
بعد از آنکه دانشجویان زمان زیادی را صرف کدنویسی کردند، باید یاد بگیرند که اکثر کدها پیش از این در قالب کتابخانه یا فریمورک وجود داشتهاند. این امر چیزی بیش از ذهنیتی نسبت به یک الگو است.
توسعهدهندگان مدرن کتابخانهها را میشناسند و مناسبترین آنها را انتخاب میکنند. آنها ساعتها را صرف نوشتن چیزی که وجود دارد نمیکنند.
برای آنکه این ذهنیت به موفقیت تبدیل شود، نمونههایی از "مراحل اصولی" باید با استفاده از کتابخانههای شناختهشده مثل Moment.js، Jackson، Lodash یا Apache Commons قابل حل باشند. به این ترتیب، دانشجویان بالافاصله ارزش کتابخانهها را درک میکنند.
وقتی فریمورکها میآیند، دانشجویان پس از درک مفید بودن کتابخانهها هیچ مشکلی در درک اهمیت آنها ندارند.
بسته به مدت زمان دوره، ممکن است سخت باشد تا زمان را به فریمورکها اختصاص دهیم. اما همانطور که قبلا اشاره کردیم مهمترین جنبه این است که ذهنیت دانشجو از نوشتن برنامه برای هر چیزی از ابتدا دور شود تا کتابخانهها را پیدا کرده و از آنها استفاده کند.
من ابزار را به این ارکان اضافه نکردم، زیرا آنها فقط برای توسعهدهندگان باتجربه مورد استفاده قرار میگیرند. در مرحله اولیه، دانشجویان نیازی به نحوه اقدام و پیکربندی ابزار ندارند.
استاد و شاگرد
اگر کسی در برنامهنویسی هیچ تجربهای ندارد، خودآموزی میتواند ایده بدی باشد. اگرچه داستانهای موفق بسیاری در این رابطه وجود دارد، من در بازدهی انجام این کار تردید دارم.
در عوض، یک ارتباط "استاد و شاگرد" باید وجود داشته باشد. ابتدا استاد قوانینی را ارائه میدهد که شاگرد باید کورکورانه پیروی کند. استاد ممکن است قوانین را توضیح دهد، اما معمولا استدلال فراتر از درک شاگرد است.
تدریس نباید برای همه به یک صورت باشد. استاد باید با هر دانشجو به صورت جداگانه برخورد کند. او باید بررسی کند که با هر دانشجو چگونه کار کند، راهنمایی کند و سرعت دوره را با پیشرفت آنها تطبیق دهد.
هنگامی که شاگردان به سطح مشخصی از تسلط برسند، باید آنها را تشویق به کشف قلمرو جدید کرد. استاد به یک مربی تبدیل میشود تا "خرد و دانش" خود را به اشتراک بگذارد و برای بحث و گفتگو آماده باشد.
چالش و انگیزه
"بیایید یک فیسبوک بسازیم". این یک پروژه اجرایی نیست که از طرف مدیر ارشد نرمافزاری و با بودجهای چند میلیونی پشتیبانی میشود. این یک تمرین دوره مقدماتی برای برنامهنویسان است. چنین وظیفهای تقریبا غیرممکن است. حتی بدتر از آن، دانشجویان در سرزمین عجایب قرار میگیرند و نسبت به عقایدشان اغفال میشوند که آنها مهارتهایی دارند که به راستی فراتر از آنچه است که به دست آوردهاند.
بدون شک استاد از این مسائل آگاه است، اما این گونه تمارین را به دلایل انگیزشی میدهد.
هدف اصلی تمرین سرگرمی نیست. این امر باید پیرامون تکنیک خاصی ایجاد شود و باید دانشجویان این تکنیک را درک کنند.
انگیزه خوب است اما نه به قیمت قربانی کردن محتوا. برنامهنویسی آسان نیست. اگر دانشجویان انگیزه ذاتی نداشته باشند، ممکن است نتوانند در مسیر کدنویسی قرار بگیرند.
تازهکاران باید آنچه را توسعهدهنده حرفهای تجربه میکند را تجربه کنند. آنها باید قبل از اینکه ساعتهای زیادی را سرمایهگذاری کنند بدانند که چه چیزی در انتظار آنهاست.
مثلا بسیاری از برنامههای تجاری پیرامون فرمها و گریدهای پیچیده قرار گرفتهاند. ایجاد این موارد یک مهارت مهم است که تمارین میتوانند به شما تحمیل کنند. ساخت یک برنامه شبیه فیسبوک شاید بهترین درس برای تازهکاران نباشد.
دانشجویان باید از این نوع تجربیات لذت ببرند. خورشید همیشه در زندگی واقعی درخشان نیست. مبتدیان باید برای حقیقت برنامهنویسی از قبل آماده شده باشند.
توصیه نهایی
کسی نمیتواند در عرض دو هفته، دو ماه یا حتی یک سال تبدیل به یک برنامهنویس حرفهای شود. این کار زمان و حوصله میخواهد.
مدرسان نباید در این کار عجله کنند یا وعدههای دروغین بدهند. آنها باید بر این نکته تمرکز کنند که آیا دانشجویان مفاهیم را درک میکنند و بیش از حد سریع حرکت نکنند.
نظرات کاربران در رابطه با این دوره