چجوری وارد دنیای جذاب برنامه‌نویسی شدم

خب دیگه. بعد از مدت‌ها باز شروع به نوشتن کردم! :) قرار هست توی وبلاگم در مورد تمام تجربیات برنامه‌نویسی و تکنولوژی، و هر چیزی که به نظرم جالب بیاد بنویسم. خوشحال میشم با پیشنهادها و انتقاداتتون به من در بهبود این موضوع کمک کنید.یکی از اتفاقات خیلی خوب زندگی من داشتن یه خانواده خیلی خوب بوده که مشخصا در آموزش من تاثیر جدی داشته. وجودشون باعث شد آموزش من خیلی زودتر شروع بشه و بتونم در سن چهار سالگی ریاضی رو یاد بگیرم، بخونم و بنویسم و مدل ذهنی که برام ایجاد کردن باعث شد همیشه به چگونگی مسائل فک کنم. حتی یادم میاد یه بار از داداشم علیرضا، تو سن خیلی پایین پرسیدم "چجوری میشه ۱۰۰ رو تقسیم بر ۳ کرد" و همش برام سوال بود که چرا روی ماشین حساب که میزنم اعداد عجیب غریب (اعشار) می‌نویسه.کنار اینها تو سن ۵ سالگی کامپیوتر به خونمون وارد شد. اون همه اشتیاق برای مسائل و چیزای جدید در کنار دنیای نامحدود کامپیوتر قرار گرفت. اوایل این دوران به بازی‌های نوستالژی مثل Midtown Madness و VCop 2 گذشت اما بعد از مدتی با کمک علیرضا سعی کردم با کامپیوتر کارای دیگه یاد بگیرم که نتیجش شد کلی مقام توی المپیادای کامپیوتر دبستان. گذشت تا موقعی که علیرضا برنامه نویسی رو شروع کرد. یادم میاد ساعت‌ها فقط کنارش می‌نشستم و سعی می‌کردم بفهمم داره چی کار میکنه. همش ازش میخواستم برام بگه و همش از نتیجه کار‌هاش ذوق می‌کردم. اون موقع QBasic می‌نوشت. ۱۰ سالم که شد بعد از کلی کنجکاوی خواستم خودم هم شروع کنم و دستی به کد ببرم. از علیرضا خواستم بهم کار کردن با محیط QBasic رو یاد بده و اولین دستورای برنامه نویسی عمر من شدن LOCATE و PRINT. حس فوق‌العاده‌ای بود. به کامپیوتر می‌گفتم برو فلان جا، فلان چیز رو بنویس و انجام می‌داد. اینقدر برام ذوق آور بود که بازی (اون زمان Age of Empires 1) و همه چیز رو تعطیل کردم و سعی کردم به یاد گرفتن و آزمون و خطا بپردازم.محیط QBasicیکی از مدل‌های یادگیری که واقعا دوستش دارم و خودم هم همیشه سعی کردم هر جا لازمه چیزی رو آموزش بدم پیادش کنم، ایجاد سوال در ذهن و یاد گرفتن به کمک حل اون سوال هست. بعد از یاد گرفتن چیز‌های مقدماتی، شروع کردم به نوشتن هر چیزی که به ذهنم میرسه. از بازی با رنگ‌ها تا نوشتن بازی حدس زدنی و غیره. یه روز دیگه به این فکر افتادم که وقتشه بازی XO بنویسم. یادمه برای نوشتن حالتای برد و باختش بیش از سه هزار خط IF نوشتم و آخر هم به نتیجه نرسیدم. سوال اینکه چجوری میتونم این کارو بکنم و باز هم کمک گرفتن از علیرضا باعث شد با مفهوم FOR و WHILE به خوبی آشنا شم. اونقدر درد کشیده بودم سر IF نوشتن که به خوبی یادشون گرفتم :))کد‌های بازی XO که همش IF بودبازم کنجکاوی و ادامه دادن مسیر علیرضا دقیقا پشت سرش باعث شد وقتی داشت Visual Basic 6 یاد می‌گرفت و کلی فرم‌ها و برنامه‌ می‌نوشت، این رو هم یاد بگیرم. اون زمان اینترنت‌ها 56kbps بودن نهایتا و StackOverflowای هم وجود نداشت. تمام چیزی که می‌شد پیدا کرد پروژه‌های آماده توی CodeProject بود. می‌تونم بگم تا قبل از شروع c، طلایی‌ترین دوران یادگیری برنامه‌نویسی برای من همین دوران Visual Basic بود. اونقدری کنجکاو بودم و اونقدری سر توی همه چیز می‌بردم که سعی بر نوشتن خیلی چیزا تو این دوران کردم. از Antivirusای که میتونست یه سری فایل تشخیص بده (از فیچراش نگم براتون که با ادیت Registry تونسته بودم به کنترل پنل اضافش کنم :)) ) تا استفاده‌های عجیب غریب از Win32 API.کار کردن با رجیستری ویندوزنوشتم و نوشتم تا اوایل دانشگاه علیرضا یعنی سال ۸۵. اون سال علیرضا با مسابقات ACM-ICPC آشنا شده بود و به تبعش کد C می‌زد. بازم کنجکاوی و بازم تلاش برای یاد گرفتن C از علیرضا باعث شد تا در حد خیلی مقدماتی بتونم C هم بزنم. اما خب اینقد Visual Basic برام جذابیت داشت که تونست یادگیری من رو توی C متوقف کنه و بیشتر من رو به سمت C# و VB.NET سوق بده. در همین حین یکی از سرک کشیدن‌های من توی کامپیوتر با یادگیری 3ds Max شروع شد. بازم یه دنیای جدید و این دفعه فوق‌العاده جذاب از نظر ظاهری. اولین نسخه‌ای که استفاده کردیم نسخه ۵ بود و اون زمان تمام چیزی که ازش وجود داشت یه کتاب بود که با کمکش مفاهیم Material و Polygon و کلی از اینها رو یاد گرفتم.اینقدری علیرضا تو مسیر یادگیری من تاثیر داشت که تقریبا اسم هر چیزی رو میاورد من از روی کنجکاوی یه سر بهش می‌زدم. همین موضوع و تعریف اینکه دوستش با XNA یه بازی نوشته بود باعث شد به این فکر کنم که هر چیزی از مکس و هر چیزی از برنامه نویسی بلدم رو با هم ادغام کنم. اون موقع در مورد FBX و مدل‌سازی و استفادش و حرکت دادنش و استخون و خیلی از این چیزا یاد گرفتم و وقتش رسیده بود ازش استفاده کنم. اولین بازی که نوشتم بازی بود که از روی کتاب آموزشی XNA یادش گرفتم و گام به گام باهاش پیش رفتم و نوشتمش اما خب کنجکاوی همیشگی باعث شد کلی بهش شاخ و برگ بدم و فایل ستاپ براش بسازم و کاملش کنم. بعد از یاد گرفتنش و تب اون موقع بازی‌های استراتژیک به سرم زده بود که بازی استراتژی بنویسم. ولی اصلا به یه چیز ساده قانع نبودم :))‌ میخواستم یه بازی بنویسم که هم دوربین از بالا باشه و بشه کل لشکر رو کنترل کرد و هم دوربین سوم‌شخص بشه و یک نفر رو کنترل کنی. همین باعث شد شبانه روز بهش فک کنم و کاراکتر طراحی کنم، اسلحه طراحی کنم ولی خب بعد از مدت‌ها تلاش این پروژه با شکست مواجه شد :)) اما خب خیلی ازش یاد گرفتم.لود مدل‌های 3ds max در XNAدر همین حین چیزای دیگه‌ای هم بودن که یاد گرفتم و کلی باهاشون دست و پنجه نرم کردم. مثلا سیستم عامل Symbian. اون زمان مثل الان برنامه‌نویسی برای موبایل اینقد خوش‌دست نبود. Symbian تا قبل از دوران Symbian^3 و استفاده از Qt یه محیط توسعه به اسم ‎‎‎‎Carbide.C++ داشت. توسعه موبایل باعث شد خیلی مفاهیم خوبی یاد بگیرم. وقتی که زمان Qt رسید دیگه می‌تونستم کامل اپلیکیشن موبایل توسعه بدم. تا این حد که تونستم دیکشنری‌های Babylon رو به فرمت SQLite3 در بیارم و توی موبایل دیکشنری بنویسم براشون. اون زمان تازه iPhone معرفی شده بود و من هم شدیدا روی نوکیا غیرت داشتم. یادمه یه بازی Air Hockey روی آیفون وجود داشت که نوکیا نداشت. همین باعث شد دست به کار بشم و شروع به نوشتنش با Qt کنم. اون موقع تازه بحث Engine‌های فیزیکی داغ بود و کلی برای حرکت توپ و اصطکاک و این‌ها سعی کردم ازشون استفاده کنم. اما خب وقتی دو نفر همزمان بازی می‌کردن همه چیز کند بود (لینک سوالم). بعدش فهمیدم مالتی تاچ توی سری‌های اولیه نوکیا خیلی ضعف داره و شکست بعدی رو هم خوردم :))بازی AirHockey اینجانب در Symbian^3این سفر ادامه داشت تا زمانی که علیرضا با دوستش یه وبسایت گالری عکس به اسم axbazar رو شروع کردن. اون زمان دوران طلایی بلاگفا، میهن‌بلاگ و بقیه بود. علیرضا برای اینکه بتونه دامنه پارک کنه میهن‌بلاگ رو انتخاب کرده بود. و باز هم من یه دنیای کاملا جدید پیش رو داشتم. دنیایی که فوق‌العاده جذاب بود و شوق داشتم یادش بگیرم. اوایل دبیرستان بود که HTML یاد گرفتم. وقتی HTML و CSS و JS رو یه مقدار مسلط شدم طراحی کردن سایت رو شروع کردم. طراحی کردم تا رسیدم به زمانی که میخواستم سایت مدرسمون که قالبش رو خودم زده بودم و روی میهن‌بلاگ بود قابلیت اینو داشته باشه که هر کس username و password داشته باشه. باز هم کنجکاوی و یافتن اینکه بله! ما زبان‌های Server-Side هم داریم که کلا کارشون این هست. wamp نصب کردم و یاد گرفتن PHP رو شروع کردم. باز هم برام جذابیت خیلی زیادی داشت و با کمال میل یادش گرفتم. از اون به بعد دیگه شروع کردم به توسعه کامل سایت با frontend و backend. دیگه اونقدری نمونه کار داشتم که تونستم باهاش اولین کار رسمی برنامه‌نویسیم رو بگیرم. یه وبسایت که دست‌مزدش ۵۰ هزار تومان بود :) شاید اینجا بود که همه چیز برام شیرین‌تر شد و تونستم کنار دبیرستان کار هم بکنم و واقعا برام لذت بخش بود. بعد از اون سایت عکس‌بازار رو هم به صورت کامل با پنل ادمینش نوشتم و به کار ادامه دادم تا اینکه تب ACM-ICPC علیرضا، من رو هم گرفت و وارد دوران شیرین المپیاد کامپیوتر شدم. توی یه نوشته به صورت مفصل در مورد تجربه المپیاد و ICPC می‌نویسم تا بماند برای آیندگان.تو نوشته بعدی در مورد دوران کاری تا به امروز براتون می‌نویسم و بعد از اون هم سعی میکنم نوشته‌های Technical به درد بخور داشته باشم :)