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

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

چند تا از سوال‌های مطرح شده توی این نظر سنجی در مورد تکنولوژی هست که خوشبختانه توی فایل اطلاعات منتشر شده اومده ولی مشکلش این هست که مقدار هر فیلد Comma Separated هست و نمیشه به راحتی توی لیبره یا اکسل از روش یه نمودار خوب درست کرد مثلا یک نفر ممکنه سه یا چهارتا زبون رو انتخاب کرده باشه. واسه همین من یه برنامه ساده با اسکالا نوشتم که این فرمت رو بخونه و هر زبان یا تکنولوژی رو به همراه تعداد تکرارش توی خروجی درج کنه و البته توی گیت‌هاب هم منتشرش کردم.

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

و حالا این هم چندتا آمار باحال که با استفاده از این برنامه درست شده:

زبان‌های برنامه‌نویسی مورد استفاده شما در پروژه‌ها کدامند؟

iran_programming_languages_stat

به جز زبان‌های فعلی‌تان، دوست دارید با چه زبان برنامه ای نویسی کار کنید؟

iran_programming_languages_interested

دیتابیس‌های مورد استفاده؟

iranian_db

سیستم عامل رومیزی شما کدام است؟

iranian_os

سیستم عامل سرور مورد علاقه شما

iranian_os_server

در چه محیطی برنامه نویسی می‌کنید

iranian_ideاینها آماری بودند که رسم نمودار ازشون بدون استفاده از این برنامه سخت بود.

ابزارهای استفاده شده برای تهیه این پست:

  1. Scala
  2. Git
  3. LibreOffice Calc
  4. Gimp

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

خلاصه

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

دعوت به همکاری از برنامه‌نویسان حرفه‌ای اسکالا

ما توی شرکت مدرن پل (Modern Pal) به یک برنامه‌نویس حرفه‌ای اسکالا برای بخش Backend نیاز داریم.

درباره شرکت

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

درباره تیم Backend

خوشبختانه تقریبا در شروع راه هستیم و افراد جدید میتونن در تصیمات اساسی مشارکت داشته باشن و راحتتر توی تیم جا بیفتند. تیم Backend طوری مدیریت میشه که Junior ترین فرد گروه هم حق نظر دادن داره و شدیدا از ایده‌های خوب استقبال میکنیم. «فرهنگ» برای ما خیلی مهمه تا بتونیم تیم رو به همین شکل حفظ کنیم و بدون صرف انرژی بیهوده برای بحث‌های سلیقه‌ای، با مشارکت جمعی کار رو به سرعت جلو ببریم و رضایت همه رو کسب کنیم. از هم دیگه چیز یاد میگیریم و خوره تکنولوژی هستیم و به کیفیت کارمون خیلی اهمیت میدیم. خلاصه همین که داریم با اسکالا کار میکنیم خیلی چیزها رو نشون میده 😉

درباره تکنولوژی‌های مورد استفاده

از اونجایی که برای UI هم تیم‌های جداگانه‌ای وجود داره، تمرکز ما روی ‌Backend هست. تکنلوژی‌های مهمی که در حال حاضر ازشون استفاده میکنیم اینها هستند:

  • Linux
  • Scala
  • Play Framework
  • Slick
  • Specs2
  • ReactiveMongo
  • Postgres
  • MongoDB

در آینده نزدیک از این تکنولوژی‌ها هم به طور مستقیم استفاده خواهیم کرد:

  • Akka
  • Cassandra
  • Spark
  • و احتمالا خیلی چیزهای باحال دیگه

درضمن برای تمام قسمت‌های نرم‌افزار تست می‌نویسیم (کمتر Unit Test و بیشتر Functional Test) و Code Coverage بالای ۸۰٪ داریم.

لطفا در صورتی که شرایط و علاقه دارید رزومه خودتون رو به همراه اطلاعات زیر برای آدرس jobs@modernpal.com و a.karimi@modernpal.com ارسال کنید:

  • آدرس پروفایل Linkedin
  • آدرس پروفایل Github
  • در صورتی که Twitter یا وبلاگ یا هر ابزار انتشاراتی دیگه‌ای دارید که توش از مسائل فنی صحبت میکنید، اون رو هم ارسال کنید

یه استارت آپ، یه کتاب صوتی و درباره تبلیغ این کنار

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

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

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

و یه موضوع بی ربط: در مورد آگهی این کنار؛ می‌خوام امتحان کنم ببینم همچین وبلاگی میتونه هزینه ناچیز هاستینگ خودش رو از طریق یه تبلیغ ساده در بیاره یا نه!

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

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

یه ایده جالب این آدم این بوده که کلا هر کاری که بیشتر از ۹۰ ثانیه طول میکشیده رو تبدیل به اسکریپت میکرده.

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

نکات فنی این موضوع رو میتونید توی پست انگلیسیم بخونید.

روی پروژه‌های متن باز کار کنید تا یه کار خوب گیرتون بیاد

کار کردن روی پروژه‌های متن باز به طور مستقیم درآمد یا سودی نداره ولی به طور غیر مستقیم پر از سود و درآمده.

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

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

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

پس تا میتونید توی پروژه‌های متن باز مشارکت کنید یا کارهای خودتون که امکانش هست رو به شکل متن باز ارائه بدید و این کارتون رو عمومی کنید و براش تبلیغ کنید. مطمئنا سودش خیلی بشتر از نگرانی بابت کپی شدن کدها و این مسائل هست.

مهاجرت به آرچ

arch_pixelهفته قبل یکی از دوستان و همکاران بیمار (Geek) اعلام کرد که می‌خواد رو لپ تاپ اپل خودش آرچ بریزه. از اونجایی که من هم کم بیمار نیستم یه دفعه زد به سرم که آرچ رو هم امتحان کنم و این نظر من در موردشه؛

نصب

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

کلی چیز جدید در مورد توزیع‌های لینوکس و این که چطور کار میکنن یاد گرفتم.

اگر کارت شبکه وایرلستون با نسخه لایو آرچ به صورت خودکار شناخته نشد زیاد خودتون رو اذیت نکنید. یه کابل شبکه وصل کنید و ادامه بدید بعد از نصب می‌تونید راحتتر راه اندازیش کنید.

Pacman

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

به نظر من کل آرچ خلاصه شده توی Pacman که البته ارزشش رو هم داره.

محیط‌های دسکتاپ (Desktop)

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

واسه همین من از بین محیطهای دسکتاپ Gnome، KDE و Xfce رو نصب کرد تا ببینم کدوم بهتره.

Xfce

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

چون قبلا LXDE رو دیده بودم دیگه اون رو نصب نکردم، تقریبا تو مایه‌های Xfce هست فقط بازم سبکتره.

Gnome

نسخه ۳ گنوم به نظر اصلا جالب نیست. بدترین ویژگیش اینه که از فضا خیلی بد استفاده کرده در حالی که ادعا میکنه مناسب برای تبلت هست. یه نوار که ۸۰ درصدش بیخودیه اون بالا همیشه هست. وقتی یه برنامه رو Full-screen کنی یه نوار بیخود دیگه اضافه میشه که فقط اسم برنامه توشه، یه نوار دیگه برای منو هم هست. کل اینها شاید نزدیک ۲۰٪ صفحه رو میگیره که واقعا تو مخه. برعکس Unity که واقعا عالی از فضا استفاده میکرد.

برای هر کاری باید یه پلاگین نصب کرد که یا دیگه ساپورت نمیشه یا باگ داره. ظاهرش رو دوست دارم اما بقیه چیزاش به دلم نشست.

KDE

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

اما اصلا Stable نبود. وقتی سیستم برای مثلا ۱۵ دقیقه بیکار میموند بعد از لاگین دوباره، هر چند ثانیه یکبار هنگ میکرد.

حالا نمی‌دونم کاملا اوکی شده یا نه ولی بعد از اینکه بسته xf86-video-ati رو حذف کردم فعلا انگار درست شده و مشکلی ندارم.

یکی از مسائل دیگه اینه که مثلا Variety روی KDE درست کار نمیکنه. میشه یه کارایی کرد ولی بعضی وقتا قاطی میکنه و دوباره تصویر پیشفرش دسکتاپ رو نشون میده.

نتیجه

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

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

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

ترافیک لحظه‌ای روی گوگل مپ

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

google_map_tehran_traffic

نکته اینجاست که گوگل چطور می‌تونه ترافیک یه شهر که هیچ دسترسی بهش نداره رو به دست بیاره؟ کاری که شهرداری همین شهر به راحتی و برای کل شهر نمی‌تونه انجام بده.

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

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

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

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

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

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

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

 

دوره آموزشی رایگان توسعه REST API با Play Framework نسخه Java

rayan_free_courseشرکت رایان هم افزا داره یه دوره رایگان آموزشی با زبان Java و چارچوب Play و Spring برگزار میکنه. فرصت خوبی برای کسانی هست که با زبان Java آشنا هستند و می‌خوان یه پیشرفت اساسی توی این زبان و چارچوب‌های مدرن داشته باشن.

مدرس دوره هم دوست خوبم سعید زرین فام هست.

برای دریافت اطلاعات بیشتر کد QR رو اسکن یا به اینجا مراجعه کنید.