نقشه راه برنامه نویسی: حتی برای شما دوستِ عزیز!

تصویر از toptal.ioیکی از سوالاتی که خیلی از من پرسیده شده و قطعا ممکنه سوال شما هم باشه اینه:چجوری می تونم برنامه نویس بشم؟اما قبل از اینکه این سوال رو جواب بدم، سعی کنید سوال زیر رو جواب بدید:آیا به برنامه نویسی علاقه کامل دارم؟اگه پاسخ تون به این سوال مثبته می تونید از ادامه خوندن این بخش صرف نظر کنید و مستقیم برید نقشه راه رو مطالعه کنید. (اسکرول کنید) اما اگر پاسخ تون به این سوال منفی هست، متاسفانه باید بگویم شروع و ادامه این مسیر ممکنه سخت باشه براتون. چرا که برنامه نویس شدن یک شبه، و حتی چند ماهه اتفاق نمیوفته و مثل هر حرفه دیگه ای کلی باید تمرین کنید و ممارست به خرج بدید و اگر علاقه ای نداشته باشید ممکنه خیلی سریع دلسرد بشید و بیخیالش بشید!واقعا نمی دونم به برنامه نویس شدن علاقه ای دارم یا نه!شاید کمی عجیب باشه اما ممکنه واقعا ندونید علاقه ای به برنامه نویس شدن دارید یا نه. ینی میدونید که جذابه اما نمیدونید ارزش داره وقت بزارید روش و سختی های راهش رو تحمل کنید یا نه؟ جواب این سوال برای هر انسانی ممکنه متفاوت باشه اما اگر من در همچین موقعیتی قرار داشتم به صورت زیر فکر می کردم.آیا شغل و حرفه ای دارم و ازش راضی هستم؟ اگه جواب تون به این سوال آره است پیشنهاد می کنم وقت و تمرکز تون رو بذارید روی شغل و حرفه ای که دارید و سعی کنید هر روز بهتر و حرفه ای تر بشید و دانش و تجربه تون رو بیشتر و بیشتر کنید. قطعا رضایت و درآمد بیشتر نصیب تون خواهد شد. اما اگر کلا هیچ شغل و حرفه ای ندارید و به دنبال شاغل شدن هستید و یا اینکه شغل و حرفه دارید اما بهش علاقه ای ندارید یا ناراضی هستید (به هر دلیلی): باید بگم سختی های راه ارزشش رو داره! برنامه نویسی یاد بگیرید و وارد دنیای تکنولوژی و کامپیوتر بشید، زیرا پر واضح هستش که آینده داره به همین سمت حرکت می کنه. (بدون شک تا کنون کلیدواژه هایی مثل ارز دیجیتال، دنیای مجازی، متاورس، طراحی وب، اندروید و... به گوش تون خورده باشه)پیشنهاد دیگه ای که برای این دسته از دوستان دارم اینه که، به جز برنامه نویسی، بر روی سایر مهارت هایی که میشه با کامپیوتر به دست آورد تحقیق کنید. مانند:فتوشاپ: ویرایش عکس، طراحی لوگو، طراحی کارت ویزیت و...ویرایش و تدوین فیلم: این روز ها خیلی از یوتیوبر ها و شرکت ها به ویرایشگر و تدوین گر ویدیو نیاز دارند.و کلی مهارت دیگه که ممکنه بهشون علاقه بیشتری داشته باشید!سخن پایانی این قسمت:هیچ وقت کورکورانه تصمیم نگیرید و قبلش حتما جنبه های مختلف رو در نظر بگیرید و حسابی تحقیق کنید.نقشه راهتوجه: اینکه این نقشه راه رو چجوری یاد بگیرید و دنبال کنید برای هر شخصی متفاوت هستش و با توجه به مدل خودتون تصمیم بگیرید. مثلا یه نفر توی اینترنت سرچ میکنه و محتوای رایگان می بینه، یه نفر دوره آموزشی ثبت نام میکنه، یه نفر معلم خصوصی می گیره، یکی ممکنه کتاب بخره و یه نفر هم ممکنه خیلی از نقشه راه رو بلد باشه!قدم اول: مفاهیم اولیهحالا که تصمیمت رو گرفتی وقتشه از همین امروز شروع کنی! اولین قدم یادگیری مفاهیم اولیه هستش. این مفاهیم عبارتند از: (منبع: لینک اول، پیوست شده در بخش منابع)قسمت های اصلی کامپیوتر (شامل: CPU و رم و هارد و پاور و مادربورد و گرافیک و ورودی و خورجی ها)تعریف سخت افزار و نرم افزارتاثیر فناوری های مرتبط به کامپیوتر در حوزه های مشاغلسیستم عامل چیست و ویژگی های آنمفاهیم اولیه شبکه های کامپیوتریمقایسه سیستم عامل ها و کاربرد هریکپروتکل چیست و انواع پروتکل های پر کاربردزبان های برنامه نویسی متداول و کاربرد هر کداممفاهیم زبان های سطح بالا و سطح پایین و تفاوت آن دومفاهیم کامپایلر و مفسر، کد ماشینمفاهیم جبر بولی و سیستم اعداد باینری ( صفر و یک)تقویت زبان انگلیسی (اگر ضعف دارید)آیا لازمه واقعا همه این ها رو قبل شروع یاد بگیرم؟ آره! چون قراره کد نویسی کنید و چیزایی بنویسید که کامپیوتر قراره بفهمه و اجرا کنه براتون پس حتما باید باهاش آشنایی اولیه داشته باشید! از طرفی هم یادگیری زبان انگلیسی خیلی خیلی بهتون کمک میکنه. چرا؟ چون این علم در حال حاضر دست خارجی هاست و کلی منابع خوب فقط به زبان انگلیسی موجوده! حالا تصور کن انگلیسی بلد باشی! به کلی منابع تازه و جدید دسترسی داری و کلی جلو میوفتی!قدم دوم: انتخاب یک زبان برنامه نویسیبعد اینکه مفاهیم اولیه رو یاد گرفتی وقتش میرسه که اولین زبان برنامه نویسی تون رو انتخاب کنید. اگه دوست دارید یک برنامه نویس خوب و حرفه ای باشی پیشنهاد میکنم یکی از زبان های سی، سی پلاس پلاس و یا جاوا را انتخاب کنید. به شخصه توصیه نمی کنم برای شروع سمت زبان هایی مانند Python و یا JavaScript برید. زیرا پایتون برای شروع خیلی ساده هستش و ممکنه با بعضی از مفاهیم مهم برنامه نویسی مثل تخصیص حافظه، پوینتر و... آشنا نشید و از طرفی جاوا اسکریپت پیچیدگی ها و رفتار های عجیب و غریب خودش رو داره و ممکنه گیج بشید.توجه: هیچ گونه مخالفتی با این دو زبان برنامه نویسی ندارم و به شخصه خیلی دوسشون دارم و ازشون استفاده میکنم. اما بدلیل آشنایی که با این زبان ها دارم، آنها را برای شروع مناسب نمیدونم.قدم سوم: یادگیری زبان برنامه نویسی انتخاب شدهساختار کلی زبان برنامه نویسی انتخاب شدهانواع داده ها: int, float, double, long, short, string, Booleanعملگر های محاسباتی: چهار عمل اصلی، مود یا باقی مانده (%)، توان (^)متغیر و اصول نام گذاری آنتبدیل انواع داده ها به یکدیگر: به اصطلاح Type Castingعملگر های مقایسه ای: برابری، بزرگتری، کوچکتری،.....لیست ها و آرایه هامپ یا دیکشنریورودی و خروجی: داده هایی رو در کنسول(ترمینال) از کاربر بگیرید و یا به او نشان دهید.حلقه ها: حلقه for، حلقه while، حلقه do-whileدستورات شرطی: دستورات if، if-else, switch-caseتابعکار با فایلتحقیق در مورد امکانات مخصوص زبان برنامه نویسی انتخاب شده و یادگیری آن ها: مثلا توابع خود زبان یا به اصطلاح توابع built-inقدم چهارم: قدمِ سخت ماجراحالا باید مفاهیم یادگرفته شده رو کلی تمرین کنید. در سایت های مختلف کلی سوال و چالش برنامه نویسی وجود داره که میتونه کمک تون کنه. نمونه ای از این سایت ها عبارتند از:سایت کویرا (ایرانی)سایت TopCoderسایت HackerRankو...پیشنهاد میکنم در این قدم حداقل 100 سوال مختلف رو حل کنید و حسابی خودتون رو به چالش بکشید.قدم پنجم: قدمی طولانی و درازمدت :(در این قدم یادگیری و تمرین کردن با هم باید اتفاق بیوفته چون حجم مطالب زیاده و اگر تمرین نکنید تبدیل میشه به نقطه ضعف تون! حتما حتما حتما تمرین کردن رو جدی بگیرید!یادگیری و تمرین سوکت (Socket Programming)یادگیری و تمرین شی گرایی: کلاس، اصول شی گرایی و...یادگیری و تمرین ساختار های داده: مثل صف، پشته، درخت گراف و....یادگیری و رعایت اصول کدنویسی تمیز یا Clean Codeیادگیری و تمرین الگوریتم های معروف: DFS, BFS, A-Star, Sortingقدم شیشم: پیش به سوی بی نهایت و فراتر از آنحالا که احتمالا سه چهار ماهی باید گذشته باشه، میشه گفت تقریبا برنامه نویسی رو یاد گرفتید. وقتشه یک حوزه تخصصی رو انتخاب کنید و توی اون متخصص بشه. حتما در مورد حوزه های مختلف تحقیق کنید و ببینید به چه چیزی بیشتر علاقه دارید. نمونه هایی از حوزه های مختلف عبارتند از:توسعه وب سمت کاربر یا Front-End توسعه وب سمت سرور یا Back-Endتوسعه نرم افزار های موبایل: اندروید، آی او استوسعه نرم افزار های دسکتاپتوسعه بازیهوش مصنوعییادگیری ماشینو کلی حوزه های مختلف و جذابسخن پایانیدر پایان توجه شما رو به اثر دانینگ کروگر جذب می کنم:تصویر از sinapress.irیادگیری و پیشرفت توی هر چیزی بالا پایین های خاص خودش رو داره، اما شما اینو می دونید! اگه قراره متخصص بشید، هیچ وقت ناامید نشید و دست از تلاش برندارید.سعی کنید تو یه حوزه خوب قوی و متخصص بشید و بعدش برید حوزه های دیگه که علاقه دارید رو هم یادبگیرید. در کل یادگیری همیشه ادامه داره و هیچ وقت نباید متوقف بشید. چون دنیای کامپیوتر داره با سرعت سرسام آوری پیش میره و اگه یاد نگیری عقب میمونی. پس شد:رمز پیشرفت = تمرین زیاد + یادگیری همیشگیبا آرزوی بهترین ها، اون بالا مالاها ببینمتون ?ارتباط با منمن در لینکدین: seyyedaliayatiمن در اینستاگرام: cpt9m0منابعلینک اول