ویدئو‌های قسمت دوم کارگاه اسکالا در جشن ۱۰ سالگی لاگ

همونطور که قبلا گفته بودم برای جشن ده سالگی لاگ که تابستون پارسال برگذار شد یه کارگاه اسکالا برگذار کردیم.

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

ویدئو اول

ویدئو دوم

ویدئو سوم

ویدئو چهارم

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

ما توی شرکت مدرن پل (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 چک میکنن و از این طریق متوجه میشن که ما توی چه زمینه‌ای مهارت داریم. واقعیت اینه که اگر این عملیات با درنظر گرفتن جزئیات و واقعا هوشمند انجام بشه یکی از بهترین راه‌ها (شاید بهترین راه) برای پیدا کردن توسعه‌دهنده هست.

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

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

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

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

بیشتر کار من با روبی روی 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). پس به هر حال برنامه‌نویس خوب به راحتی گیر نمیاد حالا تکنولوژی هر چی باشه. توی کل دنیا نیروی برنامه‌نویس خوب کمه، وای به حال ایران با این شرایطش!

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

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

نتیجه گیری

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

درآمد بیت کوین از کامیت در پروژه متن باز

سعی کردم ترجمه فارسی برای Active Admin ایجاد کنم و البته آن را به پروژه اصلی Push کردم. دیگر قبول کردن و Merge کردن Push Request ها در پروژه‌های متن باز در عرض چند ساعت برایم یک چیز عجیب نیست و عادی شده. اما این غیر عادی بود که به عنوان جایزه کامیت کردن، بیت کوین هدیه بدهند! هر چند مقدار آن بسیار ناچیز است یعنی ۰٫۰۰۰۰۰۴۰۵ Ƀ که تقریبا می‌شود معادل ۷۶ ریال خودمان ولی این پول احتمالا برکت خاصی دارد 😀

برای اطلاعات بیشتر به این سایت مراجعه کنید: http://tip4commit.com

رزومه آنلاین

بعد از حدود یک سال بالاخره رزومه را به روز رسانی کردم اما این‌بار از نسخه Word و PDF خبری نیست بلکه با HTML آن را بازتولید کردم. نمی‌دانم این تاثیر مثبت یا منفی بر روی مخاطب داشته باشد که رزومه آنلاین باشد، اما منطقی به نظر می‌رسد که در سال ۲۰۱۴ از رزومه‌های آنلاین به جای PDF و … استفاده کرد. فقط مشکل چاپ آن است که با وجود Bootstrap نسخه چاپی آن واقعاً کاربردی است. حتی لینک‌هایی که آدرسش در HTML مشخص نیست را به صفحه اضافه می‌کند (چون نمی‌توان روی Hyperlink چاپی کلیک کرد!).

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