سوال : design pattern GOF در کلوژر

سلام.
من تازه یادگیری کلوژر رو شروع کردم. و دارم لذت میبرم.
ولی یک سوال برام پیش اومده

آیا الگوهای معرفی شده در کتاب های Design Pattern مختص زبان های OOP هست یا این الگوها به قول معروف
paradigm agnostic هستند؟

سوالتونو متوجه نشدم. اگه سوال درمورد GOF هست، این برای oop صادقه و ما توی کلوژر، داریم fp کار میکنیم.

سال ها زیادی درست یا غلط زبانهای imperative غالب بودند و کلی کتاب و الگوی برنامه نویسی بر اساس تجربیاتی که از برنامه نویسی به این زبان ها به دست آمده ایجاد شده.
من فکر میکنم این که پاردایم رو عوض کنیم و functional به قضیه نگاه کنیم باعث نمیشه که تمام این تجربیات رو بزاریم کنار.

یکی از این تجربیات هم کتابهایی مثل همین Design Pattern هستند.

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

1 Like

من نه در زمینه oop و نه در زمینه fp نمیتونم اظهار نظر بکنم . چون هنوز دارم یاد میگیرم
دو نکته

  1. اینکه به نظرم بگیم در زبان های فانکشنال دیفالت رو رعایت کنیم و باعث میشه کد تمیز قابل نگهداری و قابل تغییر باشه یه کم ایده آل به نظر میرسه.
  2. کسایی که تو دنیا فانکشنال کد میزنن عموما برنامه نویسان نخبه هستند. اما با رویکردی که الان ایجاد شده و یه آدمی مثل من با تجربه برنامه نویسی کم هم شروع میکنه به یادگیری برنامه نویسی تابعی به نظرم کم کم نیاز پیدا میشه به توسعه best practice ها و Design Pattern .

کلا پارادایم فانکشنال، از نظر من منطقیتر از بقیه‌ی پارادایمهاست و البته نزدیکتر به منطق ریاضی کلوژر یه مقدار خیلی کمی با بقیه‌ی زبانهای فانکشنال فرق میکنه، ولی اون هم فکر میکنم به خاطر ذات lisp بودنش باشه.

“Lisp … made me aware that software could be close to executable mathematics.”
— L. Peter Deutsch


برای یادگیری هر زبانی، بخش اعظم کار اینه که توی اون زبان کد بزنید و مسائل رو باهاش حل کنید.
و برای یادگیری best practice علاوه بر مطالعه‌ی منابع یادگیریش (مثلا کتابها) نیاز هست تا سورس‌کدهایی که نوشته شده رو هم مطالعه کنید.
البته من پیشنهاد میکنم اگه امکانش هست ویدیوها (talkها)ی کلوژر در یوتوب رو ببینید.

FP یک سری پترن های خودشو داره کتاب GOF مخصوص جاوا و OOP طراحی شده
خیلی از این پترن ها به دلیل کمبود قدرت بیان در جاوا نوشته شده و در FP قضیه کلا فرق میکنه

1 Like

یه نگاه به این تاپیک و ویدیوی داخلش بندازید. فکر میکنم مفید باشه.

1 Like

درود خدمت سام عزیز امید وارم حالت خوب باشه.

آیا کتابی یا منابعی مناسب برای یادگیری کلی در مورد پترن های فانکشیونال پروگرمینگ مدنظر دارید که مطالعه کنیم ؟

تشکر

من زیاد لیسپ و کلوژر نمی‌دونم دو کتاب لیسپ خوب میشناسم SICP و land of lisp

برای fp با static type کتاب
Haskell from first principles
و functional programming in scala

و functional scala with cats میتونید آنلاین مطالعه کنید

3 Likes

کتاب sicp رو میتونید از اینجا به صورت آنلاین مطالعه کنید یا از اینجا به فرمت epub بگیرید (یا clone کنید و خودتون بسازیدش) لینک ورژن pdf هم زیر همون صفحه هست.
کتاب خیلی خوبیه و زیاد تعریفشو شنیدم ولی خودم نخوندمش.
من کتاب Paradigms of Artificial Intelligence Programming رو خوندم ولی تمومش نکردم. توی reviewهای goodreads دیدم که یه نفر از sicp تعریف میکرد و میگفت بهتره. اونجا باهاش آشنا شدم.
البته land of lisp هم خیلی کتاب خوبیه. حیف که رایگان نیست. یا باید ۴۵۰هزارتومن پیاده شیم یا از راههای غیر مشروع دانلود کنیم.

درکل پیشنهاد میکنم یه زبون فانکشنال انتخاب کنید و از روی ریسورسها و سورسهای همون زبان یاد بگیرید. (ترجیها کلوژر رو انتخاب کنید که من خوشحال بشم :slight_smile: )

تو open course های دانشگاه mit کورس زیر براساس کتاب sicp هست.

نکته مهمی که داره اینه که این درس جز درس های اولی هست که یک دانشجوی undergraduate باید پاس کنه.
اگه به لیست درس های تو لینک زیر نگاه کنین جالبه.

برای آشنایی با برنامه نویسی پایتون میگن و بلافاصله درس بالا رو باید پاس کنن که لیسپ هست

1 Like

این کتاب سالها در MIT در ترم اول computer science تدریس می شد

4 Likes

(نوشته های ارسال شده توسط نویسنده،بصورت خودکار در 24 ساعت حذف می شود مگر اینکه پرچم شود)

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

چشم تشکر حتما

مشکل اینکه تنوع کتاب زیاد و همینطور خواندن با زبان ضعیف سخت به همین منظور پرسیدم که دوستان چیزی که تایید می کنند یا خوندن و پیشنهاد بدن

خب اگه بخوام دقیقتر بگم، پیشنهاد میکنم کلوژر یاد بگیرید. مزایای زیادی داره علاوه بر فانکشنال بودن.
برای شروع همونطور که بارها گفته شده بهتره با clojure for brave and true شروع کنید و من پیشنهاد میکنم دومین کتابی که مطالعه میکنید joy of clojure باشه و احتمالا بعدش (یا همزمان) برید سراغ clojure applied. (اولی رو به صورت رایگان میتونید بخونید ولی دوتای دیگه پولی هستن و تهیشون خیلی سخت و گرونه ولی راههای رایگان هم وجود داره. بهم پیام بدید!)

یادگیری کلوژر اصلا سخت نیست و زمان زیادی هم نمیبره. یه کم عادت کردن به مسائل functional هست که شاید براتون سخت باشه (اگه از بکگراند oop اومده باشید) و شاید سینتکس lisp اولش براتون عجیب باشه.
ولی قول میدم بعد از یادگرفتن کلوژر، یه برنامه نویس بهتر بشید! این حرف اریک ریموند هست! (درمورد lisp گفته و کلوژر تا اینجا بهترین لیسپه!)

1 Like

واقعیت امر اینکه تو برنامه هام هست ولی بیشتر الان می خوام روی همین elixir خودمو تقویت کنم و بیشتر کتاب هایی رو از فانکشیونال بخونم که بتونم بهتر توش کد بزنم . ولی تو برنامه بلند مدت حتما کلوژر هست یک بار هم شروع کردم متاسفانه مشکلاتی پیش اومد و ادامه ندادم

2 Likes

https://www.quora.com/What-did-Alan-Kay-mean-by-Lisp-is-the-greatest-single-programming-language-ever-designed

1 Like