برنامه نویسی رو درست و اصولی یاد بگیر، مثل یه لاکپشت!

به نام خدا.سلام.یه بار برای همیشه میخوام این بار رو از رو دوش خودم بردارم و بر اساس تجربه خودم به این سوال که «چطور برنامه نویسی یاد بگیرم؟» جواب بدم.خب اول سرتیتر بخش های این مقاله:خشت اولدارکوب!خشت دومدارکوب!یه سری مهارت مهمخشت آخر وجود نداره، همش دارکوبه تا آخر!یه توصیه دوستانهفقط قبل شروع ۳ تا نکته:این مقاله برای خرگوش ها نیست! یعنی چه؟ یعنی اینکه برای لاکپشت هاست. بازم یعنی چه؟ یعنی اینکه چه چیزی باعث شده خیلی ها فکر کنن برنامه نویسی خیلی سادست و هرکسی راحت میتانه یاد بگیره و پولدار هم بشه؟ اصلا این شکلی نیست! برنامه نویسی از پزشکی سخت تره! اگه فکر میکنی جا زدی پس ادامه مقاله رو نخوان. من نمیخوام مثل خیلی های دیگه بیام برنامه نویسی رو ساده جلوه بدم که بعدش خودم پول به جیب بزنم. باید این رو از اول بدانید که چیزای خوب معمولا سخت به دست میان و زمان زیادی هم میبرن. مثل لاکپشت آهسته (ولی پیوسته) راه رو اگه ادامه بدید و البته اگه از منابع خوب یاد بگیرید، حتما به جاهای خوبی خواهید رسید، انشاالله.من تو این مقاله بیشتر راجب «شروع درست» حرف میزنم و یه اشاره هایی هم به نحوه ادامه دادن و حرفه ای شدن می کنم. چرا؟ چون که خشت اول چون نهد معمار کج، تا ثریا میرود دیوار کج. اگه یه پایه قوی داشته باشی دیگه حرفه ای شدن سخت نیست، فقط زمان میبره.کسایی که برنامه نویس های خوبی هستن، معمولا تو دانشگاه ۴ سال تلاش کردن و خیلی مباحث زیادی رو هم یادگرفتن. پس توقع نداشته باشید برنامه نویسی راحت باشه و تو چند ماه و فقط با یادگرفتن یه زبان برنامه نویسی، توش عالی بشید. این شکلی نیست اصلا.خشت اولنمیخوام مقاله رو الکی طولانی کنم. مهمترین چیز تو این مرحله اینه که شما یاد بگیرید چطور مثل یه برنامه نویس فکر کنید.اکثر افراد بدون گذراندن این مرحله، مستقیم میرن سراغ یادگیری یه زبان مثل Python که خیلی کار اشتباهیه.در واقع بیشتر افراد میان یه زبان برنامه نویسی رو یاد میگیرن و بعد از یکی ۲ ماه با این سوال کلافه کننده روبرو میشن که «خوب حالا که زبان فلان رو یاد گرفتم، الان چطور ایده هایی که تو ذهنم دارم رو بسازم؟» و متاسفانه چون نمیدانن چکار کنن، اکثرا برنامه نویسی رو ول می کنن و یا اینکه خیلی ناامید و سردرگم میشن.خب دلیل چیه؟ و راه حل چیه؟دلیل اینه که پایه قوی ندارن، یعنی اینکه یادنگرفتن مثل یه برنامه نویس فکر کنن.راه حل هم اینه که . . . درست گفتید! اینکه بیان پایه قوی بسازن.خب این پایه قوی رو چطور بدست بیاریم؟راهش از دید من یه کتابه به اسم How to Design Programs ، ولی ۲ تا دوره ویدیویی تو سایت edX هستن که همین کتاب رو آموزش میدن و برای این هدف فوق العاده هستن. کاملا هم رایگان هستن:دوره How to Code : Simple Dataدوره How to Code : Complex Dataاین ۲ تا دوره رو باید به نوبت بگذرانید، اول Simple Data و بعد هم Complex Data. این دو تا دوره چنان بیس قوی برای شما میسازن که تا آخر عمر ممنونشان خواهید بود.هرکدام از این دوره ها باید حدود ۲ یا ۳ ماه طول بکشن، پس لاکپشت باشید!دارکوب!دارکوب یعنی چه؟ یعنی اینکه وقتی به سختی رسیدی جا نزن و ادامه بده. اینقد ادامه بده که به هدف برسی.خشت دومخشت دوم یعنی اینکه شما اون ۲ تا دوره رو پشت سر گذاشتین و تازه الان آماده این هستید که یه زبان برنامه نویسی مثل Python یا Java یا یکی از LISP ها یا هر زبان دیگه ای رو یاد بگیرید!راجب این مرحله همه جا مطلب زیاده و نیاز به من نیست تقریباً.دارکوب!یعنی چه؟ یعنی اینکه باز هم وقتی به سختی رسیدی جا نزن و ادامه بده. بازم اینقد ادامه بده که به هدف برسی.یه سری مهارت مهمحالا بعد از اینکه نزدیک حدود یک سال گذشت و یکم دستتان روان شد و مهارت کسب کردید، بعدش دیگه باید برین سراغ مباحثی مثل مباحث زیر، که خیلی خیلی مهم هستن:یاد گرفتن اصول مهندسی نرم افزار که خیلی هم مهمه.یاد گرفتن Standard Library زبانی که یاد گرفتید.مبحث Algorithm ها و Data Structure ها، که بسیار مهم هستن.مبحث Operating System هامبحث Networking و همینطور برنامه نویسی شبکه و غیره.مبحث GUIیاد گرفتن Library ها و Framework های دیگه ای که مورد نیازه.و . . .خشت آخر وجود نداره، همش دارکوب و لاکپشته تا آخر!خب احتمالا برای رسیدن به این مرحله یه ۲ یا ۳ سالی زحمت کشیدید.طول میکشه ولی آخرش قشنگه!ولی البته برنامه نویسی و کلاً علوم کامپیوتر آخر و ته نداره. شما همیشه در حال یادگیری خواهید بود.ولی اهمیتِ داشتنِ یه پایه قوی تو اینه که باعث میشه تو پیشرفت و یادگیری چیزای جدید دچار مشکل چندانی نشید.از این به بعدِ کار برای شما میشه اینکه یه تخصص برای خودتان انتخاب کنید و توی اون خیلی ماهر بشید. حالا اون تخصص میتانه یکی از اینا باشه:تخصص تو Web Developmentتخصص تو Game Developmentتخصص تو Systems Developmentتخصص تو Mobile Developmentتخصص تو Desktop Developmentتخصص تو Embedded Developmentیا چیزای دیگه.البته شما دیگه الان یه برنامه نویس خوب هستید که میتانید تو هرکدام از اینا کار کنید، ولی بهتر اینه که آدم یه تخصص داشته باشه و تو اون خیلی ماهر باشه.معمولا برای آدم هایی که تو یه زمینه ای واقعا متخصص باشن، همیشه کار و موقعیت های خوب و عالی وجود داره.یه توصیه دوستانهعلاوه بر لاکپشت بودن و دارکوب بودن، یه مفهومی هم تو بدنسازی هست به اسم Progressive Overload که نه تنها تو برنامه نویسی بلکه تو همه جای زندگی معجزه می کنه!این یعنی چه حالا؟ یعنی اینکه کم کم که رو به جلو داری میری، کم کم سخت ترش هم بکن برای خودت!یعنی اینکه همینطور که روبه جلو حرکت میکنی، پروژه ها و تمرین هایی هم که انجام میدی سخت تر بشه همیشه. با انجام دادن کار های سخت تره که آدم پیشرفت میکنه.بعضی مقاله های دیگه من:اصلا برنامه نویسی یعنی چه؟۲ کلمه اساسی و مهم برای برنامه نویس های تازه کار!پارادایم های برنامه نویسی به زبان سادهتوضیح map و filter و reduce به زبان آدم!چرا به UI و UX به قدر کافی اهمیت نمیدیم؟اسلام بد است یا فیزیک؟یا علی.