https://salehrezaei.com
ارکان اصلی یادگیری برنامه نویسی – و چرا مبتدیان باید بر آنها تسلط داشته باشند
من بیش از 20 سال است که برنامه نویسی می کنم. در این مدت ، من لذت کار با بسیاری از افراد را داشته ام و چیزهای زیادی از آنها آموخته ام. من همچنین با دانشجویان زیادی کار کرده ام که تازه از دانشگاه آمده اند و باید نقش معلم یا مربی آنها را داشته باشم.
اخیراً ، من به عنوان مربی در برنامه ای شرکت کرده ام که کدنویسی را برای مبتدیان آموزش می دهد.
یادگیری نحوه برنامه نویسی سخت است. من اغلب متوجه می شوم که دوره های دانشگاهی و بوت کمپ جنبه های مهم برنامه نویسی را در نظر نمی گیرند و رویکردهای ضعیفی برای آموزش تازه کارها دارند.
من می خواهم پنج ستون اساسی را به اشتراک بگذارم که معتقدم یک دوره برنامه نویسی موفق باید بر پایه آن بنا شود. مثل همیشه ، من به زمینه برنامه های اصلی وب می پردازم.
هدف یک تازه کار تسلط بر اصول برنامه نویسی و درک اهمیت کتابخانه ها و چارچوب ها است.
مباحث پیشرفته مانند ابر(Cloud) ، عملیات به طور کلی یا ابزار ساخت نباید بخشی از برنامه درسی باشد. من در مورد Design Pattern ها نیز تردید دارم. آنها تجربه ای را تصور می کنند که افراد مبتدی هرگز تجربه نمی کنند.
بنابراین بیایید بررسی کنیم که برنامه نویسان جدید از کجا باید شروع کنند.
توسعه آزمون محور TDD (Test Driven Development)
TDD مزایای زیادی به همراه دارد . متأسفانه ، این یک موضوعی پیشرفته است که مبتدیان برای آن کاملاً آماده نیستند.
مبتدیان نباید آزمون بنویسند. این برای سطح مهارتهای اساسی آنها بسیار زیاد است. در عوض ، آنها باید یاد بگیرند که چگونه از آزمون ها استفاده کنند و با آنها کار کنند.
هر دوره برنامه نویسی باید حول تمرینات باشد. من تمریناتم را با آزمونهای واحدی گسترش می دهم و محیطی را برای دانش آموزان فراهم می کنم که از قبل برای اجرای آن تست ها آماده شده است.
تنها کاری که دانش آموزان باید انجام دهند این است که کد خود را بنویسند و سپس ببینند چراغ تستر از قرمز به سبز تبدیل می شود. گیمیفیکیشن حاوی یک اثر جانبی خوب است.
به عنوان مثال: اگر فناوری انتخاب شده Spring باشد ، من تمرینات و تست های یک پروژه Spring را ارائه می دهم. دانش آموزان نیازی به دانستن چیزی در مورد Sprint ندارند. تنها چیزی که باید بدانند محل تمرینات و دکمه شروع تست ها است.
علاوه بر این ، دانش آموزان باید نحوه استفاده از دیباگر را بدانند. توانایی تجزیه و تحلیل کد در زمان اجرا و داشتن زمین بازی برای آزمایشات کوچک در TDD ضروری است.
نکته اصلی این است که اطمینان حاصل کنید دانش آموزان پس از کسب مهارتهای اصلی برنامه نویسی ، نیازی به یادگیری رفتارهای اساسی TDD ندارند. تغییر عادت بعداً در دانش آموزان بسیار دشوارتر از یادگیری این عادت ها در حال حاضر است. به همین دلیل آنها باید با تست زندگی کنند و نفس بکشند.
بعداً در زندگی حرفه ای خود ، آنها باید برای پروژه های بدون آزمایش واحد ضد درد داشته باشند. آنها باید بصورت شهودی فقدان آزمونهای واحد را یک ضد الگو ببینند.
اصول اولیه
من اغلب می شنوم که تازه کارها باید بلافاصله با یک چارچوب (Framework) شروع کنند. این مانند این است که با قرار دادن آنها در اتومبیل رالی ، نحوه رانندگی را آموزش دهید و از آنها بخواهید از زیاده روی نکنند. این به سادگی این واقعیت را نادیده می گیرد که آنها هنوز هم ترمز را با گاز اشتباه می گیرند.
وقتی دانش آموزان کار را با چارچوبی مانند Angular شروع می کنیم ، همین مورد وجود دارد. مبتدیان باید ابتدا اصول برنامه نویسی را درک کنند. آنها باید با عناصر اساسی و معنای نوشتن کد قبل از اینکه از آنها استفاده کنند ، آشنا باشند.
مفهوم یک تابع ، یک متغیر ، یک شرط و یک حلقه برای تازه کارها کاملاً بیگانه است. این چهار عنصر پایه های برنامه نویسی را ایجاد می کنند. هر چیزی که یک برنامه از آن ساخته شده به آنها متکی است.
دانش آموزان برای اولین بار این مفاهیم را می شنوند ، اما مهارت در دانش آموزان برای آنها بسیار مهم است. اگر دانش آموزان به اصول مسلط نشوند ، هر آنچه که در ادامه می آید به نظر جادویی می آید و منجر به سردرگمی و سرخوردگی می شود.
معلمان باید وقت بیشتری را برای این اصول صرف کنند. اما متاسفانه بسیاری از افراد خیلی زود حرکت می کنند. مشکل این است که برخی از معلمان تلاش می کنند تا خود را در نقش یک دانش آموز قرار دهند. آنها مدتهاست که برنامه نویسی می کنند و فراموش کرده اند که یک مبتدی با چه نوع مشکلاتی روبرو است. کاملاً شبیه راننده رالی حرفه ای است. او نمی تواند تصور کند که کسی باید قبل از ترمز فکر کند. او فقط این کار را به صورت خودکار انجام می دهد.
من تمریناتم را طوری طراحی می کنم که با استفاده از ترکیبی از چهار عنصر اصلی ، چالش برانگیز اما قابل حل در مدت زمان معقولی باشند.
یک مثال خوب مبدل اعداد رومی و عربی است. این چالش نیاز به صبر و شکیبایی دانشجویان دارد. هنگامی که آنها با موفقیت چهار عنصر را برای حل چالش به کار گرفتند ، انگیزه زیادی نیز کسب می کنند.
اصول مهم است. تا زمان حل و فصل آنها پیش نروید.
کتابخانه ها و چارچوب ها
دانش آموزان پس از اینکه زمان زیادی را برای کدنویسی صرف کردند ، باید یاد بگیرند که بیشتر کدها از قبل به صورت کتابخانه یا چارچوب وجود دارد. این بیشتر یک ذهنیت است تا یک الگو.
توسعه دهندگان مدرن کتابخانه های درست را می شناسند و انتخاب می کنند. آنها ساعتها وقت خود را صرف نوشتن نسخه باگ دار نمی کنند.
برای موفقیت در این انتقال ذهنی ، باید مثالهای مربوط به “مرحله اصول” را با استفاده از کتابخانه های معروف مانند Moment.js ، Jackson ، Lodash یا Apache Commons حل کرد.
به این ترتیب دانش آموزان بلافاصله ارزش کتابخانه ها را درک می کنند. آنها خود را با آن مشکلات پیچیده درگیر کرده اند. اکنون آنها دریافتند که کتابخانه، مسئله را در کمترین زمان حل می کند.
وقتی نوبت به چارچوب می رسد ، دانش آموزان پس از درک مفید بودن کتابخانه ها ، در درک اهمیت مشکلی نخواهند داشت.
بسته به بازه زمانی دوره ، ممکن است سخت باشد که زمانی را به چارچوب ها اختصاص دهیم. اما همانطور که قبلاً اشاره کردم ، مهمترین جنبه تغییر ذهنیت دانشجو به سمت برنامه ریزی همه چیز از ابتدا به کاوش و استفاده از کتابخانه ها است.
من ابزاری به این ستون اضافه نکردم ، زیرا این ابزارها فقط برای توسعه دهندگان باتجربه کاربرد دارند. در این مرحله اولیه ، دانش آموزان نیازی به یادگیری نحوه ادغام و پیکربندی ابزارها ندارند.
استاد و شاگرد
در اوایل 20 سالگی من می خواستم پیانو نواختن را یاد بگیرم. من معلمی نمی خواستم و فکر می کردم خودم می توانم آن را یاد بگیرم. پنج سال بعد ، من با یک معلم خصوصی حرفه ای مشورت کردم. خوب چه می توانم بگویم؟ من در مدت 1 ماه بیشتر از پنج سال قبل یاد گرفته ام.
معلم پیانوی من به اشتباهاتی در نواختن من اشاره کرد که من نمی توانم آنها را بشنوم و مرا از چیزهای تفسیری که هرگز تصور نمی کردم آگاه کرد. از این گذشته ، او ذهنیت موسیقی و هنر را در من ایجاد کرد که هر دو برای من بعنوان یک فرد فنی دور از دسترس نبود.
در برنامه نویسی هم همین طور است. اگر کسی تجربه ای در برنامه نویسی ندارد ، خودآموزی می تواند ایده بدی باشد. اگرچه داستان های موفقیت زیادی وجود دارد ، اما من کارآیی انجام این کار را به تنهایی زیر سوال می برم.
در عوض ، باید یک رابطه “استاد و شاگرد” وجود داشته باشد. در ابتدا ، استاد قوانینی را می دهد که شاگرد باید دنبال کند – کورکورانه! استاد ممکن است قوانين را توضيح دهد ، اما معمولاً استدلال فراتر از درک دانش آموز است.
این قوانین داخلی یک نوع شبکه ایمنی را تشکیل می دهند. اگر فردی گم شود ، همیشه مقداری فضای امن برای بازگشت وجود دارد.
تدریس نباید مونولوگ باشد. استاد باید با هر دانش آموز جداگانه برخورد کند. وی باید نحوه کار دانش آموزان را بررسی کند ، مشاوره دهد و سرعت دوره را با پیشرفت آنها تطبیق دهد.
هنگامی که کارآموزان به سطح خاصی از تسلط رسیدند ، باید آنها را تشویق کرد تا قلمرو جدیدی را کشف کنند. استاد به مربی تبدیل می شود که دارای “خرد” است و برای بحث آزاد است.
چالش و انگیزه
“بیایید یک کپی فیس بوک ایجاد کنیم!” این از جانب یک مدیرعامل با پشتیبانی انبوهی از توسعه دهندگان ارشد نرم افزار و بودجه چند میلیون یورویی نیست. این یک تمرین از یک دوره مقدماتی برای برنامه نویسی است! چنین اقدامی عملاً غیرممکن است. حتی بدتر از آن ، دانش آموزان در سرزمین عجایب قرار می گیرند و با خیال راحت باور می کنند که مهارت هایی دارند که واقعاً از توان آنها خارج است.
بدون شک معلم از این مسئله آگاه است ، اما به دلایل انگیزشی چنین تمریناتی را ایجاد می کند.
هدف اصلی یک تمرین سرگرمی نیست. این روش باید حول یک تکنیک خاص ایجاد شود و باید به دانش آموزان در درک این روش کمک کند.
انگیزه خوب است ، اما فدای محتوا نیست. برنامه نویسی آسان نیست. اگر دانش آموزان انگیزه ذاتی ندارند ، کدنویسی راهی برای ادامه کار نیست.
تازه کارها باید معنای یک توسعه دهنده حرفه ای بودن را بدانند. آنها قبل از اینکه ساعت ها سرمایه گذاری کنند ، باید بدانند که چه در انتظار آنها است.
به عنوان مثال ، بسیاری از برنامه های تجاری در اطراف فرم ها و شبکه های پیچیده قرار دارند. ایجاد این مهارت مهم است که تمرینات می توانند به شما منتقل کنند. ساختن برنامه ای مشابه فیس بوک ممکن است بهترین درس برای یادگیری سریع دانشجویان نباشد.
به همین ترتیب ، ممکن است یک غیر برنامه نویس از تعداد کمی کد که یک توسعه دهنده در روز می نویسد ، متعجب شود. حتی مواقعی وجود دارد که کد را حذف می کنیم یا به هیچ نتیجه ای نمی رسیم.
چرا؟ چون اوضاع همیشه اشتباه است. ما ساعتهای بی پایان را صرف رفع اشکالات بسیار عجیب و غریب می کنیم که به نظر می رسد یک اشتباه تایپی ساده است. فقط ممکن است برخی از ابزارها به این دلیل کار نکنند که کتابخانه نسخه جدید مقداری آن را ارتقا داده است. یا اینکه سیستم خراب می شود زیرا کسی فراموش کرده است که پرونده ای را به git اضافه کند. این لیست میتواند ادامه پیدا کند.
دانش آموزان باید از این تجربیات لذت ببرند. تمرینی که یک کتابخانه ناشناخته را تحت فشار زمان، هدف قرار می دهد ، ممکن است دقیقاً کار درستی باشد. ؛)
خورشید همیشه در زندگی واقعی در حال درخشش نیست. افراد مبتدی باید برای واقعیت برنامه نویسی کاملاً آماده باشند.
توصیه نهایی
آخرین اما نه کمترین: در دو هفته ، دو ماه یا حتی یک سال نمی توان به یک برنامه نویس حرفه ای تبدیل شد. این زمان و حوصله میبره.
مربیان نباید عجله کنند و یا قول های دروغ بدهند. آنها باید بر این نکته تمرکز کنند که آیا دانش آموزان مفاهیم را می فهمند یا خیلی سریع حرکت نمی کنند.
منبع: freeCodeCamp
مطلبی دیگر از این انتشارات
php Code Refactoring Series - part4
مطلبی دیگر از این انتشارات
چگونه یک وب سایت بسازیم؟ راهنمای ساخت وب سایت
مطلبی دیگر از این انتشارات
۵ راهکار برای زمانبندی مناسب