چطور میشه برنامه‌نویس شد؟

چطوری میشه برنامه‌نویس شد؟چطوری برنامه‌نویس شدی؟این دوتا، سوالی که خیلیا ازم میپرسن و هیچ اید‌ه‌ای ندارن راجع‌به اینکه چطوری میشه این کارو شروع کرد!تو این نوشته سعی میکنم قدمیهایی رو که میشه برداشت برای این کار بر اساس تجربه‌م بگم و اینکه چه چیزهایی لازمه این کار هست :)این سوال خود من هم بود که چه زبانی رو یاد بگیرم و اگر فلان زبان رو یاد بگیرم براش بازار کار هست یا نه و خیلی سواله دیگه که ممکنه برای همه پیش بیاد. خب تا حد خیلی زیادی هم طبیعیه چون مسلما دنیای ناشناخته‌ایه ، تا وقتی واردش نشیم. اما واقعیت اینه که نباید درگیر این سوال‌ها شد و منتظر جواب براشون موند. تجربه کردن دنیای ناشناخته خوبه و تابع اون کشف‌ واقعیت‌های جدید!زبان برنامه نویسی یاد نگیرید! برنامه نویسی یاد بگیرید.به نظرم اشتباهی که خیلی‌ها ممکنه دچار بشن اینه که یه زبانی رو شروع کنن و صرفا مفاهیم رو توی همین زبان یاد بگیرن و از دنیای اون خارج نشن.چه دلیلی داره که این کارو نکنیم؟زمانی که برنامه نویسی رو شروع کردم، با زبان C بود. هیچ دلیلی هم برای انتخابش نداشتم. صرفا چون کتابش رو خریده بودم :) باهاش شروع کردم کد نویسی کردن. بعد این جریان تو دانشگاه به ما #C یاد دادن :( و اونا هم دلیلی نداشتن برای انتخابشون چون ترم‌های قبلی این کارو کرده بودن!اما تجربه این درس خیلی هم برام بد نبود. چرا؟ چون تمام مفاهیمی رو که یاد گرفته بودم عینا اینجا هم بود (شگفت‌انگیز!). مثلا مفهوم متغییر، حلقه، آرایه و ماتریس و... همش توی این درس تکرار شد. اما چون خیلی تجربه نداشتم باور نمیکردم زبان‌ها میتونن شبیه به هم باشن (البته بعد از گذروندن درس پیاده سازی زبان‌های برنامه‌نویسی فهمیدم شباهت‌شون خیلی هم چیز دور از ذهنی نیست).مقدمه‌ای که گفتم برای اینه که همیشه مفاهیم پایه رو باید خوب یاد بگیریم تا بتونیم از ابزار اون استفاده کنیم. زبان‌های برنامه نویسی هم ابزاری هستن برای ارتباط ما و کامپیوتر پس وقتی اینارو بلد باشیم حتما یاد گیری زبان‌های دیگه آسون میشه :)سر فصل‌های مفاهیم پایه چیا هستن؟ از اونجایی که خیلی علاقه ندارم تو این نوشته خیلی آکادمیک برخورد کنم با مبحث، اما بد نیس بدونیم تو مبانی برنامه‌نویسی دانشگاه‌ها چی یاد میدن. پس کار بعدیمون اینه که این اون مفاهیم رو پیدا کنیم. البته کتابی مثل دایتل دایتل هم تقریبا طبق همین سر‌فصل ها مفاهیم رو گفته.برنامه نویسی شی‌گرا را به درستی درک کنید.مفهوم شی‌گرایی تو همه جا هست حتی زبانی مثل جاوا اسکریپ با اندکی تفاوت! احتمالا خیلی کلمه آبجکت (object) یا شی رو بشنوید ولی نترسید، خیلی چیز عجیبی نیست :))از خاصیت‌های شی‌گرایی معمولا درک سخت شه، ولی حتما یاد میگریم، چون پایه خیلی چیزاس.یکی از بهترین زبان هایی که مفهموم شی‌گرایی رو پیاده سازی کرده زبان JAVA هست. به نظرم یکی از کاندید‌های یادگیری شی‌گرایی ایه. ولی سعی میکنیم خیلی درگیر ابزار نشیم و با هر زبانی که بتونه این مفهوم رو به درستی منتقل کنه، یادگیری مون رو تکمیل کنیم. اگر یه مثال ساده بخوام از طیف‌های مختلف زبان‌ها بزنم به این شکله:// JAVA class Person{ public String name; public Integer age; public Person(String name, Integer age) { this.name = name; this.age = age }} // PHP class Person { public $name; public $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } // JavaScript function Person(name, age) { this.name = name; this.age = age; }میبینید که کدها چقدر شبیه هم هستن! تمامی این مفاهیم رو الان یاد گرفتم کافیه؟کاملا بستگی به شما داره که چقدر بخوایید تو این کار جلو برین پس اگه باز هم میخواین یاد بگیریم ادامه میدیم :)وارد بازار کار بشینتا اینجای کار اگه خوب پیش اومدین نگران هیچی نباشین:) چون سواد پایه‌ای برنامه نویسی مهم‌تر از ابزار و تکنولوژیه!وارد بازار کار شدن ممکنه اولش سخت به نظر بیاد ولی شرکت ها و استارتاپ‌ها به آدمای با سواد نیاز دارن. واسه اینکه وارد بازار کار بشین حتما شروع کنید یه زبانی رو تخصصی‌تر یاد بگیرید ولی قبلش حتما حوزه فعالیتتون رو مشخص کنید. خوشبختانه حوزه تو IT، عناوین خیلی زیاده: توسعه دهنده Backend، توسعه دهنده Frontend و اندروید و iOS ....پیشنهاد میکنم به Road Map توسعه وب نیم نگاهی داشته باشید تا بهتر متوجه تقسیمات اون بشید. اگه دقت کنید تقسیم بندی خیلی زیاده و انواع زبان‌ها، تکنولوژی‌ها و... داره. مگه میشه همشو یاد بگیریم؟ هم آره هم نه!راستش انتخاب خیلی سخت میشه زمانی که گزینه‌های زیادی وجود داشته باشه. ولی به جرات میتونم بگم وقتی یکیشون رو به درستی یاد بگیرین باقی رو هم میتونین. این دقیقا مثل همون مبحث یادگیری پایه‌ای برنامه‌نویسیه. مثلا اگه شما الان اراده کنید وارد حوزه توسعه وب بشید و فریم‌ورکی مثل لاراول یا سیمفونی که الان خیلی محبوب هستن، انتخاب کنید، ممکنه زمانی زیادی رو اولش صرف کنید. ولی یادگیری فریم‌ورک دوم و سوم قطعا آسون‌تره چون شما هم تجربه بدست آوردید هم دید کلی به فریم‌ورک‌ها و نحوه کار کردن شون. پس نگاهی به آگهی‌های استخدام شرکت‌ها و استارت‌آپ‌ها داشته باشید و بفهمید بازار‌کار بیشتر با چه ابزارهایی کار میکنن. ممکنه درصد کمی دست خودمون نباشه که چه ابزاری رو انتخاب کنیم ولی سعی کنید فریم‌ورک های مختلف رو تست کنید تا تصمیم درست‌تر، بر اساس علاقه‌تون بگیرین.عمیق‌تر مطالعه کنیدفریم‌ورک یا ابزاری هایی رو که انتخاب میکنید با استفاده از Pattern هایی مثل Factory, Facade, Singleton و ... پیاده سازی شدن پس برای درک بهتر کدهای فریم‌ورک بهتره ایناهارو یاد بگیریم. البته سعی من بر اینه پیشنهاد منبع ندم اما برای این مورد یکی از باحال‌ترین کتابایی که خوندم رو پیشنهاد میکنم. کتاب Head First Design Pattern، با طرح مشکل و سپس حل کردن اون با کمک Pattern ها به شما کمک میکنه که به راحتی متوجه کاربردش بشید. پس این کتاب رو از دست ندید:)لینوکس: ابزاری قدرتمند، فرهنگی موثرشخصا تو دنیای کامپیوتر، به همه چیز دید ابزاری دارم اما به شکل خوب :)انتخاب نوع ابزار تو دنیای کامپیوتر کاملا بستگی به نیازتون داره. پس نه زبان جاوا بده و نه زبان جاوا اسکریپت چون هر کدوم کاربرد خودشون رو دارن.اما لینوکس با همه این‌ها یک تفاوت داره، که علاوه بر ابزار قدرتمند، فرهنگی به مراتب قدرتمند‌تر رو ایجاد کرد. جوامع لینوکسی از مجموعه آدم‌های سراسر دنیاست. برای آشنا شدن بیشتر حتما مستند انقلاب سیستم عامل‌ها رو ببینید.اما همچنان ابزاری قوی در دست دارید اگه لینوکس یاد بگیرید. برای این کار دو منبع رو هم معرفی میکنم اولیش کتاب The Linux Command Line a Complete Introduction و بعدی هم ویدیو‌های جادی‌ .اگر شروع کنیم، تا همین‌جای راه کلی چیز باحال یاد گرفتیم و دید خیلی خوبی نسبت به ابزارها، تکنولوژی‌ها، نحوه کار کردن سیستم‌عامل و ... داریم. اما مهم‌ترین نکته اینه تا چیزی رو یاد نگرفتیم به راحتی ازش عبور نکنیم و پایه رو قوی کنیم. رفتن تو این مسیر کمی زمان‌بر هست پس عجله نکنید و مطمئن باشید با پیوستگی، به راحتی از پسش برمیاید. اگر فکر میکنید مطلبی هست که میتونه این نوشته رو بهتر کنه خوشحال میشم بگید :)