از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
پیشنیازهای اصلی یادگیری برنامهنویسی برای مبتدیان
سرفصلهای مطلب
من 20 سال است که به عنوان یک برنامه نویس فعالیت می کنم، در طول این مدت مفتخر شدهام که با بسیاری از افراد در زمینه های مختلف برنامه نویسی کار کنم که به همین علت چیزهای زیادی را از آنها آموخته ام. علاوه بر این من با بسیاری از دانشجویان نیز کار کرده ام که به تازگی وارد دانشگاه شدهاند و من مجبور بودم که نقش یک مربی و معلم را برای آنها داشته باشم. اخیرا من به عنوان یک مربی در پروژه ای کار می کردم که مجبور بودم تا با افراد بسیار مبتدی در زمینه برنامه نویسی کار کنم.
چگونگی یادگیری اصولی برنامه نویسی
یادگیری برنامه نویسی کار بسیار سختی می باشد، من در بسیاری از مواقع دوره های مختلف و برنامه های آموزشی متفاوتی را دیده ام که در رویکرد آموزشی خود نکات بسیار مهمی را از دست داده اند و به همین دلیل آموزش آنها باعث خستگی می شود. من در این مطلب قصد دارم 5 پایه اساسی را با شما به اشتراک بگذارم که به اعتقاد من یک دوره کامل آموزشی باید شامل این 5 پایه اساسی باشد. توجه داشته باشید که صحبت کلی من دراین مطلب درباره برنامه های تحت وب می باشد.
هدف یک برنامه نویس مبتدی این است که مبانی برنامه نویسی را به خوبی بیاموزد و درک درستی از اهمیت کتابخانه ها و فریم ورک های مختلف بدست آورد. موضوعات پیشرفته مانند فضاهای ابری، عملگرها به صورت کلی یا ساخت ابزارهای مختلف نباید بخشی از برنامه آموزشی برای مبتدیان باشد. زمانی که در این آموزش ها درباره دیزاین پترن ها صحبت می شود من بسیار تعجب می کنم، آنها قصد دارند تجربه ای را آموزش دهند که مبتدیان به هیچ وجه آن را تجربه نکرده اند. بنابراین اجازه دهید نگاهی به آنچه که برنامه نویسان مبتدی باید بیاموزند داشته باشیم.
توسعه تست محور اپلیکیشن ها یا TDD( بخش اول)
TDD مزایای بسیار زیادی را برای شما در یادگیری برنامه نویسی به همراه خواهد داشت، متاسفانه این یک موضوع پیچیده است که معمولا مبتدیان برای یادگیری آن آماده نیستند. مبتدیان نمی توانند برای برنامه خود تست بنویسند چرا که این کار در سطح مبتدی نیاز به مهارت های بسیار زیادی دارد، در عوض آنها باید در این مرحله یاد بگیرند که چگونه از تست ها استفاده کنند و از آنها در جهت پیشبرد برنامه خود استفاده کنند.
هر دوره برنامه نویسی باید بر روی تمرین این موضوع تمرکز کند، من معمولا تمرین های خود را با استفاده از یونیت تست و فراهم کردن محیطی برای دانشجویان برای انجام این تست ها انجام می دهم. تمامی دانشجویان باید کدهای خود را نوشته و بعد از آن اجرا شدن کدشان توسط تست ها را مشاهده کنند، نتیجه این کار می تواند در روند یادگیری آنها بسیار موثر باشد.
به عنوان مثال اگر شما تکنولوژی Spring را برای آموزش انتخاب کرده اید من تمرین ها و تست ها را در قالب یک پروژه Spring فراهم می کنم، دانشجویان نیازی ندارند که چیزی درباره Spring بدانند، تنها چیزی که آنها به آن احتیاج دارند محل دقیق تمرینات و دکمه ای است که برای اجرا به آن نیاز دارند.
توسعه تست محور اپلیکیشن ها یا TDD( بخش دوم)
علاوه بر موارد گفته شده در بخش قبلی دانشجویان باید بدانند که چگونه از دیباگر استفاده کنند و یک حلقه Read-Eval-Print مفید داشته باشند. داشتن توانایی تجزیه و تحلیل کد در زمان اجرا و داشتن توانایی در زمینه آزمون های کوچک بر روی کد در TDD بسیار مفید می باشد.
نکته اصلی و مهم این است که اطمینان حاصل کنید که دانشجویان بعد از یادگیری مفاهیم پایه ای برنامه نویسی به دنبال یادگیری رفتارهای پایه ای TDD نباشند. تغییر عادت در دانشجویان در طول زمان سخت تر از آن است که بخواهید چیزی را به آنها آموزش دهید. به همین علت است که تاکید می کنیم که ابتدا به آنها تست ها را بیاموزید. این کار باعث می شود تا آنها در آینده از پروژه هایی که یونیت تست ندارند دوری کنند، آنها باید نتیجه پروژه های بزرگی که دارای یونیت تست نیستند را ببینند.
آشنایی با مفاهیم پایه ای در ابتدا( بخش اول)
من به صورت ناگهانی در جایی شنیدم که افراد مبتدی بلافاصله باید کار خود را با یک فریم ورک شروع کنند، این دقیقا مانند آموزش رانندگی به مردم با قرار دادن آنها در یک رالی و مسابقه ماشین سواری است که از آنها بخواهید از سبقت گرفتن سایر خودروها جلوگیری کنند و این موضوع که آنها هنوز ترمز و گاز را نمی شناسند را به صورت کامل نادیده می گیرند.
این مثال دقیقا مانند این است که ما به یک دانشجو بگوییم که کار خود برای یادگیری برنامه نویسی را با یک فریم ورک مانند انگولار شرع کند. افراد مبتدی ابتدا نیاز دارند که مفاهیم پایه ای برنامه نویسی را بیاموزند، آنها احتیاج دارند که با عناصر پایه ای آشنا شوند و قبل از آنکه بخواهند شروع به کد زدن کنند با مفهوم کد نوشتن آشنا شوند.
مفهوم یک تابع، یک متغیر، یک شرط و یک حلقه به صورت کامل برای مبتدیان گنگ است، این 4 عنصر پایه و اساس برنامه نویسی هستند و در واقع تمام چیزی هستند که یک برنامه مبتنی بر آنها می باشد. دانشجویان این نام ها را برای اولین بار می شنوند در حالی که اینها در برنامه نویسی بسیار مهم می باشند، اگر دانشجویان این پایه ها را نیاموزند همه چیز در کد نوشتن برای آنها جادویی به نظر می رسد و منجر به سردرگمی و خستگی آنها خواهد شد.
آشنایی با مفاهیم پایه ای در ابتدا( بخش دوم)
مربیان و اساتید باید زمان بیشتری را بر روی مفاهیم پایه ای بگذارند، اما متاسفانه امروزه بسیاری از آنها روند آموزش را خیلی سریع پیش می برند. مشکل اینجاست که بسیاری از استادان سعی می کنند که خود را به جای دانشجویان بگذارند، آنها چندین سال است که برنامه نویسی کار می کنند و فراموش کرده اند که چه مشکلاتی ممکن است برای یک فرد مبتدی در روند آموزش پیش بیاید. این دقیقا مانند آن است که یک راننده واقعا حرفه ای نمی تواند کسی را تصور کند که قبل از ترمز کردن نمی تواند فکر کند، او فکر می کند همه چیز به صورت خودکار است.
من تمریناتم را جوری طراحی می کنم که چالش برانگیز باشند ولی به راحتی با استفاده از همین 4 عنصر نام برده شده قابل حل باشند. چالش برانگیز و قابل حل، این می تواند یک تمرین فوق العاده باشد. یک مثال خوب یک تبدیل کننده اعداد فارسی به عربی یا انگلیسی می باشد، زمانی که دانشجویان این 4 عنصر را به خوبی آموختند آنها انگیزه زیادی برای حل این سوال خواهند داشت. مبانی برنامه نویسی بسیار مهم هستند، به هیچ وجه تا برای تمامی دانشجویان حل نشده اند از آنها نگذرید.
کتابخانه ها و فریم ورک ها( بخش اول)
بعد از آنکه دانشجویان زمان زیادی را صرف برنامه نویسی کردند آنها باید یاد بگیرند که از کدهایی که وجود دارند به بهترین شکل استفاده کنند، این کدها معمولا در قالب کتابخانه ها و فریم ورک ها می باشند. همانطور که قبلا نیز بیان کردم توسعه دهندگان مدرن کتابخانه درستی را برای استفاده خود انتخاب می کنند و زمان زیادی را برای نوشتن یک قطعه کد که ممکن است دارای خطا نیز باشد صرف نمی کنند و سعی می کنند از این کدهای آماده استفاده کنند.
برای اینکه بتوانید این مرحله را با موفقیت بگذرانید باید بتوانید کدهایی که در بخش های قبلی نوشته اید را با استفاده از این کتابخانه ها و فریم ورک ها نیز پیاده سازی کنید که از جمله این کتابخانه ها می توان به مواردی مانند Moment.js، Jackson، Lodash یا Apache اشاره کرد.
کتابخانه ها و فریم ورک ها( بخش دوم)
به این ترتیب بلافاصله بعد از یادگیری مبانی می توانند ارزش کتابخانه ها و فریم ورک ها را درک کنند، آنها به سطح بالاتری از مهارت برنامه نویسی دست پیدا می کنند. تا به حال این دانشجویان درک کرده اند که می توانند یک مسئله را بدون صرف کمترین میزان زمان حل کنند. زمانی که دانشجویان از فریم ورک ها استفاده می کنند بعد از آنکه مفید بودن آن را درک کردند می توانند به خوبی پی به اهمیت استفاده از این ابزارهای آماده ببرند.
متناسب با زمان برگزاری دوره کار سختی است که زمان زیادی را به استفاده از فریم ورک ها اختصاص دهیم، با این وجود همانطور که گفتم مهمترین کاری که شما باید انجام دهید این است که به دانشجویان خود آموزش دهید که بتوانند از برنامه نویسی برای همه قسمت های مسئله خود به سمت استفاده از فریم ورک ها حرکت کنند. من سایر ابزارها را در این بخش بیان نکردم چرا که آنها تنها برای برنامه نویسان حرفه ای به کار می روند، در این مرحله دانشجو نیازی به داشتن اطلاعات درباره نحوه ادغام و پیکربندی ابزارها ندارند.
استاد و شاگردی( بخش اول)
در 20 سال ابتدایی از زندگی خود می خواستم که کار کردن با پیانو را یاد بگیرم، من احتیاجی به یک معلم نمی دیدم و گمان می کردم که خودم می توانم بیاموزم، 5 سال بعد با یک استاد حرفه ای در این زمینه مشورت کردم، نتیجه چه شد؟ من در این یک ماه موفق شدم بیشتر از 5 سال گذشته بیاموزم. معلم پیانوی من خطاهای من را به من گوشزد می کرد، خطاهایی که خود به تنهایی نمی توانستم آنها را بشنوم و ببینم و از بسیاری از چیزهای دیگر که نمی توانستم آگاه شوم من را آگاه می کرد. بعد از تمامی اینها او به ذهن من موسیقی و هنر را تزریق کرد که هر دو آنها برای من بدون کمک او قابل دسترسی نبودند.
استاد و شاگردی( بخش دوم)
مثالی که در بخش قبل برای شما بیان کردم دقیقا مانند برنامه نویسی است، اگر کسی در برنامه نویسی تجربه ای نداشته باشد یادگیری برنامه نویسی به صورت خودآموز برای او می تواند راه حلی بسیار بد باشد. اگر چه در این زمینه داستان های موفقیت آمیز بسیاری بوده است ولی با این وجود منظور من تنها کارایی این روش است که به نظرم مناسب نیست.
در عوض در اینجا باید یک رابطه استاد شاگردی برقرار باشد که در ابتدا استاد دستور می دهد و شاگرد باید کورکورانه عمل کند، البته توجه داشته باشید که استاد می تواند این دستورات را به صورت کامل توضیح دهد ولی معمولا فراتر از حد شاگرد می باشد. این قوانین در واقع به نوعی باعث امنیت می شوند یعنی حتی اگر کسی کار خود را به روش بدی شروع کرده باشد دوباره می تواند با استفاده از این روش به سطح مناسبی دست پیدا کند. تدریس نباید به صورت صحبت یک نفره باشد، استاد باید به صورت فردی با هر یک از شاگردان خود تعامل داشته باشد، او باید بررسی کند که هر یک از دانشجویانش چگونه کار می کنند، آنها را راهنمایی کند و به این شکل سرعت پیشرفت آنها را بیشتر کند.
نکات پایانی درباره بحث استاد و شاگردی
زمانی که دانشجویان به سطح مشخصی از تخصص دست پیدا کنند استاد باید آنها را تشویق کند که به پیشرفت های بیشتری دست پیدا کنند، استاد باید نقش معلمی را بازی کند که طرز تفکر را با شاگردانش در میان می گذارد و همواره آماده بحث و گفتگو است.
چالش و انگیزه( بخش اول)
اجازه دهید که یک کلون فیس بوک طراحی کنیم، توجه داشته باشید که این یک پروژه میلیاردی با یک مدیر ارشد نرم افزار به همراه تعداد زیادی از برنامه نویسان حرفه ای نیست، این تنها یک پروژه تمرینی برنامه نویسی است که برای تمرین برنامه نویسانی که در دوره شرکت کرده اند ایجاد شده است. انجام دادن این پروژه به صورت تک نفره تقریبا غیرممکن است و می تواند باعث زده شدن دانشجویان شما شود و حتی ممکن است آنها به اشتباه گمان کنند که دارای مهارت های خارق العاده ای می باشند.
توجه داشته باشید که استاد نسبت به این شرایط آگاه است اما این تمرینات را ایجاد می کند تا در بین دانشجویان خود انگیزه ای را ایجاد کند. هدف اصلی از این تمرینات در واقع سرگرمی نیست، این تمرینات باید بر اساس یک تکنیک خاص طراحی شوند و هدف از آنها نیز این باشد که دانشجو در پایان این تکنیک را در برنامه نویسی بیاموزد.
چالش و انگیزه( بخش دوم)
انگیزه خوب است اما به هیچ وجه نباید محتوا را فدای آن کرد، برنامه نویسی آسان نیست به همین علت اگر دانشجویی انگیزه کافی برای یادگیری برنامه نویسی را به صورت ذاتی نداشته باشد این راه می تواند یک راه اشتباه برای او باشد. تازه واردان باید آنچه که به عنوان توسعه دهنده حرفه ای شناخته می شود را تجربه کنند، آنها باید بدانند که این زمان خود را برای رسیدن به چه هدفی سرمایه گذاری می کنند.
به عنوان مثال بسیاری از اپلیکیشن های تجاری دارای فرم ها و گریدهای بسیار پیچیده ای می باشند که ساختن آنها نیازمند مهارتی است که شما می توانید از آن به عنوان یک تمرین برای صبر و مهارت خود استفاده کنید. ساخت یک برنامه مشابه فیس بوک نمی تواند درس و تمرین مناسبی برای دانشجویان باشد.
چالش و انگیزه( بخش سوم)
توجه داشته باشید که افرادی که به صورت حرفه ای برنامه نویسی نمی کنند ممکن است از تعداد خطوط کمی که شما در طول یک روز برنامه نویسی می کنید تعجب کنند، شما حتی ممکن است روزهایی را تجربه کنید که بخش هایی از کد خود را حذف می کنید بدون آنکه دستاوردی داشته باشید.
چرا؟ چون هر چیزی در هر زمانی ممکن است اشتباه باشد، ما ممکن است ساعت های طولانی را صرف باگ ها و خطاهای عجیب و غریب کنیم که ممکن است تنها بر اثر یک اشتباه تایپی به وجود آمده باشند. بعضی از ابزارها ممکن است فقط به دلیل اینکه کتابخانه آنها به روزرسانی شده است کار نکنند، حتی ممکن است کل سیستم از بین برود چون که کسی فراموش کرده است که آن را به git اضافه کند و این لیست می تواند ادامه پیدا کند. دانشجویان باید از این تجربه ها لذت ببرند، یک تمرین بر روی یک کتابخانه ناشناخته در مدت زمان کوتاه می تواند یک کار بسیار درست باشد. تنها نکته ای که افراد مبتدی نباید فراموش کنند این است که برنامه ریزی درستی داشته باشند.
توصیه نهایی برای یادگیری برنامه نویسی ( بخش اول)
این نکته شاید نکته آخر باشد اما نکته ای بسیار مهمی است. توجه داشته باشید که شما نمی توانید در بازه زمانی کوتاهی تبدیل به یک برنامه نویس حرفه ای شوید، دو هفته، دو ماه و یا حتی یک سال زمان کمی است که شما بتوانید به سطح بالایی در برنامه نویسی دست پیدا کنید. تبدیل شدن به یک برنامه نویس حرفه ای نیازمند صرف زمان زیادی می باشد که این کار بدون داشتن صبر و حوصله به هیچ وجه میسر نیست.
توصیه نهایی برای یادگیری برنامه نویسی( بخش دوم)
در کنار دانشجویان، مربیان نیز به هیچ وجه نباید در آموزش برنامه نویسی عجله ای به خرج دهند و یا اینکه وعده های دروغینی را به دانشجویان تحویل دهند که شما می توانید در بازه کوتاه مدت یک برنامه نویس حرفه ای شوید. مربیان در واقع باید بر روی این نکته تمرکز کنند که آیا دانشجویان می توانند به خوبی مفاهیم گفته شده در آموزش برنامه نویسی را به خوبی درک کنند؟ این موضوع بسیار مهم است چرا که حرکت سریع مربیان می تواند آینده بسیاری از دانشجویانی که در دوره های آموزش برنامه نویسی شرکت کرده اند را به خطر بیندازد. امیدوارم با مطالعه این مطلب اطلاعات کافی درباره آنچه که به عنوان پایه و اساس یادگیری کد نوشتن به حساب می آید را بدست آورده باشید.
سلام .ممنون بابت سایت خوبتون و این مقاله مفید
ببخشید من یک سوال دارم خواهش میکنم جوابمو بدید بنده میخام برنامه نویسی رو شروع کنم بخاطر علاقه.(محصل نیستم)(زبان سی پلاس پلاس یا سی شارپ رو میخوام شروع کنم)
آیا لازمه ساختمان داده رو یاد بگیرم؟؟؟یا لازم نیست؟؟
ممنون میشم جوابمو بدید دمتون گرم
سلام ،
قاعدتا یادگیری این زبان ها به عنوان پایه برنامه نویسی بسیار خوب است ، اما به نظر من برای شروع زبانهای جدید تر مثل جاوا یا پایتون بهتر هستند ، دانستن علوم پایه و مباحث زیرساختی ماشین قطعا به شما درک عمیق و بهتری از موارد پیش رو در یادگیری و توسعه دانش خواهد داد