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

ما توی شرکت مدرن پل (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 رو اسکن یا به اینجا مراجعه کنید.

 

 

آیا Reactive Manifesto واقعا مهمه؟

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

این صحبت تا حدی درسته اما وقتی مثال‌های واقعی رو بررسی کنیم ظاهرا خیلی هم درست نیست!

فیسبوک حدودا ۶۰ هزار سرور در سراسر دنیا داره (که البته تا الان خیلی بیشتر شده) تا بتونه جوابگوی حدود ۲ میلیون کاربر فعالش باشه. پس هر کدوم از سرور‌های فیسبوک به ۳۳ هزار نفر پاسخ می‌دن که خیلی هم عدد بزرگی نیست!

وقتی پاسخویی به ۳۳ هزار نفر روی یه سرور، شاهکار به حساب میاد، اهمیت توجه به مفاهیمی مثل BigData، برنامه‌نویسی همروند و Non-blocking و در کل Reactive Programming مشخص میشه. یادمون نره که Facebook فقط ظاهرش PHP هست ولی باطنش هر چیزی غیر از اون PHP‌ هست که ما میشناسیم؛ فقط بخاطر اینکه بتونه سرعت خیلی بالایی داشته باشه.

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

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

پس اینکه بگیم ما Facebook و Twitter نیستیم دلیل نمیشه که به کارایی بالا توجه نکنیم. البته باید دقت کنیم دلیلی هم نداره که خود پروژه رو فدای مسائل تکنیکی کنیم!

پیشنهاد من اینه که اگر میخواییم توی تولید نرم‌افزار باقی بمونیم، باید مفاهیمی مثل Reactive Manifesto رو جدی بگیریم.

خودآموز اسکالا در Udemy

امروز یه نفری از Udemy به زبان انگلیسی به من ایمیل زد که شما توی وبلاگت لینک دادی به Scala School و ما در Udemy اومدیم یه منبع جدید درست کردیم که میتونه یه مکمل خوب باشه برای یادگیری اسکالا در کنار بقیه منابع. حالا خواسته بود اگر کارشون خوبه، توی این وبلاگ معرفیش کنم. به نظر من که خیلی زحمت کشیدن و خیلی میتونه توی یادگیری اسکالا کمک کنه. در عین مختصر بود خیلی مفید و کاربردیه.

با افتخار، آدرس این منبع هست: https://blog.udemy.com/scala-tutorial-getting-started-with-scala

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

خلاصه که کارشون درسته، دمشون گرم. اگر می‌تونید حمایتشون کنید.

 

مقایسه تجربی روبی، جاوا اسکریپت و اسکالا

بعد از یه مدت قابل توجه کار درست و حسابی و واقعی با سه زبان روبی، جاوا اسکریپت و اسکالا، حالا میتونم به راحتی در موردشون نظر بدم. قطعا این مقایسه فقط از نظر زبان نیست بلکه از نظر اکو سیستم اونهاست.

بیشتر کار من با روبی روی Ruby on Rails، با جاوا اسکریپت روی AngularJS و با اسکالا روی Play Framework بوده.

شروع یادگیری

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

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

کتابخانه‌ها

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

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

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

کامیونیتی

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

به نظر من کامیونیتی اسکالا حرف اول رو میزنه و سطح خیلی خیلی بالایی داره.

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

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

راحتی و سرعت در تولید

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

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

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

جاوا اسکریپت یه چیزی بین اسکالا و روبی هست. نه به اندازه روبی بی دردسر و راحته و نه به اندازه اسکالا زمانبر. اما خیلی چموشه و اذیت میکنه و در کل Stable نیست. وقت میبره تا بفهمی چرا یه چیزی کار کرد یا چرا کار نکرد و وقتی هم سر در اوردی باید همه چیز رو توی ذهنت نگه داری و اگر چند وقت از پروژه دور باشی دوباره به مشکلات تکراری میخوری.

نگهداری و تغییر کد

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

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

تست اتومات و دیباگ

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

چارچوب Rails قوی‌ترین و راحتترین امکانات تست رو داره. فکر همه چیز رو کردن و در کمترین زمان و با بهترین کیفیت میشه برای هر قسمت از برنامه و در هر سطحی (Unit یا Functional) تست نوشت. برای دیباگ هم، هم میشه از امکانات IntelliJ به راحتی استفاده کرد هم Gem ی مثل ByeBug واقعا دیباگینگ رو برای آدم لذت بخش میکنه.

ابزارهای تست جاوا اسکریپت زیاد قوی نیست و مخصوصا دیباگ کردن واقعا عذاب آوره. حتی console.log هم خیلی از جاها کار نمیکنه. AngularJS سعی کرده از اول کار تست رو راحت کنه ولی فقط Unit Testing رو راحت کرده و Integration Test به سختی و به کندی قابل انجام هست و اصلا لذت بخش نیست. دیباگینگ Integration Test توی Angular یکی از رنج آور ترین کارهای عالمه.

تست توی اسکالا به اندازه روبی راحت نیست ولی واقعا لذت بخشه و جزیی از سیستمه. از روز اول هم فکرش شده بوده و چیزی نیست که بعدا به سیستم اضافه شده باشه. IntelliJ هم که مثل بنز ازش پشتیبانی میکنه و دیباگینگش فوق العاده قویه. از اونجایی که اسکالا Static-type هست، وقتی برای یه نرم‌افزار تست بنویسی دیگه کاملا خیالت راحته که همه چیز اونطور که باید پیش میره و نیازی نیست به اندازه زبونهای دینامیک تست‌های واضح و مبرهن بزنی.

 ابزارهای توسعه (IDE)

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

به هر حال ساختن ابزارهای کمکی برای توسعه زبان دینامیک کلا کار سختیه و بعضی جاها غیر ممکنه.

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

سرعت اجرا

واضحه که اسکالا از همه سریعتره و چارچوب Play بالاترین کارایی رو داره. هم از نظر سرعت و از نظر مقیاس پذیری (Capability). حتی چارچوب‌های وب Rust، Go و بقیه زبون‌ها هم توی تست‌هایی که روی لپ تاپ خودم گرفتم نمیتونن به پای Play برسن.

بازار کار

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

وضعیت نیروی انسانی

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

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

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

نتیجه گیری

نتیجه گیری نداریم! با هر زبونی که حال میکنید کد بزنید.