چطور Scala و Play Framework را یاد می‌گیرم

یکی از خوانندگان وبلاگ (رضا) در مورد منابعی که برای یادگیری Scala و Play Framework استفاده کردم سوال کرد. متن زیر بیشتر شبیه یک سفرنامه است تا لیست منابع اما امیدوارم منابعی هم از آن قابل استخراج باشد 🙂

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

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

بعد با کتاب Scala in Action شروع کردم که شاید انتخاب خیلی خوبی نبود ولی خواند تقریباً نیمه اول کتاب کمک خوبی بود و بقیه آن را نخواندم. شاید اگر الان آن را مطالعه کنم خیلی بهتر بفهمم. پیشنهاد می‌کنم اگر بخش‌هایی از این کتاب (یا کتاب مشابه) را متوجه نشدید به راحتی از کنارش عبور کنید و ادامه دهید.

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

مقایسه‌ها خیلی کمک می‌کند. مثلاً در اینجا معادل Extension متدهای مرسوم در #C برای Scala گفته شده.

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

مرحله بعد شروع ساخت یک برنامه واقعی خیلی ساده بود. من نیاز به یک Time-sheet آنلاین داشتم که آنرا با Scala، Play و MongoDB شروع کردم و خیلی چیزها هم یاد گرفتم اما به علت مشغله کاری نیمه کاره رهایش کردم 🙂 باشد که در فرصتی مناسب در Github بارگذاری کرده و ادامه دهم.

برای یادگیری Play Framework هنوز هیچ کتابی نخواندم ولی یک نگاه مختصری به کتاب Play for Scala انداختم و متوجه شدم که تقریباً همان مستندات خود سایت www.playframework.com است. مستندات Play مختصر و مفید هستند. در عرض چند دقیقه اولین برنامه‌تان با Play را می‌نویسید.

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

نکته اینکه؛ با وجود اینکه Play با زبان Scala نوشته شده است فقط برای Scala نیست و یک API مجزا مخصوص Java دارد که من فقط بر روی نسخه Scalaی آن تمرکز دارم.

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

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

برای درک قدرت Community اشاره می‌کنم به یک سوال و جواب وحشتناک جالب در اینجا؛ یک بنده خدایی دنبال یک Wrapper با زبان Scala بر روی کتابخانه‌ای برای کار با Excel است. یک نفر پاسخ می‌دهد که یک API جالب ساخته ولی نمی‌داند رییسش اجازه می‌دهد کد را با دیگران به اشتراک بگذارد یا خیر. در این فاصله یکی از بچه‌ها API مربوطه را پیاده‌سازی کرده و در Github در دسترس عموم قرار می‌دهد.

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

و در نهایت شرکت در برنامه آموزشی Coursera بود که در موردش نوشته بودم و واقعاً‌ بهترین تجربه من در شرکت در یک برنامه‌ آموزشی تا کنون است که یک ساعت از آن می‌ارزد به تمام دوران دانشجویی که داشتم. البته این برنامه آموزشی بیشتر در مورد نحوه طراحی و نوشتن برنامه‌های Reactive است. مطلبی در خصوص Play در این برنامه تدریس نمی‌شود.

به طور خلاصه نه فقط برای Scala بلکه برای هر تکنولوژی دیگر که تازه می‌خواهم یادش بگیرم مراحل زیر را طی می‌کنم (تا کنون جواب خوبی گرفتم)؛

  1. مطالعه خیلی سریع و کلی صفحاتی مثل ویکی پدیا در مورد تکنولوژی مورد نظر
  2. آشنایی با سازندگان یا پشتیبانان تکنولوژی و سوابق کاری ‌آنها
  3. خواندن یک یا چند کتاب خوب (حتی نصفه و نیمه)
  4. دست به کار شدن و ساختن اولین برنامه
  5. عضویت خوراک وبلاگ‌ها و وب‌سایت‌های مرتبط
  6. سوال و شرکت در بحث‌های Community
  7. شرکت در Courseهای آنلاین

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

7 دیدگاه برای «چطور Scala و Play Framework را یاد می‌گیرم»

  1. ممنون که تجربه هاتو به اشتراک می زاری ۲ تا سوال داشتم یکی اینکه از چه ide استفاده می کنی و دیگر این که به نظرت برای یادگیری scala باید قبلش جاوا هم یاد بگیرم ؟

    1. الان از Eclipse استفاده می‌کنم البته یه پک کامل برای اسکالا ساختن اسمش Scala IDE هست (Eclipse-base). می‌تونی از اینجا دانلود کنی.

      IntelliJ IDEA هم عالیه فقط پلاگین‌هایی که برای کار با Play Framework لازم دارم مجانی نیست ولی هر وقت که بتونم حتماً یک نسخه کاملش رو می‌خرم. در کل اگر نخوایی از پلاگین خاصی استفاده کنی IDEA هم به طور کامل Scala رو پشتیبانی می‌کنه و توی بعضی از زمینه‌ها از Eclipse جلوتره. در کل می‌تونی تو IDEA با Play هم کار کنی ولی یه کم محدوده مثلاً توی نسخه رایگانش مثلاً توی View Template ها Auto-complete نداری.

      برای یادگیری هم به نظرم نیازی نیست جاوا بلد باشی. اگر بلد باشی خوبه ولی اگر #C و Java رو با هم بلد باشی بهترین حالته. به نظر من اگر LINQ رو به خوبی بدونی مهاجرت از #C به Scala راحتتر از مهاجرت از Java به Scala هست چون توی #C ما یه کمی Functional Programming داشتیم ولی تو جاوا هیچ خبری نیست.

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

      نتیجه اینکه اگر #C بلدی و می‌خوایی اسکالا یاد بگیری وقتت رو سر Java نگذار و یکراست برو رو اسکالا چیزهای لازم رو همونجا یاد می‌گیری.

  2. من برنامه نویس .Net هست. چند سوال داشتم

    ۱- آیا معادلی برای TPL و async/wait وجود داره

    ۲- خوشحالم چیزی شبیه linq وجود داره.آیا از معادل .net قدرتمندتره

    ۳- آیا جامعه فعالی داری؟

    ۴- آیا اگر برنامه ای بنویسم می تونم یه هاست مناسب پیدا کنم

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

    1. سلام،

      ۱. در زمینه Concurrency و Non-Blocking بسیار بسیار قویتر از دات نت هست. همین الان async/await دات نت فقط در حد کد سی شارپه و هنوز مثلا توی Navigation Propertyهای Entity Framework ساپورت نمیشه (تا چند وقت پیش که اینطوری بود) و تا وقتی توی IO استفاده نشه async/await به هیچ دردی نمی‌خوره. بازم تاکید می‌کنم اگر پشتیبانی Non-blocking و Concurrency توی دات نت ۱ باشه توی اسکالا ۱۰۰ هستش.
      ۲. کلا امکانات Functional اسکالا قوی‌تر هست LINQ یه زیر مجموعه از Functional Programming هستش و اسکالا یه دنیای جدید توی این زمینه برای ما ها که قبلا با LINQ کار کردیم باز می‌کنه.
      ۳. جامعه‌ش از جامعه متن باز دات نت که خیلی خیلی فعالتره ولی نسبت به مثلا NodeJS خیلی کوچیکتره.
      ۴. برای هاستینگ یا باید از سرویس‌هایی مثل OpenStack و Heroku استفاده کنی یا خودت سرور مجازی بگیری و راه اندازی کنی که شامل راه اندازی Mail Server و DNS و بقیه چیزها می‌شه (اگر CPanel نصب کنی اینها کاری نداره ولی خود CPanel ماهی ۵۰ هزار تومن هزینه لایسنسشه. Virtualmin هم کمک می کنه) ولی به هر حال باید یه دانش خوبی از Linux و Server Administration داشته باشی. در کل اولش سخته ولی اگر یاد بگیری می‌تونی همه کارها رو مکانیزه کنی (خیلی بیشتر از ویندوز همه چیز مکانیزه می‌شه)

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

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

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

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *