چطور برنامه نویسی را شروع کنیم؟..

" میخواهم برنامه نویسی یاد بگیرم اما، نمیدونم از کجا شروع کنم؟ "

هدف این مقاله این است که یادگیری برنامه نویسی را برای همه افراد محیا کند.
سوالات متداول

به عنوان یک مربی سوالات زیر همواره از من پرسیده میشود:

" به عنوان یک مبتدی و تازه وارد بهتر است کدام زبان برنامه نویسی را یادبگیرم؟ "

" کدام زبان برنامه نویسی تقاضای شغلی بیشتری دارد؟ "

" محبوب ترین زبان برنامه نویسی کدام است؟ "

زبان های برنامه نویسی معروف

اگر به دنبال یک مرجع رسمی برای اطلاع از رتبه بندی زبان های برنامه نوسی معروف هستید، میتوانید از لینک زیر استفاده کنید:

IEEE Spectrum top programming languages

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

چطور یک زبان برنامه نویسی انتخاب کنیم؟

علم کامپیوتر یک مبحث مطالعاتی کاملا وسیع می باشد، به این معنا که هر موضوع، به طور سلسله مراتبی موضوع قبلی را دربر می گیرد.

اگر قبلا در مدرسه تلاش کرده اید تا برنامه نویسی را یادبگیرید ( یا هر موضوع علمی STEM دیگری) اما موفق نشده اید و شکست خورده اید، مشکل از شما نبوده است.

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

هرچیزی که شامل استثنائات نباشد باید تدریس شود. هر مبحث موجود در برنامه درسی متناسب با سایر مباحث آن دارای یک ترتیب میباشد.

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

چند نکته پیشنهادی

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

به این دلیل این نکته را برای شما تکرار میکنم، زیرا؛ بزرگترین اشتباهی که به عنوان یک فرد مشتاق برای یادگیری برنامه نویسی مرتکب میشوید " تسلیم شدن " است. چون شما فکر می کنید که به اندازه کافی باهوش نیستید تا برنامه نویسی را یاد بگیرید. در حالیکه یادگیری کدنویسی ارتباطی با هوش شما ندارد. بله درست است، یادگیری برنامه نویسی سخت است اما نه بخاطر اینکه شما چه فردی و با چه هوشی هستید، بلکه بخاطر زیاد بودن مطالب و موضوعات متنوع این حوزه است.

قانون اول: این سناریو را که شما قرار است با موضوعی جدید آشنا شوید و همچنین به طور کامل هیچ حسی نسبت به آن ندارید را، بپذیرید.

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

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

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

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

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

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

· آیا این موضوع حسی برای من ایجاد کرده است؟

· آیا لغت جدیدی وجود داشت؟ اگر وجود داشته آیا تعریف مناسبی برای آن مطلب ارائه شده بود؟

· آیا مهارتهای جدیدی وجود داشته؟ آیا من کاربرد این مهارت جدید را متوجه شده ام؟ آیا میتوانم با حل مشکلِ تمرینات، درک و یادگیری خود از مهارت جدید را نشان دهم؟

· آیا میتوانم چیزی را که یادگرفته ام، فردا هم به خاطربیاورم؟ و حتی پس فردا؟ اگر نه، چطور آن را به خاطرم بسپارم؟

و اما آخرین توصیه، " قدرت حافظه را دست کم نگیرید. "

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

1. مبانی علم کامپیوتر

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

Intro to Computer Science Terminology

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

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

2. قضایا (موضوعات) منطقی

برای برنامه نویس شدن نیازی نیست که در ریاضیات قوی باشید. مهارت های ریاضی بسیار کمک کننده است، اما ضروری نیست.

اگر مهارت های ریاضی خوبی ندارید، توصیه می کنم " قضایای منطقی " را فرا بگیرید. اصولی که در قضایای منطقی مورد بحث قرار می گیرد از عناصر اصلی برنامه نویسی هستند.

میتوانید قضایای منطقی را در این دوره از طریق YouTube یادبگیرید.

Basic Concepts in Propositional Logic

3. برنامه نویسی جاوا

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

من زبان جاوا را برای یادگیری این مسیر انتخاب کرده ام، زیرا در این زبان بسیار با تجربه هستم.

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

اگر ترجیح می دهید که برای یادگیری از یک کتاب استفاده کنید، من کتاب زیر را پیشنهاد میکنم.

Head First Java

و اگر به دنبال یک دوره ویدئویی هستید، من دوره جاوا توسط Derek Banas در YouTubeرا توصیه میکنم.

Java Video Tutorial

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

4. الگوریتم ها و ساختاری های داده

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

یک ساختار داده، روشی برای مدیریت داده ها در حافظه می باشد..

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

به عنوان یک دست نوشته شخصی، دوره ویدئویی زیر مهارت من را از مبتدی به پیشرفته ارتقاء داد.

Udemy tutorial on Algorithms and Data Structures

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

نکته: این دوره گران است، اما ضروری.

5. توسعه برنامه اندروید

از نظر من توسعه برنامه اندرویدی، یکی از سرگرم کننده ترین برنامه نویسی ها توسط جاوا است. برنامه های اندرویدی عمدتاً با زبان جاوا برنامه نویسی شده اند. بنابراین زمانیکه جاوا را یاد بگیرید، برای آموزش اندروید هم آماده هستید.

برای شروع یادگیری در لینک زیر بهترین دوره ویدئویی رایگان YouTube را مشاهده کنید.

Udacity-Android Development for Beginners

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

در هرحال اگر قصد دارید برای یک کتاب برجسته و مهم هزینه کنید، من به طور ویژه کتاب زیر را به شما پیشنهاد میدهم. Head First Android Development: A Brain-Friendly Guide

این کتاب توضیحات همراه با جزئیات و کمک های بصری بسیاری برای درک لایه های نهفته در اندروید به شما ارائه میدهد. هر بخش این کتاب شما را در قالب یک مثال کاربردی پیش میبرد. هرچیزی در کتاب به طور کامل با استفاده از لغات و نمودارهایی که برای همه قابل درک و فهم باشد توضیح داده شده است.

منابع کاربردی

Stack Overflow

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

اگر سوالتان را پیدا نکردید، یک حساب کاربری ایجاد کرده و سوالتان را مطرح نمایید.

وبسایت های آموزشی بسیاری زیادی وجود دارند که میتوانید در آنها، دوره های برنامه نویسی را پیدا کنید.

برخی از وبسایت های مورد علاقه من Codecademy, Udemy, Udacity, Team Treehouse و Khan Academy می باشند.

پایان