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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

خلاصه

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

15 دیدگاه برای «چه زمانی اسکالا مناسب نیست و چه زمانی مناسبه؟»

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

    1. ممنون از لطفتون.

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

      اما در مورد سیستمی بودن گو کاملا مخالفم. گو برای دوران وب ساخته شده و به همین خاطر رقیب Rust به حساب نمیاد. وقتی مطلب‌هایی که در مورد مقایسه گو و Rust هست رو جستجو کنید مرتب به این قضیه بر خورد میکنید که گو بر خلاف Rust یه زبون سیستمی نیست. اگر گو Runtime و Garbage Collector نداشت می‌تونست سیستمی تر به حساب بیاد. در حالی که Rust به نظر من هنر روز کامپایلر هست و تونسته به معنای واقعی کنترل ماشین رو در اختیار انسان قرار بده بدون اینکه حقایق و مسائل سطح پایین رو پنهان کنه. خیلی دوست دارم که پیشرفت بیشتر Rust رو ببینم اما متاسفانه به خاطر همون مشکلاتی که گفتم ممکنه از Rust هم استقبال خیلی زیادی نشه.

      در مورد الکسیر هم مثل ارلنگ چون type-safe نیست من باهاش راحت نیستم. علاوه بر این احساس میکنم یه مقدار زیادی Pure هستند و کاربردهاشون ویژه و خاص هست. در عوض با زبونی مثل اسکالا همه کار میشه کرد و من اینطوری راحتترم.

      در کل موافقم که شاید یه مقدار به گو با دید بدی نگاه میکنم ولی دلایلم رو براش توضیح دادم 😉

      1. مشخصا نمیشه گفت یک زبان بهتر از زبان دیگری هست. اغلب اوقات قضیه سیب یا پرتغال پیش میاد. گولنگ برای «مبتدی» ها طراحی نشده، برای «ساده‌پسند»ها طراحی شده. فرق هست بین این دوتا.

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

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

        این مورد رو کاملا قبول دارم که rust در برابر گولنگ، گزینه‌ی خیلی بهتری هست که بخواد به عنوان یک «زبان سیستمی» معرفی بشه.

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

        ارلنگ برای سیستم‌های fault tolerant طراحی شد. بقیه قابلیت‌هاش مثل همروندی‌، در واقع سایدافکت این هدفی بود که داشتن. در حال حاضر سیستم‌های ارلنگ با پایداری ۹۹٫۹۹۹۹۹۹۹% (“nine nines”) اونم در گستره کاری اریکسون، پایدارترین سیستم‌های نرم افزاری تاریخ دنیای کامپیوتر رو به اسم خودشون ثبت کردن. هیچ زبان دیگه‌ای — چه استاتیک، و چه داینامیک — نتونسته همچین ادعایی بکنه!

        استفاده از تایپ سیستم‌های پیشرفته مثل اسکالا یا هسکل، در گروه برنامه نویسی defensive جای میگیره، در حالی که ارلنگ فلسفه‌اش let it crash هست که کاملا برعکس این قضیه است؛ اگه باهاش کار کرده باشید متوجه میشید که قضیه اش چیه و چجوری مشکلات رو هندل میکنه. دو دیدگاه کاملا متفاوت هستن.

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

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

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

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

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

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

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

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

          1. من از بالا داشتم میخوندم برگه رو و اومدم پایین، و این بین دو تا کامنت هم خوندم، و روی دکمه‌ی «پاسخ دادن» مربوط به اون کامنت که صحبت از ارلنگ و الیکسیر هم شده بود زدم. برای همین حرف این دو هم پیش اومد. قصدم اصلا مقایسه نبود، فقط یه متن توضیحی بود. ارلنگ و اسکالا دو موجود کاملا متفاوت هستند.
            من قبول دارم این حرف تون روکه بسته به شرایط زبان، جامعه‌ی کاربری ممکنه تا حد زیادی از نظر سواد برنامه نویسی بالاتر از بقیه باشه (فرضا جامعه‌ی js در برابر اسکالا!). و این رو هم *واقعا* قبول دارم و بهش رسیدم که یه تیم کوچیک اما خبره، بهتر از یه تیم بزرگ اما کم سواد هست. تنها قسمتی که باهاتون موافق نیستم اینه که طبق نظر شما اگر کسی فکر میکنه اسکالا سخته، به احتمالا زیاد برنامه نویس باهوشی نیست. من برعکس شما فکر میکنم تقصیر خود اسکالا هم هست که پیچیدست. افراد خیلی باهوش و خوش نامی سراغ دارم که همین نظر رو راجع به اسکالا دارن.
            البته اصولا هم این مدل بحث ها نتیجه ای ندارن هیچوقت. بیشتر برای آشنا شدن با نقطه نظرات همدیگه هست، نه اثبات درست و غلط بودن شون…

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

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

    1. صابر جان ممنون از کامنتت.

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

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

      این رو هم بگم که توی کار تیمی ماجرا فرق میکنه و برای برآورده کردن هدف جمعی من حاضرم با بدترین تکنولوژی‌ها هم کار کنم و کردم.

  3. برای آدم بی تجربه ای مثل من شنیدن تجربیات کسایی که توی مسیر خودم هستن و مسیری رو که من الان دارم میرم رو قبلا پیمودن خیلی شیرینه .
    ممنون از اشتراک تجربیاتتون.

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

    مهندس شما هم به نظر عاشق هستیا!؟ :دی

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

  4. الان یعنی مثلاً کسی بره با زبان Racket برنامه بنویسه خیلی خاصه و باهوش؟ یا صرفاً برای ارضای ذهنی خودش گیک بازی و ربطی به هوش نداره.

    چون برای من هوش این معنی رو میده که ببینم نیازمندی بازار و دنیا کدوم سمته پس من همون سمت رو تقویت کنم.

    یک کد رو میشه با #C نوشت، با Go نوشت، با Rust نوشت، با Scala نوشت و در نهایت برای قشنگی من اون رو با Rust بنویسم و در نهایت ببینم که اگر با دات نت بود خیلی بهتر بود …

    اینکه با چه تکنولوژی یا زبانی بنویسیم مهم نیست! مهم کیفیت و مهندسی که پشت اون هست و محصولی که ارائه میشه.

    پا نوشت:
    https://racket-lang.org

    1. اسکالا رو نمیشه با رکت مقایسه کرد. اول باید ببینی اسکالا نسبت به زبون‌های ساده‌تر چه امکانی میده بعد این پست رو بخونی باید اول در مورد قدرت صحبت کنیم که اصلا قدرت توی زبان یعنی چی. منظور فقط باحال بودن نیست! فعلا اسکالا توی صنعت در وسعت زیاد داره استفاده میشه و مساله ما سر انتقادهایی هست که از اسکالا میشه. من صحبت از یه زبونه نا شناخته نکردم که هیچ کس نمیشناسه! یه بررسی کن ببین چه جاهایی دارن از اسکالا استفاده میکنن و برای چی؟ من می‌تونم برات یه مثال بیارم که اگر یک کاری رو بخوایی با سی شارپ یا جاوا انجام بدی خیلی خیلی خیلی سختتر از اینه که با اسکالا انجام بشه. حتی کار به جایی میکشه که احساس میکنی نسبت سی شارپ یا جاوا به اسکالا شده نسبت اسمبلی به سی. نمونه خیلی ساده‌ش اینه که یک اپ وب رو بخوایی ۱۰۰ درصد Async کار کنی، از صفر تا صد.

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

      پیشنهاد میکنم حتما این پست رو بخونی که نوشته پل گراهام هست؛ پل گراهام آدم خیلی بزرگیه اگر نمی‌شناسی در موردش تحقیق کن: http://www.paulgraham.com/avg.html

      1. میدونید مشکل تعصبه؛
        مطمئناً همین الان میشه کل یک Web Application و با دات نت بصورت کامل Async نوشت، یا نمیدونم با Go نوشت!

        اینکه مثلاً من چون حالا Go زبان خوبی هست و برای Concurrency ابزارهای مناسبی در اختیار من قرار میده ولی برای پروژه مد نظر X میشه همون رو با دات نت ایجاد کرد ( با شاید Performance بهتر چون روش برنامه نویسی بهتری و دنبال کرد ) ولی برای گیک بازی و اینکه بگم من خاصم با Go بنویسم ( که البته باز محصول نهایی مهمه؛ اینکه با چی ساخته شده اصلاً مهم نیست، بقولی کی اهمیت میده؟)

        یا چه مدونم یهو جو گیر شیم بریم کلاً با Erlang … ( اصلاً هم به کاربرد زبان ها و تکنولوژی ها نگاه نکنیم )

        در کل یاد گرفتن و کارکردن با یه زبان خاص ربطی اصلاً به هوش نداره چون یادگرفتن یک زبان واقعاً برای یه برنامه نویس معمولی زمان زیادی نمیبره چه برسه به خوبش …

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

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

          ضمنا هوش برنامه نویسی با بقیه هوش ها متفاوت هست هااا! هوش شما در جهت شناخت نیازمندی بازار و جهتِ صحیح خیلی هم خوب و لازم است اما با هوش برنامه نویسی تفاوت دارد. مگر اینکه منظور نویسنده چیز دیگری باشد.

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

پاسخ دادن به علیرضا لغو پاسخ

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