آیا کلوژر ارزش یادگیری داره؟

درود
دوستان کلوژر ارزش یادگیری داره و اینکه اگه داره آیا فریمورک وب براش نوشته شده و کلا برای وب اپلیکیشن چطوره

هر زبان برنامه نویسی ارزش یادگیری داره به شرط دو موضوع:

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

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

کلوژور روی موتور جاواست به نظرم هر فریم فرکی که روی جاوا ران بشه براش مناسب هست حتی اگر براش نوشته نشده باشه در مورد فریم ورک ها و … من دیدم دوستان قبلا در موردش صحبت کردن

5 Likes

LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.
-Eric Steven Raymond

بله. البته بستگی داره منظور شما از فریمورک وب، چی باشه.
کلا توی کلوژر کسی فریمورک نمیسازه و کسی از فریمورک استفاده نمیکنه. لایبرریهایی که لازم داریم رو میذاریم کنار هم و stack خودمون رو ایجاد میکنیم.
برای بک-اند، چندتا گزینه هست که با توجه به نیازتون میتونید یکیشو انتخاب کنید. مثل Pedestal، Aleph و Compojure (که این آخری بیشتر شبیه framework هست)
یه نگاهی به clojure toolbox بندازید. مسلما کامل نیست ولی لیست خوبی داره با دسته‌بندی و قابلیت سرچ.

به تمام اکوسیستم جاوا (وهر زبانی که روی JVM ران میشه) هم دسترسی دارید. به عنوان مثال همین Pedestal درحقیقت یک router هست که داره از Ring (لایبرری جاوا!) استفاده میکنه برای هندل کردن خود ریکوئستها!

از طرف دیگه یه کامپایلر هم داریم به نام ClojureScript که کدهامون رو به JS کامپایل میکنه تا توی بروزر (یا nodejs) ران بشه.
و مثلا میتونید از لایبرری re-frame استفاده کنید برای ساخت front-end به روش react (یه wrapper هست برای react)


بازارکارش مسلما به خوبی python و js نیست چون هرکسی و هرشرکتی سراغ کلوژر نمیره، ولی میشه گفت تمام شغلهایی که برای کلوژر وجود داره، مربوط به کارهای هیجان انگیز میشه. نه صرفا web development ساده.
شرکتهایی که نیازهای خاص و دیتاهای خاص دارن زیاد سراغش میان. مثلا پروژه‌های پزشکی، نقشه‌برداری ماهواره‌ای، شیمی و بازار سرمایه چیزهایی هستن که الآن یادم میاد.

همونطور که گفتم، هرکسی سراغش نمیره پس انتظار شرکتهایی که دنبال نیروی کار کلوژر میگردن هم بالاست! توقع رزومه‌ی خوب و سابقه‌ی کار بالا دارن.
البته اکثرا میگن که «اگه سابقه‌ی کار کلوژر هم ندارید اوکی هست و حتی اگه نیاز باشه بهتون آموزش میدیم!» ولی مثلا نیاز دارن که حداقل ۵سال سابقه‌ی کار با زبانهای دیگه و تکنولوژیهای مختلف رو داشته باشید!


با اجازتون دسته‌بندی این موضوع رو به Clojure تغییر دادم.

3 Likes

از کجا باید شروع کنم پویا جان

یه سوال دیگه چقدر چالش سر راهم هست با کلوژر منظورم اینه که خیلی تفاوت داره با زبان هایی که oopهستند ؟

آره FP هست. ولی شباهت هایی به مثلا روبی هم داره، مثلا Dynamic type هست.


Functional Programming

3 Likes

چندتا کتاب هست که برای شروع مناسبه. احتمالا بهترینشون Clojure for the Brave and True باشه که از وبسایت خودشون به بصورت رایگان در دسترسه.

همونقدر که برای یادگیری هر زبان دیگه‌ای سرراهتون هست. یعنی «درک دیدگاه مخصوص به این زبان»
فقط فرقش اینه که اگه شما از java به javascript مهاجرت کنید، میتونید همچنان به سبک جاوا فکر کنید و توی js کد بزنید و مشکل خاصی هم پیش نمیاد. درحالی که اگه از (تقریبا) هر زبانی به کلوژر مهاجرت کنید، میبینید که تمام ابزارهای مورد علاقتون اینجا وجود نداره و جاش یه سری ابزار عجیب‌غریب هست.
چالش یادگیری کلوژر، اینه که باید به روش کلوزر مسائل رو حل کنید. البته چیز عجیب‌غریبی نیست، مخصوص کلوژر هم نیست. منظورم روش functional programming و روش Lisp هست که این دوتا رو بذارید کنار هم، میشه کلوژر.

شما اگه یه کتاب یا دوره‌ی آموزشی C رو گذرونده باشید، توش چندتا تمرین هست که «فلان چیز را به روش بازگشتی (recursion) بنویسید»
توی کلوژر، همه‌چیز رو با recursion مینویسیم :joy: و میبینیم اونقدری که فکر میکردیم ترسناک نیست و خیلیم باحالتر از loopهاست.
توی کلوژر رسما for loop و while نداریم (داریم ولی نه به اون شکل که باهاش آشنا هستید)

اینا رو گفتم تا توضیحی باشه برای «مسائل رو باید به روش زبانی حل کنیم که جلوی دستمونه. نه چیزی که قبلا بلد بودیم»

خیلی! کدنویسی توی کلوژر در مقایسه با مثلا جاوا، مثل زندگی دنیای مدرن در مقایسه با زنده موندن در جنگهای صلیبیه :joy:

روش زندگی فرق میکنه.
ابزارها فرق میکنن.
همه‌چی ساده‌تره (منظورم simple هست)
اگه شمشیربازی دوست داشته باشید، پلیس دستگیرتون میکنه :joy:
نیاز نیست منابع آب و غذاتون رو یه جا قایم کنید (encapsolation) چون کسی بهشون دست نمیزنه (Immutable data)

چقدر خوب توضیح دادم خداییش :sunglasses: برم یه قهوه واسه خودم درست کنم.


البته توضیح @samdvr، یه خیلی دقیقتر، واضحتر و درعین حال خلاصه‌تر از من بود :smiley:

5 Likes

و باعث میشه توی زبانهای دیگه هم به روش کلوژر فکر کنید! (اریک ریموند گفت «یادگیری لیسپ باعث میشه برنامه‌نویس بهتری بشید، حتی اگه هیچوقت ازش استفاده نکنید.»)

چندروز پیش داشتم توی یه سایت میگشتم از اینایی که تمرین برنامه‌نویسی میدن حل کنید. (فکر کنم codebyte یا همچین اسمی داشت)
یه سوال بود «یه تابع بنویسید که فاکتوریل یه عدد رو حساب کنه»
من اومدم با پایتون حلش کنم و همش فکر میکردم «کاش apply یا reduce داشتم». یه سرچ کردم دیدم پایتون هم reduce داره (یه جورایی) و ازش استفاده کردم که کد رو به روش fp حل کنم و خیلی حال داد. مخصوصا وقتی با جوابهای دیگران مقایسش کردم :sunglasses:
جواب من:

import functools, operator

def FirstFactorial(num):
    return functools.reduce(operator.mul, range (1, (num + 1)))

البته اگه کلوژر بود، میشد:

(defn first-factorial [num]
  (reduce * (range 1 (inc num))))
3 Likes

اینم تا یادم نرفته بگم.
الآن نه ولی چندتا فصل از braveclojure رو که مطالعه کردید،‌ یه سر به LearnXinYmitunes بزنید.
بهترین جا برای آشنایی با یه زبان جدیده. ولی چون کلوژر خیلی متفاوته نسبت به چیزهایی که باهاش آشنایی دارید، در این لحظه شاید این یه کم شما رو گیج کنه.


الآن که نگاه میکنم میبینم نسخه‌ی پایتونی که نوشتم یه مشکلی داره. (گرجه تمام تستها رو رد کرد) اگه 0 بهش بدیم، ارور میده.
خط قبل از return باید یه if بذاریم.

4 Likes