ستون‌های اصلی یادگیری برنامه‌نویسی

گردآوری و تالیف : ارسطو عباسی
تاریخ انتشار : 18 اردیبهشت 1398
دسته بندی ها : برنامه نویسی

بیشتر از ۲۰ سال است که در حوزه برنامه‌نویسی کار می‌کنم و باید بگویم که خیلی خوشحالم، از این بابت که با افراد بسیار زیادی آشنا شده‌ام و چیزهای بسیار زیادی را از آن‌ها یاد گرفته‌ام. برای مدتی نیز در این ۲۰ سال مشغول آموزش دادن در دانشگاه‌ها و آموزشکده‌ها بوده‌ام، از این جهت می‌توانم بگویم که با دانش‌آموزان بسیاری نیز سر و کار داشته‌ام.

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

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

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

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

خب بیایید این پنج اصل را شروع کنیم.

توسعه تست محور یا Test-Driven Development به اختصار TDD

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

هر دوره برنامه‌نویسی که شما مشاهده می‌کنید، باید یکسری تمرینات را در خود داشته باشد. تمرین‌هایی که اغلب من برای دانشجویان طراحی می‌کنم، در بخشی از آن‌ها در یک سطح مقدماتی از تست واحد نام می‌برم. البته این تست‌ها وجود دارد و دانشجو باید آن‌ها را اجرا و خروجی را تحلیل بکند.

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

در اوایل کدهای مختلفی را به دانشجویان می‌دهم و به آن‌ها می‌گویم که این کدها را تست نمایند. برای مثال من یک پروژه در فریمورک Spring ساخته‌ام، حال اصلا مهم نیست که دانشجویان با Spring آشنایی دارند یا خیر، مهم آن است که تست‌ها را روی پروژه اجرا کرده و خروجی را مشاهده نمایند. 

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

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

نکات پایه‌ای برنامه‌نویسی

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

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

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

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

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

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

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

پایه‌های برنامه‌نویسی مهم هستند، تا زمانی که به صورت کامل آن‌ها را یاد نگرفته‌اید از آن‌ها نگذرید.

کتابخانه‌ها و فریمورک‌ها

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

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

برای آنکه دانش‌آموزان را وارد این فاز جدید بکنید، سعی نمایید که مثال‌های قبلی را با استفاده از یک سری فریمورک و کتابخانه نام آشنا و مناسب حل کنید. برای مثال کتابخانه‌هایی مانند Moment.js، Jackson، Lodash و یا Apache Commons می‌توانند انتخاب‌های خوبی باشند.

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

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

مربی و دانشجو

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

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

در ارتباط با برنامه‌نویسی نیز چنین موضوعی وجود دارد. اگر کسی هیچگونه تجربه‌ای در ارتباط با برنامه‌نویسی ندارد باید بگویم که مطالعه و یادگیری به صورت تنها کار اشتباهی است. البته باید در نظر گرفت که افرادی نیز هستند که چنین کاری کرده‌اند و موفق نیز شده‌اند.

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

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

چالش‌ها و انگیزه‌ها

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

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

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

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

سخن پایانی

هیچ فردی نمی‌تواند در یک دو هفته/ماه و حتی یک سال به یک برنامه‌نویس حرفه‌ای تبدیل شود. این کار زمان و صبر کافی را می‌خواهد.

از طرفی دیگر مربی‌ها نیز نباید سریع عمل کنند و قول‌های اشتباهی را به مبتدیان بدهند. قدم ابتدایی یک مربی آن است که بداند یک دانش‌آموز چقدر ظرفیت برای درک یک موضوع را دارد و بسته به آن دوره را پیش ببرد.

منبع

مقالات پیشنهادی

۵ قاعده طلایی برای یادگیری هر زبان برنامه‌نویسی که می‌خواهید

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

10 نمونه از یادگیری ماشین در جاوااسکریپت

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

10 قدم برای خودآموزی برنامه‌نویسی

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

مقدمه‌ای بر برنامه‌نویسی تابعی در پایتون

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