اندر باب سیستم توزیع بن کتاب نمایشگاه کتاب ۹۵

امسال هم مثل پارسال فروش بن دانشجویی از طریق سیستمی که با Scala و MongoDB پیاده کرده بودم انجام شد. البته کلی کار جدید و قسمت‌های دیگه مثل بن‌های اساتید و مهد کودک و … هم بهش اضافه شد و یکی از دوستام هم کمکم کرد و بالاخره طلسم تک نفری بودن پروژه شکسته شد. از همه اینها مهمتر نحوه پرداخت بود که برای اولین بار به جای درگاه پرداخت آنلاین یا همون IPG از طریق نرم‌افزار آپ انجام شد.

توی شبکه‌های اجتماعی و جاهای دیگه دیدم که خیلی از مردم ناراحت بودن و با اطمینان کامل از رد و بدل شدن پول کلان بین آسان پرداخت با مسئولان برگذاری نمایشگاه و همچنین قراردادهای بزرگ با تولید کننده‌های گوشی تلفن همراه مثل سامسونگ خبر می‌دادن! نمی‌دونم شاید پشت پرده خبری بوده که واقعا ما بی خبریم (هر چند احتمالش از احتمال ارسال آدم به مریخ توسط ایران تا ۲۴ ساعت آینده کمتره) ولی این اتفاقا منو یاد اون برنامه‌استعداد یابی که از یکی از شبکه‌های فاسد و خانمان بر انداز فارسی زبان بیگانه بخش شد (و می‌دونم که همتون قشنگ نشستید دیدینش یا حداقل قسمت‌های مهمش رو خبر دارید) و باعث شد مردم برای گرفتن حقشون! از هر راه ممکن برای اعتراض استفاده کنن تا شاید اتفاقات پشت پرده رو بشه و فلان و بهمان کرد…

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

طبیعی هست که مثل هر سال در دقیقه نود میان و از ما کارهای غیر ممکن میخوان. من هم که دارم سال به سال به بی نظمی و بی خیالی بیشتر عادت میکنم و ریسک پذیریم رفته بالا، امسال هم این کار رو توی دقیقه نود قبول کردم. ولی ایندفعه از دفعه قبل زمان خیلی کمتری داشتیم و تازه بدتر هم شد چون دو روز مونده به شروع فروش بن نمی‌دونم چه اتفاقی افتاد که ساعت ۱۱ شب گفتن صبح ساعت ۸ جلسه‌ست با آسان پرداخت برای اضافه کردن بن مجازی و این چیزها. که البته به شدت منو ناراحت کرد و حسابی قاطی کردم ولی بالاخره از روی اجبار توی جلسه حاضر شدم تا همه چیز رو ببرم رو هوا و برم ادامه کار رو سریعتر انجام بدم تا کار برای پس فردای اون روز آماده باشه. خیلی دوست داشتم که اگر شرایط مهیا شد توی جلسه به باعث و بانی این کار فحش‌های اساسی بدم و خلاصه یه دعوای اساسی بکنیم و بیاییم بیرون.

توی جلسه مطرح شد که علاوه بر اضافه شدن امکان خرید بن مجازی، پرداخت سهم دانشجو هم به جای IPG از طریق نرم‌افزار موبایل آپ باشه! یعنی ما بعد از رسوندن کاربر به مرحله خرید یه راهنما نشونش میدم و بهش میگیم آپ رو نصب کن و فلان کار رو بکن. بعد آپ از ما استعلام میگره که آیا این کاربر ثبت نام کرده یا نه و بعد اجازه پرداخت بهش میده. وقتی تراکنش کامل شد دوباره به ما خبر میده که خرید انجام شد. البته این وسط یه سری جزئیات برای امنیت و اطمینان و اینها هم هست.

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

از نظر فنی هم نمی‌شد هر دو روش پرداخت IPG و آسان پرداخت رو با هم داشته باشیم. خلاصه نماینده آسان پرداخت هم گفت هر طور که خودتون مایلید در نهایت اگر نمی‌خوایید که هیچی دیگه. بعد یه لحظه من یاد اتفاقات پارسال اتفادم!

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

من تو جلسه گفتم این تنها راه مطمئنی هست که جلوی اینطور دزدی‌ها رو میگیره. یعنی اگر کسی بخواد ۵۰۰ تا ثبت نام بکنه باید  آپ رو برای ۵۰۰ تا سیم کارت نصب کنه و البته اون سیم کارت به درستی اعتبارسنجی و قابل ردیابی میشه چون خرید سیم کارت بدون نام یه کم سخت شده (حداقل برای ما که سخته نمیدونم برای دزدها هم به اندازه ما سخت میگیرن یا نه؟). از طرفی تنها دستگاه هوشمندی که از هر دستگاه دیگه‌ای به انسان نزدیک‌تره موبایل هوشمند هست و این می‌تونست یه راه برای بیشتر سیستماتیک کردن احراز هویت باشه.

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

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

توی جلسه تیم مسئول بن دانش آموزی هم حضور داشت که به هیچ عنوان زیر بار این قضیه نرفت. ولی ما برای بقیه بن‌ها از آپ استفاده کردیم.

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

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

و برای حسن ختام برنامه یه ماجرای آموزنده از همین بانک شهر میگم؛

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

کاری نداریم که مهندس‌هایی که توی جلسه بودن صورت جلسه‌ای که همین مدیر عزیز دستور داده بود رو به خاطر بی احترامی که بهشون کرده بود امضاء نکردن! ولی همون شرکت پیمانکاری که این عزیز داشت به اعتبار اونها حرف میزد، نتونستن به یک وب سرویس REST فوق العاده ساده ما متصل بشن و یه سری اطلاعات رو توی پنل بانکشون نمایش بدن تا همه چیز آنلاین و در لحظه باشه تا دانشجویان بیچاره کمتر اذیت بشن. حالا تصور کنید کل سیستم توزیع بن رو اونها مینوشتن.

کاش کمتر حرف پوچ میزدیم و بیشتر عمل میکردیم.

 

چه زمانی اسکالا مناسب نیست و چه زمانی مناسبه؟

امکان نداره چندتا برنامه‌نویس که با اسکالا آشنا هستند دور هم باشن و صحبت‌های منفی در مورد اسکالا نشه. مثلا اینکه اسکالا برای فلان موقعیت خوب نیست، زبونه سختیه، یاد گیریش ممکنه ارزشش رو نداشته باشه، وقتی جاوا ۸ لامبدا رو اضافه کرده بهتر نیست نریم سراغ یه زبون جدید؟ و از این قبیل…

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

قبل از هرچیزی باید بگم که اضافه شدن لامبدا به جاوا ۸ فقط یک قدم برای نزدیک‌تر کردن جاوا به اسکالا بوده و خیلی امکانات دیگه هست که فعلا توی جاوا پشتیبانی نمیشه و اگر با اسکالا کار کرده باشید، باز هم کار با زبون جاوا براتون سخته. امکاناتی مثل Type-safety واقعی، Immutability، Pattern Matching و … چیزهایی هستند که توی دنیای امروز تبدیل به یه نیاز حیاتی شدن. شاید یه مقداری از اینها رو بشه توی جاوا شبیه‌سازی کرد ولی کار اضافه‌تر میبره و از اون مهمتر هنوز توی فرهنگ زبون جاوا جا نیفتاده. در حالی که اینها جزو فرهنگ اسکالاست و برنامه‌نویس اسکالایی وجود نداره که اینها رو ندونه.

خوشبختانه دانشگاه‌های برتر دنیا مثل دانشگاه‌های ایران نیستند و واقعا علم کاربردی تولید میکنن. بحث کامپایلرها و زبان‌ها هم مستثنا نیست و پیشرفت‌های خیلی زیادی توی ۴۰ سال اخیر داشتند. این پیشرفت‌ها توی بعضی از زبون‌های برنامه‌نویسی مثل اسکالا و راست (Rust) نمود پیدا کرده و بعضی از زبون‌های جدید مثل گو تقریبا این ۴۰ سال رو نا دیده گرفتن، در عوض سازنده‌هاش بیشتر از هر چیزی روی مولد بودن و کارایی بیشتر برنامه‌نویس و راه افتادن سریع برنامه‌نویس‌های مبتدی تاکید کردن. به عبارت دیگه تمرکزشون روی غیر حرفه‌ای‌هاست که البته بیشتر جامعه رو تشکیل میدن.

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

خلاصه اینکه؛ اسکالا قدرتمندترین زبونی هست که توی بازار موجوده و میشه باهاش پروژه‌های واقعی و کاربردی اجرا کرد. تقریبا هیچ ویژگی وجود نداره که توی یه زبون برنامه‌نویسی باشه و توی اسکالا وجود نداشته باشه یا نشه شبیه‌سازیش کرد.

متاسفانه یا خوشبختانه، فقط افرادی که از هوش خوبی برخوردار هستند می‌تونن ابزارهای پیچیده و قدرتمند رو یاد بگیرن و ازشون استفاده کنن، ولی اگر این هوش زیاد باشه می‌تونه توی یه سری شرایط خطر ناک بشه. به قول معروف، قدرت، مسئولیت میاره.

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

خواه نخواه تعداد برنامه‌نویس‌های حرفه‌ای و باهوش نسبت به کل برنامه‌نویس‌ها خیلی خیلی کمتره (همونطور که نسبت برنامه‌نویس‌ها به کل آدمها خیلی کمه). وقتی تیم بزرگ باشه (مقدار بزرگ بودن بسته به کشور و شرایط فرق میکنه) احتمال وجود آدمهای غیر حرفه‌ای بیشتره و اینجا جایی هست که استفاده از اسکالا می‌تونه خطرناک باشه. توی این تیم‌ها، زبون‌هایی مثل جاوا یا گو میتونه انتخاب خیلی بهتری باشه.

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

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

یه نکته دیگه پیش‌بینی زمانی هست که کل تیم توسعه یا افراد کلیدی، پروژه رو ترک میکنن و به طور کل نفر یا نفرات جدیدی باید کار رو ادامه بدن. این مورد توی ایران خیلی دور از انتظار نیست چون تیم‌ها خیلی بزرگ نیستن. اسکالا توی این شرایط، هم می‌تونه مشکل ساز بشه هم کارگشا باشه! مشکل ساز این جهت که پیدا کردن برنامه‌نویس اسکالا سخت‌تره و اگر هم پیدا بشه ممکنه قوانین و دست خط برنامه‌نویس قبلی رو قبول نداشته باشه. از طرفی می‌تونه کارگشا باشه از این نظر که آدمهای گیک و دنبال دردسر رو به خودش جذب میکنه؛ شاید پیدا کردن یه برنامه‌نویس دنبال دردسر و باهوش که با اسکالا کد میزنه آسونتر از پیدا کردن معادل جاوا کارش باشه.

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

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

اما از نظر حرفه‌ای اسکالا می‌تونه چه تاثیری توی زندگی شغلی یه برنامه‌نویس بذاره؟

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

من یه تجربه جالب از این موضوع دارم؛ زمانی که روی پلتفرم دات نت کار می‌کردم، سعی میکردم بهترین کار ممکن رو ارائه بدم، همیشه به روز بودم و از جدیدترین متدهای طراحی و پیاده‌سازی روز دنیا استفاده می‌کردم. همینطور خیلی سعی میکردم فعالیت‌های اجتماعی داشته باشم و کارهام رو به معرض نمایش بذارم. ولی استقبال خوبی از کارهام به خصوص از طرف آدم‌های حرفه‌ای نمی‌شد. هیچ وقت نمی‌شد جایی برای گرفتن پروژه برم و با رقبای داغون که با قیمت پایین و کیفیت خیلی پایین‌تر کار میکردن رو به رو نشم. همیشه لازم بود کلی صحبت کنم و دلیل بیارم تا خودم رو به کارفرما ثابت کنم. سطح کاری کارفرما‌ها و همکارایی که باهاشون کار میکردم خیلی پایین بود و اکثرا «بزن در رویی» و «فقط برای پول» کار میکردن و کارهای بی دوام و معمولا بی فایده انجام میدادن. البته بودن آدمهایی که حرفه‌ای کار میکردن ولی بیشترشون بیش از حد مغرور بودند و خیلی نمی‌شد بهشون نزدیک شد.

بعد از اینکه اومدم روی لینوکس و اسکالا، اوضاع به شدت تغییر کرد! کلا آدمهای سطحی و کمتر حرفه‌ای رو تقریبا نمی‌دیدم. کار سختتر پیدا میشد (البته من کارهای دیگه مثل روبی و پایتون رو هم قبول می‌کردم) ولی وقتی پیدا می‌شد عالی بود. با آدمهایی سر و کار داشتم که اصلا فکر نمیکردم داخل ایران وجود داشته باشن. توی همین دو سال با آدمهایی آشنا شدم که بیشتر از کل ۱۰ سالی که دات نت کار میکردم می‌ارزیدن. آدمهایی رو دیدم که فوق‌العاده حرفه‌ای و دانشمند هستند ولی اصلا غرور ندارن و به راحتی میشه باهاشون صحبت کرد و ازشون چیز یاد گرفت. باحال‌ترین قسمتش این بود که دیگه نیازی نبود خودم رو ثابت کنم؛ یادمه توی یه جلسه که طرفین می‌خواستن مهارت‌های خودشون رو به رخ بکشن همون ابتدای جلسه از من سوال کردن که با چه زبونی کار میکنم، احتمالا اسم اسکالا رو هم نشنیده بودن ولی همین باعث شد، با وجود اشتیاق من برای به چالش کشیده شدن، تا آخر جلسه دیگه هیچ بحث فنی با من نکنن و هرچی میگم بدون سوال و چون و چرا قبول کنن!

خلاصه

  • هر کاری رو با هر زبونی میشه انجام داد ولی فقط برنامه‌نویس‌های خاصی هستند که می‌تونن با هر زبونی کاری که مد نظر شماست انجام بدن، پس انتخاب زبون برنامه‌نویسی و فرهنگی که اون زبون با خودش میاره خیلی مهمه
  • اگر تیم بزرگ دارید از اسکالا استفاده نکنید
  • اگر دنبال آدمهای باهوش هستید و می‌خوایید یه تیم منحصر به فرد بسازید اسکالا انتخاب بهتریه
  • اگر می‌ترسید که برنامه‌نویسهای باهوش شما پروژه رو رها کنن اسکالا انتخاب مناسبی نیست
  • اگر می‌ترسید که برنامه‌نویسهای باهوش شما پروژه رو رها کنن شما روش خوبی رو انتخاب نکردید و به هر حال همیشه با مشکل نیرو درگیر خواهید بود، بهتره به فکر یه راه حل اساسی باشید؛ مثلا شراکت با برنامه‌نویس‌ها
  • استفاده از یه تکنولوژی یا زبون باحال و مدرن باعث جذب آدمهای باهوش میشه
  • اگر برنامه‌نویس هستید و این کار رو واقعا دوست دارید و میخوایید توش پیشرفت کنید، اسکالا می‌تونه یه سرمایه گذاری فوق‌العاده باشه
  • امروز اسکالا یک زبون قدرتمند و باحاله، ممکنه فردا یه چیز دیگه‌ای جای اسکالا رو بگیره. در اون صورت باز هم همین صحبت‌ها مصداق داره فقط کافیه اسم اسکالا رو با اون زبون جایگزین کنید
  • درسته برای کار کردن با اسکالا لازمه از یه حداقل هوشی برخوردار بود ولی این دلیل نمیشه که کسانی که با زبون‌های ساده‌تر کار میکنن هوش کمتری داشته باشن. صحبت اینه که به هر حال آدمهای حرفه‌ای، عاشق و باهوش تعدادشون کمتره و بیشتر جذب چیزهای پیچیده میشن

این خانه از پایبست ویران است

ما توی یه کشور گیک هراس و گیک فراری بده! زندگی میکنیم برای همین توی این وبلاگ باید یه همچین پستی رو ببینید.

نمی‌خوام مثل اکثر مردم فقط سیاه نمایی کنم ولی بعد از کلی سفید نمایی و امیدواری و تلاش برای بهبود اوضاع اطرافم لازم میدونم یه مسائلی رو برای همگونه‌های خودم (کسایی که سبک زندگیشون شبیه منه) بگم. واقعا نمی‌دونم تاثیرش مثبته یا منفی!

موضوع سر پروژه‌های نمایشگاه کتاب هست که از نظر فنی و اجرایی یکی از افتخاراتم هست و توی جشن ۱۰ سالگی لاگ تونستم در مورد تجربیات فنی و اجرایی این پروژه صحبت کنم که البته روی مثبت و سفید قضیه بود. توی این پست میخوام از تجربیات غیر فنی که کاملا منفی و سیاه هست بگم. مخصوصا که کارفرمای این پروژه جونم رو به لبم رسونده.

چندتا نرم‌افزار با آخرین تکنولوژی دنیا ساخته شده، تا به جای اینکه برای اجرا به یه سرور چند ۱۰ میلیون تومانی (یا شاید چند ۱۰۰ میلیون تومانی) نیاز داشته باشه، روی یه سرور که از لپ تاپم ضعیت‌تره اجرا بشه و از همه مهمتر اینکه ۱۰ میلیارد تومان (نه ریال) از تراکنش‌های مالی سازمان مربوطه از طریق این نرم‌افزار انجام شد. حالا این سازمان دولتی حاضر نیست برای پشتیبانی از این سیستم‌ها به اضافه پشتیبانی از دو وب سایت مهمش و همینطور نگهداری سرورهاش و هزار کوفت و زهرمار دیگه، ماهی یک میلیون تومان هزینه کنه!

بعضی از آدمهایی که در مورد زیاد بودن این هزینه تصمیم میگیرن خودشون با بنز C Class و با راننده شخصی رفت و آمد میکنن. حتی چایی که میخورن با بقیه کارمندا فرق داره! هزینه نگهداری این بنز و راننده و … چند برابر مبلغ این قرارداد پشتیبانی هست! دوباره به مبلغ‌ها و آورده‌های این پروژه نگاه کنید.

جالب اینجاست که من هیچ اصراری برای انجام این پروژه نداشتم و بعضی از مدیران رده پایین‌تر داخل این سازمان باعث شدن که این کار رو قبول کنم. کاری نداریم که اولش به من سه تا فرم ساده که جمعا ۳۰ تا فیلد هم نمیشد دادن و گفتن سیستم هیچی بیشتر از این نیست و من قیمت رو بر اساس اون دادم ولی بعدش سیستم تبدیل شد به یه قول بی شاخ و دم! و البته با موفقیت انجام و اجرا شد.

فقط برای یکی از این سیستم‌ها که هر سال با مراجعه کاربران کاملا از کار می‌افتاده و خیلی از امکانات سیستم کنونی رو نداشته، سالی ۳۰ میلیون هزینه میکردن و بهانشون هم این بود که اونها شرکت بودن! شاید دروغ باشه ولی از چند نفر در مورد این شرکت پرسیدم و فهمیدم که این شرکت تنها شامل یه برنامه نویس و یه مدیر بوده. ولی مدیر با نفوذی داشته. مثل همه شرکت‌ها که برای همچین پروژه‌هایی حتی یه نصف آدم رو هم نمیذارن. که طبیعی هم هست!

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

بعد از یه کم بررسی و فکر، به این نتیجه رسیدم که ۸۰ درصد افراد داخل سازمان‌های بزرگ کشور، نیروی مازاد هستند و با هزینه بسیار اندک میشه با یه نرم‌افزار خوب جایگزینشون کرد. نگران از بین رفتن شغل نباشید! این موقعیت‌ها شغل نیستن اینها عین بیکاری هستن. مگه میشه یه زمین فوتبال رو پر از آدمهایی کرد که نه تنها برای برد تیم هیچ تلاشی نمیکنن بلکه ایستادن یه جا و برای هم تیمی‌ها جفت پا میگیرن تا با مخ برن تو زمین؟

بعد از این همه فشار و اذیت و عدم پرداخت حتی یک ریال! تازه بهم خبر دادن که دوستان تصمیم گیرنده و رده بالا با قیمت قرارداد پشتیبانی مشکل دارن :) دوباره به قیمت‌ها و هزینه‌ها و تراکنش‌های این پروژه نگاه کنید!

بالاخره دست از کار کشیدم و اعلام کردم تا قرارداد امضاء نشه و پول ندن کار نمیکنم.

اگر قرارداد امضا بشه و چند برابر این پول رو هم بدن من واقعا دلم نمیخواد این کار رو ادامه بدم. این کار از هر نظر باعث بدبختیه من میشه. مشکل اینجاست که یه نفر توی این موسسه به من اعتماد کرد و از اعتبار خودش برای اجرای این کار مایه گذاشت، تا با یه تکنولوژی عجیب و جدید کار انجام بشه. اگر من این کار رو رها کنم اعتبار اون شخص میره زیر سوال. همین! غیر از این آب از آب تکون نمیخوره. آدما دوباره بر میگردن به همون سیستم سنتی که اتفاقا بهتر هم میشه توش زیرآبی رفت و همه چیز بر میگرده به روال خوشحال گذشته. هر چی باشه ۲۸ سال بوده که همون سیستم برقرار بوده و ما یه دفعه همه چیز رو به هم ریختیم!

یه سوال؛ واقعا از من توقع میره که بمونم ایران و این مسائل رو (حالا به سهم خودم یا هر چی) درست کنم؟ واقعا این انتظار وجود داره؟ شما جای من بودید چیکار میکردید؟

و در نهایت تجربه من اینه که؛ این خانه از پایبست ویران است.

پ.ن: چند روز پیش یه ویدئو دیدم که تاریخ جغرافیایی ایران رو به صورت Timeline روی نقشه نمایش میداد. برای اولین بار دلم برای ایران سوخت! ولی به هر حال من خودم رو «زمینی» میدونم تا «ایرانی». فقط همین یه کم بهم آرامش میده.

به روز رسانی:

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

نمی‌خوام دایی‌جان ناپلئونیش کنم و بگم چون این سیستم از کلاهبرداری ها جلوگیری کرد به صورت سازمان یافته داره باهاش مبارزه میشه. سیستم‌های اداری ما خیلی خیلی خیلی داغون‌تر از این حرفاست که اصلا این موقعیت‌ها رو بفهمه، چه برسه به اینکه به صورت هوشمندانه و از پیش برنامه‌ریزی شده بخواد باهاش مقابله کنه!

به هر حال این گلدون نابود هم بشه تاثیر خاصی توی زندگی من نداره و نخواهد داشت. ولی برای این کشور خیلی تاثیر گذاره.

خلاصه اهمیت مالی موضوع صفره! مسئله اینجاست که این خونه‌ای که از پایبست ویرانه رو باید چیکارش کرد؟

افتتاح وب سایت انگلیسی

بلاخره وب سایت انگلیسیم رو راه اندازی کردم. چون با Jekyll ساخته شده، یه حس گیکی بهم میده و خیلی دوسش دارم. از طرف دیگه خیلی علاقه دارم که بتونم فکرهام و تجربه‌هام رو در سطح بین المللی و با آدمهای کل دنیا در میون بذارم.

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

قبلا هم تجربه سایت انگلیسی داشتم ولی خوب پیش نرفت و ولش کردم اما این‌بار خیلی جدی‌تر میگیرمش و توسعه‌ش میدم. رزومه انگلیسی رو هم اضافه میکنم. قطعا ساختن رزومه با استفاده از Jekyll و به این شکل میشه که؛ اطلاعات توی یه فایل Yaml باشه و صفحه رزومه از روی اون Generate بشه. تم وبسایت هم خیلی ساده‌ست ولی من ازش خوشم میاد و باعث میشه محتوی بیشتر خودش رو نشون بده. شاید روش کار کنم و بهترش کنم یا کلا عوضش کنم.

یه نکته مثبت دیگه‌ش اینه که چون روی Github هاست شده اگر یکی دوست داشته باشه میتونه به راحتی غلط گیری کنه و Pull Request بفرسته. شاید هیچ کس حال و حوصله و همت مشارکت برای اصلاح اشتباهات من رو نداشته باشه ولی همین که امکانش هست، بهم اعتماد به نفس بیشتری میده. از همه مهمتر چشم امیدم به خارجی‌ها خیلی خیلی بیشتر از هموطنا هستش (هر چی باشه جمعیتشون خیلی بیشتره).

این وبلاگ هم مثل قبل ادامه خواهد داشت. شاید به پست‌های اون یکی وبلاگ هم لینک بدم. به نظرم مطالب فنی توی کار ما باید انگلیسی باشه و ترکیب کلمات انگلیسی و فارسی خیلی خوب در نمیاد. به امید روزی که دنبال یه چیزی بگردید و به سایت انگلیسی من برخورد کنید 😀 آرزو بر جوانان عیب نیست.

پی‌نوشت: خوشبختانه از وقتی رفتم توی دنیای متن باز، مرتب با آدمهای قوی‌تر و با ارزش‌تری توی ایران آشنا شدم و قطعا هموطن‌های خیلی عالی هم دور و برمون هست ولی وقتی تعدادشون رو میشمرم به نسبت جمعیت کل آدمهایی که دور و اطرفم هستن (با اینکه خیلی اجتماعی نیستم)، خیلی کم هستن. متاسفانه!

 

چه ابزاری بهتره؟

امروز بعد از ساعت کاری با بچه‌های شرکت راستین تو شبکه داخلی Counter Strike بازی کردیم. خیلی حال داد ولی من یه ایده جالب از این بازی گرفتم.

به نظرم توی این بازی میشه با دوتا استراتژی جلو رفت:

  1. یک سلاح رو که از همه بهتره برداریم و کلا بچسبیم به همون و دیگه درگیر خرید و تعویض و این چیزها نشیم
  2. از انواع سلاح و ابزار استفاده کنیم. مثلا استفاده از نارنجک، Shield و … که در این صورت لازمه حسابی توی تعویض ابزارها و استفاده به موقعه ازشون حرفه‌ای بشیم

قطعا استراتژی اول زودتر جواب میده و آدم سریع راه میفته، از طرفی دومی سختتره ولی اگر توش حرفه‌ای بشیم میتونه خیلی موثرتر و کاراتر باشه. یه مثال میزنم؛ من و یکی از بچه‌ها توی این بازی خیلی بی تجربه هستیم، تا حدی که دوستان میومدن از پشت با چاقو ما رو میکشتن! یه بار من یه Shield برداشتم و هم تیمیم هم پشت سر من اومد تا رسیدم به دشمن، من Shield رو گذاشتم جلوم و به هم تیمی گفتم نارنجک بنداز! خیلی راحت مقاومت کردیم. هر چند هم تیمیم حول شد و رفت جلو و خودش رو به کشتن داد و من هم Shield رو برداشتم تا تیر بزنم که من هم مردم. ولی درس اخلاقی اینجاست؛ با اینکه ما تجربه کمی داشتیم ولی به خاطر داشتن امکانات خوب بیشتر دووم اوردیم و حتی باعث شدیم دشمنمون که خیلی حرفه‌ای بود شوکه بشه!

این حکایت زبان‌های برنامه‌نویسی ساده و پیچیده هست. زبان‌های ساده مثل Go و Python و زبان‌های پیچیده‌تر مثل Scala و Rust. کار با زبان Go یا Python مثل کار با یک سلاح خاصه بدون اجازه خلاقیت و عدم وجود چند راه برای انجام یه ماموریت. اما کار با زبان Scala یا Rust یا هر زبانی که ازش به عنوان یه زبان پیچیده یاد میشه مثل استفاده از چند سلاح و ابزار و وجود چند راه مختلف برای انجام یه مامویت هست. به عبارت دیگه مثل چاقو سوئیسی هستن.

من ترجیح میدم بتونم از امکانات بیشتری برخوردار باشم. اگر قراره توی یه زبان برنامه‌نویسی حرفه‌ای باشم باید امکانات زیادی داشته باشه، هرچند یادگیریش سخت باشه.

نکته: Simple != Easy ؛ ممکنه چیزهایی که ما امروز پیچیده میدونیمشون، بعدها ازشون به عنوان یه چیز ساده (نه الزاما آسون) یاد بشه.

حال و احوال و تغییرات

تغییرات

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

اتفاقات این دو سه ماه

متاسفانه از فرودین هیچ پستی نذاشتم. بدجوری سرم شلوغ بود. خیلی خبرا بود.

اول از همه از اواخر پارسال یه قرارداد شش ماهه با شرکت راستین افزار آریا بستم تا سه روز در هفته حضور فیزیکی توی شرکت داشته باشم که تقریبا دو ماه دیگه ازش مونده. آخرین باری که به این شکل کار کردم یادم نیست! تا اینجا که خیلی جالب بود و درسهای خوبی گرفتم و البته پولش هم خوبه :) ولی هنوز نمیدونم دلم میخواد مثلا برای یه شش ماهه دیگه ادامه بدم یا نه. دلیل این تصمیم این بود که بتونم به صورت خیلی منظم‌تر (سه روز دیگه هفته رو) روی پروژه شخصی خودم کار کنم که البته انقدر کارهای دیگه پیش اومد که نشد مرتب و منظم روش کار کنم.

بعد از ۲۸ سال برگزاری نمایشگاه کتاب تهران، برای اولین بار سیستم ثبت نام ناشران این نمایشگاه به شکل الکترونیکی انجام شد. این یک پروژه یک نفره بود که خوشبختانه انجام شد ولی متاسفانه خانه کتاب و خیلی‌های دیگه همکاری نکردن و کار اونطوری که دوست داشتم نشد. مهمتر از همه ما کار رو کوچکتر از چیزی که بود در نظر گرفته بودیم و بعضی از ناشرا اذیت شدن. از همه مهمتر واقعا از سواد کم کامپیوتری ناشرای محترم کشورمون شدیدا در تعجب هستم!

از طرف دیگه همزمان با راه اندازی سیستم  ثبت نام نمایشگاه کتاب، سیستم بن کتاب رو هم دوباره به شکل یک نفره پیاده سازی و اجرا و راه اندازی کردم. بیشتر از ۲۰۰ هزار نفر از طریق این سیستم ثبت نام کردند (که میشه بیشتر از ۸ میلیارد تومن).

اینکه میگم یک نفره بود، منظورم طراحی و برنامه‌نویسی و نصب و راه اندازی و اینهاست. تقریبا یه تیم سه نفره درگیر پشتیبانی فیزیکی و ایمیلی و این چیزها بودن که واقعا زحمت کشیدن. به هر حال این دوتا سیستم داغونم کرد. مخصوصا که سه روز در هفته رو نداشتم و خلاصه خیلی سخت بود ولی برای اولین بار یاد گرفتم که وقتی آدم یه کاری داره و تلفنش زنگ میخوره میتونه جواب نده! یا بهتر از اون میشه تلفن رو خاموش کرد!!! نکته مهم اینه که بعدش هیچ اتفاق خاصی نمیفته. واقعا درس بزرگی بود.

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

یه خبر مهم دیگه اینکه قراره برای ۱۰ سالگی تهلاگ (Tehlug) (اگر نشه شاید یکی از جلسات معمولی لاگ) یه ارائه کامل داشته باشم از تجربیاتی که برای این دوتا پروژه داشتم. احتمالا طیف مطالبش گسترده باشه. از برنامه‌نویسی و بانک اطلاعات و … تا نگهداری سرور و پاسخگویی به ۵۰۰ درخواست در ثانیه و خوابیدن سرور و … ولی هرچی هست اسکالا نقش پررنگی داره.

چند وقت پیش هم یه لاینس IntelliJ IDEA خریدم. به مناسبت ۲۰مین سالگرد تولد زبان جاوا یه تخفیف خوب داده بودن. با Payment24 پرداخت کردم. در کل شد حدود ۵۰۰ هزار تومن. اولش خیلی خوشحال بودم. بعد که باهاش کار کردم دیدم ساپورتش از Play Framework یه مقداری ضعیفه. از قضا چند روز قبل از اینکه IDEA رو بخرم Scala IDE یه نسخه جدید داده بود که نسبت به نسخه قبلی خیلی بهتر شده بود، پشتیبانیش از Play هم از IDEA کنونی بهتره، هرچند IDEA هر زبان و پلتفرمی که فکرش رو بکنید پشتیبانی میکنه. به هر حال هر کدوم از این ابزارها یه حسن‌هایی دارن و به مرور زمان بهتر هم میشن. واقعا نمیدونم چرا اول نسخه Trialش رو نصب نکردم بعد بخرمش!

فرصت که پیدا میکنم سریال Silicon Valley رو هم دارم میبینم که بسیار بسیار به مذاق ماها خوش میاد :)

Push the Limits

پل گراهام (Paul Graham) سازنده سیستم فروشگاهی است که بعدا توسط یاهو خریداری شد و Yahoo Store نام گرفت. این سیستم فروشگاهی با زبان Lisp نوشته شده است. خود پل گراهام میگوید که Lisp یک زبان عجیب و غریب است ولی برای کاری که میخواستند انجام بدهند مناسب بود و توانستند با استفاده از تکنولوژی که بقیه کمتر از آن استفاده میکردند مزیت رقابتی داشته باشند و در نهایت موفق شوند.

دیوید هاینمیر هانسن زمانی که بر روی نرم‌افزار بیس کمپ کار میکرد شروع به تولید یک چارچوب تحت وب نمود. او از زبانی استفاده کرد که در آن زمان کمتر کسی حتی اسمش را شنیده بود. آن زبان روبی بود و آن چارچوب روبی آن ریلز نام گرفت!

این مثال‌ها را برای این زدم که بگویم بلوغ یک سیستم بستگی به استفاده کنندگان از آن سیستم دارد. من خودم همیشه به این مسئله شک میکنم که شاید بهتر است به جای کار کردن با اسکالا و یا هر چیز کمتر شناخته شده با زبان‌های ساده‌تر و مرسوم تر که توسط بیشتر برنامه نویس‌ها استفاده میشود کار کنم. مثل جاوا، جاوا اسکریپت، پایتون، روبی و … به عبارت دیگر دنباله رو دیگران باشم.

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

هزینه این کار می‌تواند زیاد باشد ولی نتیجه آن بسیار با ارزشتر خواهد بود.

بلوغ اکوسیستم اسکالا یا هر تکنولوژی کمتر شناخته شده دیگر بستگی به خود ما دارد و نیازی نیست منتظر افراد دیگر باشیم تا مسیر را به ما نشان بدهند. تمام افراد شناخته شده و موفق، خودشان مسیرشان را ساختند و منتظر ساخته شدن مسیر نبودند.

تنها نکته مهم این است که به مسیری که مشغول ساختن آن هستیم علاقه و ایمان داشته باشیم و از شکست نترسیم. اگر فقط یک مسیر درست وجود داشت و قرار بود همه از آن مسیر حرکت کنند، نو آوری و خلاقیت و موفقیت و خیلی چیزهای دیگر و در نهایت زندگی اصلا معنی نداشت.

بررسی پتانسیل برگزاری دوره آموزشی اسکالا

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

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

آدرس فرم نظر سنجی: http://goo.gl/forms/tKiVsNCPFv

یک سال پس از مهاجرت به لینوکس

پارسال همین موقع‌ها بود که یک نسخه تمیز از اوبونتو روی لپ تاپم نصب کردم. تفاوت این دفعه این بود که روی پارتیشن اصلی نصبش کردم و قرار بود سیستم عامل اصلی و روزانه‌ام باشد. این نوشته، خلاصه‌ای از تجریبات یک سال گذشته‌ام در پی این مهاجرت است، به مناسبت سالگرد این مهاجرت!

از سال ۱۳۸۲ به طور حرفه‌ای (برای پول درآوردن) برنامه‌نویسی می‌کنم و بیشتر آن روی تکنولوژی‌های مایکروسافت بوده. اگر نگویم تمام ابزارها، بیشتر ابزارهایی که در این چند سال استفاده کردم محصول مایکروسافت بود؛

  • ویندوز به عنوان سیستم عامل
  • آفیس برای کارهای اداری
  • Outlook برای ایمیل و تقویم و …
  • Internet Explorer به عنوان مرورگر!
  • استفاده بیشتر از Bing نسبت به Google برای جستجو!
  • گوشی هوشمند با سیستم عامل ویندوز فون ۷ (Mozart 7)
  • صفحه کلید (ارگونومیک) و ماوس مایکروسافت!!!
  • استفاده از نرم‌افزارهای متن باز دات نتی (حتی برای وبلاگ به جای ورد پرس)
  • Visual Studio برای تولید نرم‌افزار (از طراحی تا پیاده‌سازی)
  • SQL Server برای بانک اطلاعاتی
  • زبان سی شارپ و سکوی دات نت
  • و …

windows-tattooهر کاری که میخواستم انجام بدهم حس بهتری داشتم که با محصولات مایکروسافت باشد. چون مایکروسافت به توسعه دهنده‌ها اهمیت میداد و زبان سی شارپ هم کار آنهاست و در کل جایگزینی خوبی برای سی شارپ نداشتم! از آنجایی که من برنامه نویس هستم بیشتر عمرم را مشغول صحبت کردن با یک زبان برنامه‌نویسی هستم پس اهمیت این موضوع که با چه زبانی کار کنم و اینکه این زبان چه امکاناتی داشته باشد روشن است.

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

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

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

خوشبختانه با اسکالا آشنا شدم. تنها زبان برنامه‌نویسی بود که تمام ویژگی‌های سی شارپ را داشت ولی متن باز بود و روی همه پلتفرم‌ها اجرا می‌شد و با انواع بانک‌های اطلاعاتی و کتابخانه‌ها سازگار بود. اسکالا راه ورود من به دنیای متن باز و لینوکس شد!

dawn-700x300

ولی افتاد مشکل‌ها! حالا باید از صفر تا صد همه کارها را در دنیایی متفاوت انجام می‌دادم. من هم ابزارهای زیر را برای کارهایم انتخاب کردم:

  • اوبونتو به عنوان سیستم عامل
  • لیبره آفیس به جای آفیس مایکروسافت
  • Thunderbird (و پلاگین‌هایش) به جای Outlook
  • ابتدا Chromium و بعدها (به خاطر مشکلی امنیتی) Firefox به جای IE
  • استفاده بیشتر از محصولات گوگل
  • گوشی ویندوز فون ۷ را هنوز داشتم (و دارم ولی دلم یک گوشی اندرویدی می‌خواهد که بتوانم رویش Firefox OS یا Ubuntu Touch نصب کنم) ولی یک تبلت اندرویدی گرفتم و تازه دنیای اپ‌ها به رویم باز شد
  • صفحه کلید فراسو و ماوس A4tech!!!
  • استفاده از ورد پرس و پرستا شاپ و نرم‌افزارهای غیر دات نتی (که تعدادشان خیلی بیشتر از دات نتی‌ها بود)
  • Scala IDE (همان Eclipse) و IntelliJ IDEA و بقیه برای توسعه نرم‌افزار
  • MongoDB، Postgres و MySQL برای بانک اطلاعاتی
  • زبان اسکالا و بعدا روبی و پایتون (در کنار اسکالا) برای برنامه‌نویسی (هنوز اسکالا را به شدت نسبت به بقیه ترجیح می‌دهم)
  • و …

و مشکلاتی که داشتم؛

  • هنوز یک پروژه بر روی دات نت داشتم و با استفاده از Virtual Box یک نسخه ویندوز ۷ با VS روی آن بالا می‌آوردم و با بدبختی روی آن کار میکردم؛ بسیار کند بود و وقتی دکمه Alt را می‌گرفتم منوی Unity باز می‌شد و وسط نوشتن یک کد حساس یک حال اساسی به اعصابم می‌داد.
  • دلم می‌خواست روی پروژه‌ای با زبان اسکالا کار کنم ولی کسی حتی اسمش را هم نشنیده بود!
  • من عادت کرده بودم زبان صحفه کلید را با دست راست و با Alt+Shift سمت راست تغییر دهم ولی به دلیل وجود باگی در Ubuntu آن زمان فقط امکان استفاده از Alt+Shift سمت چپ وجود داشت و من هم هنوز بلد نبودم سیستم را هک کنم (منظور فقط کمی ور رفتن با سیستم است) و هر کلیدی که دوست دارم انتخاب کنم و تصورش را هم نمی‌کردم این باگ به سرعت رفع شود برای همین به ترکیب سمت چپ عادت کردم و هنوز هم از کلیدهای سمت چپ استفاده می‌کنم!
  •  کارت گرافیکم به سختی نصب می‌شد و فن لپ تاپ همیشه روشن بود، نصفی از مشکل بخاطر درایور کارت گرافیک بود و نصف برای تنظیمات و درایور مخصوص DELL
  • از نظر مالی شدیدا به مشکل خورده بودم، پول لازم بودم و پروژه‌ای هم در کار نبود و شرایط به شدت برایم سخت شده بود در حالی که با مشکلات بالا هم سر و کله می‌زدم و همزمان اسکالا هم یاد می‌گرفتم

البته توانستم کم کم مشکلات را حل کنم:

  • سعی کردم واقع بین باشم و وقت بیشتری بر روی پروژه دات نتی صرف کنم (اما نه انقدر واقع بین که لینوکس را پاک کنم و برگردم روی ویندوز مثل آدم کار کنم) پروژه به جای خوبی رسید و تقریبا تحویل شد. هر چند چون پروژه دولتی بود و افراد سازمان عوض شدند پروژه اجرایی نشد.
  • با ور رفتن و مطالعه، هر کاری که می‌خواستم را در Ubuntu انجام میدادم، کارت گرافیک و بقیه مسائل حل شد. برای اکثر کارهای تکراری هم یک Bash Script تهیه میکردم. به این ترتیب سرعت کارهایم بیشتر از زمان ویندوز شده بود و روز به روز احساس راحتی بیشتری می‌کردم.
  • من در دوره‌های شناخت توانایی‌های امیر مهرانی شرکت کرده بودم و یکی از چیزهایی که یاد گرفته بودم این بود که باید روی نقاط قوتم تمرکز کنم تا سریعتر به نتیجه برسم. یکی از راه‌های فهمیدن نقاط قوت نگاه به گذشته و بررسی موقعیت‌هایی است که در آن موفق بودیم. من هم همین کار را کردم و به چند سال قبل دقت کردم و همان کارها را تکرار کردم. رزومه‌ام را تکمیل و با ظاهری جدید بازسازی کردم و شروع به معرفی خودم به اشخاص و شرکت‌های مختلف کردم. بعد از ارسال تقریبا ۲۰ ایمیل، چند موقعیت خیلی خوب پیش آمد. با آدم‌های بسیار حرفه‌ای و جالبی آشنا شدم. کیفیت کارها و سطح آدم‌ها بسیار بالاتر از زمانی بود که روی پلتفرم مایکروسافت کار می‌کردم.

در این یک سال به جز استفاده از ویندوز در یک زمان محدود آن هم در Virtual Box با سرعت بسیار پایین، از هیچ نرم‌افزار غیر قانونی استفاده نکردم؛ چه برای توسعه و چه برای نصب و راه اندازی. و از این بابت به شدت خوشحال هستم.

به نظرم هر وقت یک گیک (از نوع برنامه‌نویس) احساس محدودیت کرد باید سریعا دست به ایجاد تغییر و تحول بزند تا دوباره احساس آزادی کند و گرنه خلاقیت و سر زندگی او کمرنگ می‌شود.

ubuntu-boot-small

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

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

لینوکس برنده شد!

به نظر من حالا لینوکس به طور قطعی و بدون هیچ شکی برنده شد و دیگر نیازی به اثبات و پشتیبانی و جنگ و دفاع از خود ندارد! یک سیستم متن باز که شروعش بدون هیچ پشتوانه مالی بود و اصلا جدی گرفته نمی‌شد و بیشتر جنبه سرگرمی داشت حالا باعث شده شرکتی مثل مایکروسافت به طور کل تغییر جهت دهد و حتی منبع اصلی درآمدش را روی اهداف دیگری قرار دهد.

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

اینکه سکو‌های مایکروسافت در آینده چقدر راه خود را در لینوکس باز می‌کنند هنوز قابل پیشبینی نیست و شاید به این زودی‌ها هم قابل پیشبینی نباشد. تجربه به من نشان داد که متن باز کردن به تنهایی نمی‌تواند باعث مقبولیت یک تکنولوژی شود. برای مثال تا وقتی Entity Framework پشتیبانی کاملی از بانک‌های اطلاعاتی غیر MS SQL نداشته باشد متن باز بودن آن بی معنی است. و از همه اینها مهمتر تا وقتی یک اجتماع از برنامه‌نویسان حرفه‌ای مستقل برای این سکو‌های متن باز شده شکل نگیرد، هیچ حرکت جدیدی صورت نخواهد گرفت.

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

به هر حال امروز لینوکس در زمینه سیستم‌عامل‌های موبایل و سرور بیشترین سهم را دارد که اتفاقا همین دو دسته از سیستم‌عامل‌ها بیشترین بازار را در جهان دارند. به عبارت دیگر لینوکس پیروز شده است!