سرگذشت

در زیر خلاصه‌ای از روند آشنایی من با برنامه‌نویسی و نحوه کسب و کارم را می‌خوانید. سعی کرده‌ام از اصطلاحات فنی کمتر استفاده کنم (ولی نشد).

آشنایی با کامپیوتر و برنامه نویسی

خوشبختانه شانس با من یار بود و از سال ۱۳۷۳ در خانه کامپیوتر شخصی داشتیم. مدل بسیار پیشرفته ۳۸۶ که یک کامپیوتر ۱۶ بیتی بود! اولین تجربیاتم با سیستم‌عامل DOS شکل گرفت. یکی از بهترین سرگرمی‌های من ساختن فایل‌های Batch (بچ فایل / با پسوند bat) بود که هیچ کاربرد خاصی نداشت و بیشتر شبیه یک انیمیشن متنی بود (با استفاده از تعداد زیادی دستور CLS). اما همیشه کنجکاو بودم که چطور می‌توانم از دستورات شرطی استفاده کنم و بچ فایلی بسازم که با دریافت ورودی از کاربر بتواند کارهای متفاوتی انجام دهد! به عبارت دیگر بتواند با کاربر ارتباط برقرار کند.

انقلاب اول؛ QBasic

اولین قطعه کد از یک برنامه کامپیوتری را در «مجله کامپیوتر» همان سال‌ها دیدم، هرچند از هیچ‌یک از آن‌ها سر در نمی‌آوردم. اما خوشبختانه باز هم شانس با من یار بود و اولین آشنایی من با برنامه‌نویسی در سال ۱۳۷۸ با استفاده از محیط برنامه‌نویسی QBasic اتفاق افتاد! این محیط، بسیار عالی طراحی شده بود و از یک راهنمای نسبتاً کامل برخوردار بود. در آنجا بود که با دستورات شرطی (If) آشنا شدم. برای کسی که تا کنون برنامه‌هایش مثل آب داخل جوی جاری بودند و هیچ کنترلی روی آنها نداشت، وجود دستورات شرطی یک انقلاب بود! از آن سال به بعد یک روند کاری برای من شکل گرفت. البته هیچ‌وقت فکر نمی‌کردم بتوانم از طریق آن کسب درآمد کنم.

انقلاب دوم؛ زبان C

یک سال بر روی QBasic کار کردم و تحولات زیادی در روند یادگیری من اتفاق افتاد تا پاسخ این سؤال‌های همیشگی خودم را یافتم؛ «اگر QBasic یک زبان برنامه‌نویسی است پس خودش با چه زبانی ساخته شده!؟»، «Windows 3.1 را چگونه ساخته‌اند؟»، «چرا من به راحتی نمی‌توانم یک چیزی شبیه Windows 3.1 با QBasic بسازم؟».

باز هم شانس با من یار بود و در آن زمان یک جمله بسیار هیجان‌انگیز شنیدم؛ «QBasic تنها زبان برنامه‌نویسی موجود نیست! مثلاً Windows را با زبان C نوشته‌اند!!!». هنوز هم وقتی به این جمله فکر می‌کنم هیجان‌زده می‌شوم! آنجا بود که متوجه شدم QBasic تنها زبان برنامه‌نویسی موجود در جهان نیست و یکی از معروف‌ترین زبان‌های برنامه‌نویسی، C است. و کم کم متوجه شدم پایین‌ترین سطح برنامه‌نویسی، Assembly است که در واقع به زبان CPU بوده و به همین دلیل برنامه‌نویسی مستقیم با زبان Assembly برای ما انسان‌ها جذاب نیست. به همین دلیل زبان‌هایی مثل C و QBasic ساخته شده‌اند تا این کار را راحت‌تر کنند.

دوباره ماجرای مهاجرت از بچ فایل به QBasic تکرار شد. این بار از QBasic به C.

حدود سال ۱۳۷۹ بود که به طور همزمان به زبان‌های C و Pascal برخوردم. با وجود رفتارهای عجیبی که زبان C از خود نشان می‌داد هرگز نتوانستم آن را کنار بگذارم تا اینکه بالأخره یک روز به هدف خرید یک کتاب آموزش زبان C با کتاب برنامه‌نویسی به زبان C نوشته جعفر نژاد قمی آشنا شده و آن را تهیه کردم. هرگز خاطرم نیست کتابی را آنقدر با جزئیات و دقت خوانده باشم. آنجا متوجه شدم که C رفتار عجیب و غریبی نداشته بلکه من نمی‌دانستم چطور باید از آن استفاده کنم.

با وجود اینکه در آن سال‌ها همه با Windows 95 یا ۹۸ کار می‌کردند. من همچنان در دنیای DOS سیر می‌کردم و همیشه در کنار Windows یک نسخه از DOS 6.22 را هم نصب می‌کردم.

انقلاب سوم؛ ++Visual C

کم‌کم وارد فناوری Windows شدم و دوباره ماجرای مهاجرت تکرار شد؛ این بار از C به ++Visual C.
سال ۱۳۸۱ وارد دانشگاه شدم و همزمان ++C را هم فرا گرفتم و تازه متوجه شدم چطور باید در محیط ++Visual C برنامه‌نویسی کنم. در آن سال‌ها توانستم یک دیسک Floppy را طوری برنامه‌ریزی کنم که بدون نیاز به هیچ سیستم‌عاملی راه‌اندازی (Boot) شود. توضیح غیر فنی آن بسیار سخت است اما به طور خلاصه می‌توانم این کار را «اولین مرحله از تولید سیستم‌عامل» بنامم. هر چند که کمتر از ۵٪ کل کار تولید یک سیستم عامل بسیار ساده است. به هر حال این کار یکی از آرزوهای بسیار بزرگ برای من بود که توانسته بودم به آن دست پیدا کنم. در همان زمان دنیای اینترنت به روی من باز شد که تحول بزرگی بود. همزمان سیستم‌عامل لینوکس و بسیاری چیزهای دیگر مثل PHP و MySQL را نیز فرا گرفتم و همین طور با دنیای متن باز (Open Source) هم آشنا شدم.
سال ۱۳۸۲ اولین پروژه تجاری را با زبان ++C (محیط Visual C++ 6.0) با یک شرکت نرم‌افزاری شروع کردم و روند کارم به جای تحقیق و تفحص بیشتر به سمت تجارت و کسب‌وکار حرکت کرد. نرخ کار من به ازا هر ساعت کار ۱،۵۰۰ تومان بود و اولین حقوق ماهیانه‌ام ۴۰،۰۰۰ تومان! پروژه برای اولین بار در سطح کشور اجرا می‌شد و با توجه به اینکه برنامه‌نویس اصلی تیم بودم تجربه بی‌نهایت با ارزشی بود. البته هنوز تمام انرژی‌ام را برای کار تجاری مصرف نمی‌کردم.

با راهنمایی یکی از اساتید دانشگاه توانستم یک سیستم پیام‌رسان کامل با زبان ++C (مثل Yahoo Messenger) و با قابلیت اطمینان بالا ایجاد کنم که هنوز هم کار می‌کند و بارها وقتی همه پیام‌رسان‌ها به لطف مخابرات از کار می‌افتد از آن استفاده کرده‌ایم. همچنین با تلاش یکی دیگر از اساتید توانستم در مسابقات برنامه‌نویسی ACM غرب آسیا شرکت کنم که البته به خاطر یک مشکل فنی هیچ مقامی در آن به دست نیاوردیم.

انقلاب چهارم؛ NET.

هیچ‌وقت از Java خوشم نمی‌آمد چون دسترسی به سطوح پایین‌تر سیستم‌عامل را محدود می‌کرد. بعدها که اهمیت دسترسی به سطوح پایین‌تر سیستم عامل کم رنگ‌تر شد متوجه شدم که کلاً از دستور زبانی Java خوشم نمی‌آید. اما روزگار باعث شد به سمت NET. مهاجرت کنم که آن هم به نحو دیگری دسترسی به سطوح پایین‌تر را محدود می‌کرد اما قابل مقایسه با Java نبود. حوالی سال ۱۳۸۳ اولین پروژه تحت وبم را بر روی سکوی NET. با زبان #C تجربه کردم. نمی‌دانم چرا همیشه از پلتفرم‌های مایکروسافت لذت می‌بردم. شاید به این خاطر باشد که اولین تجربه برنامه‌نویسی‌ام با QBasic بوده که کار مایکروسافت است.

در آن سال‌ها زبان‌های سطح بالایی مثل #C را قبول نداشتم و فکر می‌کردم باید حتماً همه چیز را خودم با C و ++C بنویسم و استفاده کنم و برنامه‌ام باید بدون نیاز به نصب هیچ افزونه‌ای اجرا شود (همین حس باعث شده بود که دیسک Bootی ایجاد کنم که بدون نیاز به سیستم‌عامل کار کند!). حتی استفاده از بانک‌های اطلاعاتی مثل Access و SQL برایم کسر شأن بود. اما کم‌کم این حس تغییر پیدا کرد و متوجه شدم که سرعت و همکاری در تولید نرم‌افزار عامل بسیار مهمی است و اگر در کنار کیفیت وجود نداشته باشد، امکان ادامه کار وجود ندارد. و به طور خلاصه داشتم از سطح یک برنامه‌نویس سیستمی به سطح یک برنامه نویس کاربردی تغییر جهت می‌دادم.

این شد که دوباره ماجرای مهاجرت تکرار شد و این بار به #C و سکوی NET. مهاجرت کردم اما هیچ‌وقت از مطالعه سکوهای دیگر و مقایسه آن‌ها با #C و NET. دست نکشیدم، مخصوصاً Java! تا قبل از آشنایی با زبان برنامه نویسی Scala لذت برنامه‌نویسی با #C را در هیچ زبان دیگری تجربه نکرده‌ بودم و همیشه دوست داشتم که توانایی‌های #C را به سیستم‌عامل‌ها و سکوهای دیگر منتقل کنم.

انقلاب پنجم؛ روش جدید کاری

از سال ۱۳۸۶ شغل رسمی و تمام وقت من تولید نرم‌افزار شده بود. هیچ وقت در جایی به عنوان یک نیروی ثابت مشغول کار نشدم و همیشه به صورت پروژه‌ای و پیمانکاری کار کردم و همیشه از کارم لذت بردم. کم کم فرصت‌هایی برای ارائه مشاوره برایم پیش آمد که خوشبختانه موفقیت آمیز بود.

سعی کردم سیستم کاری‌ام را رسمی کنم اما فهمیدم که این رسمیت الزاماً نیازی به ثبت و ایجاد یک شرکت سنتی که پروژه می‌گیرد و اجرا می‌کند، نیست.

یکی از بزرگ‌ترین فعالیت‌های من در جهت پیشبرد جامعه متن باز NET. تولید و انتشار یک چارچوب توسعه متن باز به نام «زغال» بود که همچنان ادامه دارد. و البته در خصوص سیستم کاری‌ام نیز در وب‌سایت زغال توضیحاتی داده‌ام.

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

انقلاب بزرگ؛ Scala و اکو سیستمش

در اوایل سال ۱۳۹۲ با زبان برنامه‌نویسی Scala آشنا شدم. در ابتدا انتقادات زیادی در موردش خواندم و بار اول که قواعد دستوری‌اش را دیدم به کامم ننشست. در همان روزها بود که جف آتوود (برنامه‌نویس Stackoverflow) اعلام کرد که از NET. به Ruby on Rails مهاجرت کرده و جالب اینجا بود که در پستی که در این خصوص نوشته بود حرفهای دل من را هم زده بود. از طرفی با یک نویسنده از کتاب‌های آموزشی که خودش چند سال در مایکروسافت کار کرده بود ارتباط برقرار کردم و او هم معتقد بود که احتمالاً آینده NET. خیلی روشن نباشد و اکو سیستم‌های دیگر یکی پس از دیگری در حال ظهور و قدرتنمایی هستند! از یک طرف آینده NET. و مایکروسافت خیلی روشن به نظر نمی‌رسید (البته تاریک هم نبود) و از طرف دیگر زبان Scala تنها زبان Cross-platform و متن بازی بود که هم Strongly-type بود و هم تمام امکانات #C را ارائه می داد (بعداً فهمیدم امکاناتش خیلی فراتر از #C است). بهترین زمان برای تصمیم‌گیری در خصوص مهاجرت بود. هرچند با این تصمیم ممکن بود وضعیت کنونی که حاصل نزدیک ۱۰ سال کار در یک پلتفرم خاص بود به طور کامل دگرگون شود. ترسناک بود، ولی هیجان انگیر!

این بار شروع به خواندن یک کتاب کردم و خیلی بیشتر از قبل از Scala خوشم آمد. Scala به خوبی پیوند بین Functional Programming و Object Oriented را برقرار کرده بود. روز به روز به تعداد وب سایت‌هایی که جوابگوی تعداد کاربران میلیونی هستند اضافه می‌شود و روش‌های سنتی دیگر قادر به پاسخگویی نیستند وScala به طور واضح و کامل در حال پر کردن این خلاء است و من هم سعی کردم جزئی از آن بشوم.

مضاف بر اینکه Scala روی JVM اجرا می‌شود و این یعنی به حقیقت پیوستن آرزوی دیرینه اجرای برنامه‌هایم بر روی پلتفرم‌های دیگر! یک کور از خدا چه می‌خواهد!؟ تصمیم را گرفتم و بزرگترین مهاجرت کاری‌ام تا کنون را انجام دادم.

انقلاب بزرگ دوم؛ مهاجرت به لینوکس و اکو سیستم متن باز

اما این بار موضوع مهاجرت فقط یک زبان برنامه‌نویسی  و پلتفرم نبود. من از زمانی که توزیع Red Hat لینوکس متن باز بود با لینوکس آشنا بودم اما پلتفرم کاری‌ام به من اجازه نمی‌داد که از یک توزیع لینوکس به عنوان سیستم‌عامل همیشگی‌ و کاری‌ام استفاده کنم. حالا که قرار بود زبان Scala زبان اصلی کار من بشوم می‌توانستم این مهاجرت را هم انجام دهم. به این ترتیب در مهر ۱۳۹۲ یک لینوکس اوبونتو به عنوان سیستم عامل اصلی کامپیوترم (و نه فقط یک سسیستم عامل در کنار ویندوز) نصب کردم که تا امروز باقی مانده. هر چند به خاطر وجود پروژه‌های قبلی مجبور شدم با یک Virtual Box یک ویندوز هم داشته باشم اما ویندوز به سیستم عامل دوم مجازی و آن هم فقط برای یک پروژه که باقی مانده تبدیل شد.

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

اما بعضی اوقات به دلایل بسیار، باید یک نرم‌افزار را به صورت سفارشی و از پایه تولید کرد. برای نرم‌افزارهای سفارشی و مخصوصاً پروژه‌های کارآفرینی که قرار است یک ایده تبدیل به عمل بشود، زبان و پلتفرم Scala اولین انتخاب من است. هنوز در اوایل کار هستم ولی دیگر همان راحتی که در #C داشتم را در Scala نیز دارم.

وضعیت کاری هم دشوار شده و بخاطر این تغییر مجبورم فشار بیشتری را تحمل کنم. ولی از این وضعیت بی نهایت راضی هستم و سعی می‌کنم تجربیاتم را در همین وب سایت به اشتراک بگذارم.

برای دریافت خدمات من و یا همکاری با هم می‌توانید از طریق صفحه همکاری اطلاعات بیشتری کسب کنید.

7 دیدگاه برای «سرگذشت»

  1. امیر جان سلام
    من واقعا از خوندنت لذت میبرم و خیلی چیزا ازت یاد میگیرم
    تو این پست یه صحبتی از آینده ی دات نت شده بود که خیلی روشن به نظر نمیرسه.
    خیلی دوست دارم نظرت رو راجع به دات نت کر که کراس پلتفرم شده بدونم. آیا واقعا هنوز آینده ی دات نت روشن نیست یا اینکه مایکروسافت تونسته در کنار رقبا موقعیت خودش رو حفظ کنه؟
    ممنون از اینکه مینویسی

    1. سلام هادی جان،

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

      هر چند بازار دات نت (توی Enterprise) هنوز خوبه و هنوز خیلی‌ها ازش استفاده میکنن ولی هنوز هم مثل همیشه تقریبا هیچ استارت آپ درست و حسابی بین المللی نمی‌تونی پیدا کنی که از دات نت استفاده کنه. تنها مثال خوبش همون Stackoverflow هست. در عوض بی نهایت استارت آپ هست که از ابزارهای دیگه استفاده میکنن. اگر آدمی باشی که به استارت آپ‌ها و فضاهای هیجانی و پر تنش و نو آور علاقه داشته باشی و اگر بخوایی کارهای خفنی کنی که نیاز به قدرت پردازش بالا داشته باشه یا نیاز به ذخیره سازی داده زیاد داشته باشه (که این روزها تقریبا دیگه اجتناب نا پذیر شده)؛ هنوز هم دات نت انتخاب خوبی نیست و بعید می‌دونم در آینده نزدیک هم باشه.

      از طرفی مثلا برای کارهای ساده که نیازی به امکانات خاصی نداره مثلا چارچوب Django رو نگاه کن. در مدت شاید کمتر از یک روز می‌تونی یه ایده ساده رو باهاش به طور کامل و با کیفیت بالا پیاده سازی کنی بدون اینکه نیاز باشه یک ریال پول خرج کنی و یا از نرم‌افزار دزدی و کرکی استفاده کنی و در نهایت هم می‌تونی روی سبک ترین سرورهای دنیا کارت رو deploy کنی و لذت ببری. قطعا کامیونیتی Django خیلی خیلی بزرگتر از اون بخشی از کامیونیتی دات نت هست که برنامه‌هاش رو برای سرورهای لینوکسی می‌نویسه یا از Visual Studio و Windows استفاده نمیکنه. پس از پشتیبانی و کمک و اعتماد به نفس بالاتری برخوردار میشی.

      1. سلام
        ممنون از اینکه وقت میزاری
        درست میفرمایید
        تقریبا در همه ی موارد باهاتون موافقم فقط چیزی که هست الان دات نت روی مک و لینوکس هم اجرا میشه و تو سال ۲۰۱۶ هم اس کیو ال سرور نسخه ی لینوکسیش میاد.
        اما درست میگید شما. موقعی این پلتفرم گسترش پیدا میکنه که مایکروسافت بخواد در غیر اینصورت محدودیت وجود داره. اینو کاملا قبول دارم
        باز هم تشکر

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *