منبع اصلی نوشتار زیر در این لینک قرار دارد

سوال و جواب درباره یادگیری اسکالا

چند وقت پیش آرش در مورد رفرنس دادن به منابع آموزشی اسکالا سوال کرده بود که من هم ارجاع دادمش به مطلب قدیمی‌تر «چطور Scala و Play Framework را یاد میگیرم» و قرار شد ببینه چی کم و کسره و مطرح کنه تا توی وبلاگ جواب بدم که شاید برای بقیه هم کاربرد داشته باشه. فعلا این سوال‌ها رو ارسال کرده تا بعد.

پس اگر«چطور Scala و Play Framework را یاد میگیرم» رو نخوندید اول اونو بخونید، بعد برگردید اینجا.

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

من با اسکالا خیلی راحتم. بعد از گذشت یکی دو ماه از کار کردن مداوم باهاش خیلی حس خوبی پیدا کردم و از اون موقعه دارم از کد زدن با این زبان لذت میبرم. تا حالا، تنها چیزی که روی مخم رفته اینه که اگر فرم‌های Play Framework بیشتر از ۱۸ تا فیلد داشته باشه باید Nested بشه و خلاصه یعنی نمیشه بیشتر از ۱۸ تا فیلد Flat داشت. که البته این مشکل کتابخونه Play هست و میشه از ابزارهای دیگه مثل این استفاده کرد یا از اون بهتر خودمون فرم Play رو گسترش بدیم ولی این دردسرها به Strongly-type بودن چارچوب وب می‌ارزه. بنابراین خود زبان اسکالا تا حالا روی مخم نرفته و از کد زدن باهاش لذت بردم و نمیتونم ایراد خاصی ازش بگیرم.

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

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

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

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

لازم می‌شه به جاوا سرک کشید ؟

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

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

نکته:‌ متاسفانه مدرسه اسکالا با نسخه ۲.۸ اسکالا کار شده و ظاهرا به روز رسانی نشده (نسخه کنونی اسکالا ۲.۱۱ هست). هرچند تقریبا همه مطالب از نسخه ۲.۸ تا ۲.۱۱ مشترک هست ولی ممکنه یه چیزایی فرق کنه. مهمتر از همه اینه که اگر به یه کتابخونه ارجاع بدی باید دقت کنی که کدوم نسخه از کتابخونه مورد نظر با نسخه اسکالات همخونی داره.

می‌شه از کتابخونه‌هاش (جاوا) به راحتی استفاده کرد ؟

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

اگر آره، راهی برای کنترل side-effectها وجود داره ؟

Side-effect معمولا دو حالت داره: ۱) به مرحله‌ای رسیدی که باید Side-effect داشته باشی مثل کار با IO (ورودی و خروجی). ۲) بیخودی داری Side-effect ایجاد میکنی.

خدا رو شکر اکثر کتابخونه‌های جاوا انقدر بالغ و قوی هستند که مورد ۲ رو به حداقل برسونن. برای مورد اول هم که مشکلی نداریم بالاخره توی اسکالا هم یه جایی نیاز به Side-effect داریم فقط باید جاش درست باشه. در بدترین حالت گفتم به راحتی میشه یه Wrapper روش کشید. تازه با وجود Akka میشه کارای واقعا جالبی در خصوص حذف Side-effectها کرد.

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

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

آره دقیقا موقعیت من همینه، مثل سی شارپ، اصلا یادم رفته چطور اسکالا رو یاد گرفتم.

ولی اگه بخوام یه ابزار باحال معرفی کنم، میگم شاید بهترین ابزار برای یادگیری و کار با اسکالا Activator باشه. Activator هم یه ابزار برای ساخت و توسعه برنامه‌ها هست و هم یه ابزار آموزشی خیلی عالیه. کلی نمونه پروژه ساده و پیچیده برای اسکالا هست که به راحتی با Activator UI میتونی بررسیشون کنی. وقتی Activator UI رو اجرا میکنی خودش برات یه سرور راه اندازی میکنه (که اون هم با اسکالا و Play ساخته شده) و یه محیط خیلی زیبا میاره بالا که توش میتونی دنبال پروژه‌های نمونه بگردی، دانلودشون کنی، کدها رو مشاهده کنی، کامپایل و اجراشون کنی، تستشون کنی و حتی کدها رو توی Browser تغییر بدی. اگر پروژه Tutorial داشته باشه میتونی مرحله به مرحله با خوندن مطالب و کد جلو بری. Activator حرف نداره!

نکته خیلی مهم: پیشنهاد میکنم قبل از کار با Activator اول sbt رو یاد بگیری و بفهمی کلا کارش چیه و چطور کار میکنه (نمیخواد خیلی عمیق بشی). فکر کنم همین مدرسه اسکالا برای شروع خوبه.

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

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



برچسب ها :