چرا تصمیم گرفتم Clojure را یاد بگیرم (و تدریس کنم).

در سال 2017 شروع به یادگیری بیشتر در مورد جهان برنامه نویسی تابعی کردم. این پارادایم در حال افزایش بود و بیشتر زبان های برنامه نویسی شی گرا ویژگی های بیشتری را با الهام از این پارادایم اضافه می کردند، از جمله زبانی که من بیشتر از آن استفاده می کردم: جاوا.
پس از انتشار JDK 8 در مارس 2014، شنیدن برنامهنویسان جاوا با استفاده از عباراتی مانند: برنامهنویسی تابعی، رایج شد. جریان ها، اختیاری، نقشه، نقشه مسطحو غیره. اما بسیاری از اطرافیان من هنوز این ویژگی های جدید را نادیده می گرفتند و اعتراف می کنم، مدتی طول کشید تا آنها را بپذیرم. ایده ها بسیار جالب به نظر می رسیدند، اما عملی کردن آنها دشوارتر از آن چیزی بود که انتظار داشتم.
پس از آزمون و خطای بسیار، تصمیم گرفتم عمیق تر به مفاهیم بپردازم. کتاب تفکر کارکردی به من کمک کرد اولین قدم هایم را در مسیر درست بردارم.
به موازات آن، تصمیم گرفتم به جای تلاش برای اعمال بخشی از پارادایم تابعی در یک زبان شی گرا، یک زبان برنامه نویسی تابعی را یاد بگیرم. پس از انجام تحقیقات فراوان، یادگیری علم را انتخاب کردم. این واقعیت که یک زبان کاربردی ناب و تغییرناپذیر است توجه من را به خود جلب کرد. همچنین بر روی آن متمرکز شده است برنامه های وب توسعه و تا آن زمان هیچ راه حلی برای توسعه صفحات وب که دوست داشته باشم پیدا نکرده بودم.
پس از گذراندن کل راهنمای مقدماتی زبان سنجد و خواندن کتاب سنجد در عمل، از قبل احساس راحتی در توسعه داشتم. برنامه های وب در این پارادایم من آنقدر Elm را دوست داشتم که پروژه ای را برای آموزش برنامه نویسی به مبتدیان با استفاده از این زبان شروع کردم و اولین کلاس ها را در وب سایت elm.dev.br (به زبان پرتغالی برزیل) در دسترس قرار دادم.
اما یک مشکل جدی وجود داشت که هنوز باید با آن روبرو می شدم: Elm زبانی است که برای آن طراحی شده است برنامه های وب توسعه و برای آن بسیار خوب عمل می کند، اما من به دنبال یک راه حل با هدف کلی بودم که بتوان از آن نیز استفاده کرد باطن توسعه. بنابراین دوباره شروع به شکار زبان دیگری کردم.
Elm یک زبان تایپ ایستا است که از Haskell الهام گرفته شده است. گام طبیعی استفاده از Elm بر روی آن خواهد بود پیشانی و Haskell در باطن. و این چیزی است که من سعی کردم انجام دهم. من با کمی سختی خواندم به شما یک Haskell برای خیر عالی بیاموزید! کتاب (به صورت رایگان در اینجا موجود است) و چیزهای جالب زیادی یاد گرفت. اما ایجاد یک کامل باطن ثابت شد که استفاده از Haskell بیش از آن چیزی است که می توانستم بجوم. بنابراین تصمیم گرفتم به دنبال گزینه های جایگزین باشم …
در تمام این فرآیند کلمه Lisp مدام به ذهنم خطور می کرد! هر از گاهی با ویدیویی برخورد میکردم که فردی با نفوذ در جامعه در مورد آن صحبت میکرد (مانند این ویدیو یا این توئیت توسط جان کارمک، بنیانگذار نرم افزار id). احساس عرفانی داشت. و این واقعیت که Nubank Clojure را پذیرفت، یک مطالعه موردی بسیار واقعی و عملی در مورد استفاده از گویش Lisp در اینجا در برزیل به ارمغان آورد.
تا آن زمان مطالعه آن را به تعویق انداختم زیرا زبان های تایپ ایستا را در اولویت قرار می دادم و معروف ترین گویش های Lisp زبان های پویا هستند. اما در اوایل سال 2021 بالاخره تصمیم گرفتم به آن فرصت بدهم. زبان Clojure را انتخاب کردم و شروع به خواندن کتاب Getting Clojure کردم. برخلاف مطالعات هسکل، من موفق شدم این کتاب را فقط در چند روز بخوانم! در همان زمان، کلاس های Clojure را در Alura (یک مدرسه برنامه نویسی آنلاین محبوب در برزیل) شروع کردم که به من کمک کرد تا نحوه برنامه نویسی به این زبان را به صورت عملی ببینم. ترکیب خوبی بود: در کتاب مفاهیم زبان را عمیق تر یاد گرفتم و در دوره این مفاهیم را مرور کردم و قسمت های کاربردی تر را یاد گرفتم.
ویژگی های کلیدی Clojure
Lisp یک زبان برنامه نویسی نیست، بلکه خانواده ای از زبان ها با تعداد زیادی زبان است لهجه ها. معروف ترین گویش ها عبارتند از Common Lisp، Clojure، Scheme و Racket. بنابراین بعد از اینکه تصمیم گرفتم لیسپ را یاد بگیرم، مجبور شدم یکی از لهجه های آن را انتخاب کنم.
Clojure به دو دلیل برای من متمایز بود:
- از ماشین مجازی جاوا استفاده میکند و قابلیت همکاری با برنامههای جاوا را امکانپذیر میکند (که همانطور که در ابتدای مقاله گفتم، زبانی است که من معمولاً از آن استفاده میکنم. باطن).
- عمدتاً از پارادایم عملکردی استفاده می کند. برخی از گویشهای Lisp (مانند Common Lisp) چندپارادایمی هستند، اما از آنجایی که قصد من این بود که به دنیای برنامهنویسی تابعی عمیقتر بروم، منطقی به نظر میرسد که لهجهای را اتخاذ کنم که اول کاربردی.
تجربه برنامه نویسی در Clojure کاملاً رهایی بخش بود. تمرین TDD همراه با REPL Driven Development (تکنیک کاملاً گسترده در جامعه Clojure) باعث می شود بازخورد حلقه خیلی سریع این واقعیت که Clojure یک زبان پویا است نیز به آن کمک می کند.
یکی دیگر از ویژگی های Clojure این است که یک نجس زبان، یعنی می توانیم داشته باشیم اثرات جانبی هروقت. مزیت اصلی این کار این است که یادگیری زبان را آسانتر میکند (اگرچه انبوهی از مشکلات دیگر را به همراه دارد که در زبانهای نابتری مانند Elm یا Haskell رخ نمیدهند).
اما اگرچه این زبان ناپاک است، اما یک سری اقدامات خوب را تشویق می کند که به طور قابل توجهی مشکلات احتمالی این رویکرد را کاهش می دهد.
شروع کار با Clojure
Clojure ممکن است در ابتدا ترسناک باشد، اما پس از چند ساعت به نحو آن عادت می کنید و در واقع یادگیری آن بسیار آسان است. به همین دلیل است که من نیز این زبان را برای به اشتراک گذاشتن اصول اولیه با توسعه دهندگان دیگر انتخاب کردم برنامه نویسی کاربردی.
اگر کتاب مورد علاقه شماست، توصیه می کنم با Getting Clojure شروع کنید، که همانطور که قبلاً گفتم، راهی عالی برای درک اصول اساسی پشت Clojure است. اما اگر به دنبال یک گزینه رایگان هستید، ممکن است با نسخه آنلاین کتاب Clojure for Brave and True شروع کنید. گزینه دیگری که بیشتر بر پایههای پارادایم متمرکز است و به زبانهایی غیر از Clojure میپردازد، کتاب تفکر عملکردی، نوشته نیل فورد است.
من یک دوره 10 ساعته در زمینه مقدمه برنامه نویسی کاربردی با Clojure با پرداخت اختیاری ایجاد کردم (بله، در صورت تمایل می توانید به صورت رایگان ثبت نام کنید!). اما در حال حاضر فقط به زبان مادری من در دسترس است: پرتغالی برزیل. 😉
و شما، پارادایم مورد علاقه شما چیست؟ آیا برنامه نویسی را با استفاده از پارادایم تابعی امتحان کرده اید؟ مشکلات اصلی شما چه بود؟ تجربیات خود را در نظرات به اشتراک بگذارید!
آیا این متن را دوست داشتید؟ مقالات دیگر من را در: https://segunda.tech/tags/english بررسی کنید و من را دنبال کنید توییتر.