پیشگفتار نویسندهها
داستان کریس
من بیشتر از ۱۵ ساله که برنامهنویسی میکنم، که ۸ سالِش بصورتِ حرفهای بوده. بیشتر با لیسپِ معمولی، کلوژِر، و پایتون کار کردم. تقریباً ۶ سالِ پیش هسکل نظرم رو جلب کرد. هسکل زبانی بود که بهم ثابت کرد تحقیقات در زبانهای برنامهنویسی داره نتیجه میده و پیشرفت میکنه، و اینکه استفاده از زبانی که بر پایهی اون پیشرفتها طراحی شده واقعاً پرفایدهست.
من خطاهایی در کلوژر داشتم که خودم و چندتا کلوژِر نویسِ حرفهای زودتر از ۲ ساعت نمیتونستیم حلشون کنیم؛ اون هم به خاطرِ تایپ سیستمِ دینامیکش بود. یه عالَم تست میکردیم. هر جا میشد printlns
اضافه میکردیم. از توی REPL تکبهتک تابعها رو تست میکردیم. باز هم خیلی طول میکشید. تازه فقط ۲۵۰ خط کدِ کلوژر بود. بالاخره بعد از اینکه درستش کردم، فهمیدم مشکل از وجودِ IFn
تویِ بردارهایکلوژر بود. همین باعث شده بود دادههای بدشکلی از سرمنشاء مشکل به جاهای دیگهای از برنامه پخش بشن. با پایتون و لیسپِ معمولی هم مشکلاتِ مشابهِ این رو داشتم. چنین چیزی با هسکل در طولِ یک دقیقه یا کمتر حل میشه، چون تایپ سیستمِش سریع و دقیق میگه کجا رو ناهماهنگ با بقیهی کد نوشتین.
دلیلی که از هسکل استفاده میکنم اینه که میخوام بدونِ ترس کُدَم رو بازسازی کنم، چون نمیخوام از نگهداریِ کد بَدَم بیاد، تا با خیالِ راحت از کدی که نوشتم باز هم استفاده کنم. چنین مزایایی رو نمیشه بدونِ یاد گرفتنِ یه سری چیزهای جدید بدست آورد. فرقِ بین کسانی که "ریاضیشون خوبه" و "ذهنی" حل میکنن با ریاضیدانهای حرفهای اینه که گروهِ دوم کارِشون رو نشون میدن و از ابزارهایی استفاده میکنن که در حلِ مسئله کمکشون میکنه. وقتی با زبانی که تایپ سیستمِ دینامیک داره کار میکنین، خودتون رو مجبور میکنین که همه کار رو "ذهنی" انجام بدین، که اصلاً لزومی نداره. آدمها حافظهی کاریِ محدودی دارن، من هم ترجیح میدم از هر ابزاری که کمک میکنه سریعتر استدلال کنم و کدِ بهتری بنویسم استفاده کنم.
هسکل زبانِ سختی برای استفاده نیست، بلکه کاملاً برعکسش. من الان مسائلی رو میتونم حل کنم که با کلوژر،لیسپ معمولی، یا پایتون نمیتونستم. تدریسِ خوبِ هسکل کارِ سختیه، و تدریسِ بد هم یاد گرفتنش رو برای خیلیها سخت کرده.
ولی نباید اینطوری باشه.
من دو سالِ گذشته رو به تدریسِ هسکل بصورتِ آنلاین و حضوری گذروندم. در طولِ راه به تمرینها و روشهای تدریسی که مفاهیم مختلف رو بهتر منتقل میکردن دقت کردم و نکتهبرداری کردم. نهایتاً اون نکتهها راهنمای من برای یادگیریِ هسکل شده بودن. من هنوز دارم از طریق تعاملِ حضوری با آدمها در شهرِ آستینِ تکزاس، آنلاین، و کانالِ IRC که برای تازهکارها درست کردم تا در یادگیریِ هسکل کمکشون کنه، تدریسِ بهترِ هسکل رو یاد میگیرم.
این کتاب رو نوشتم چون نمیخوام بقیه هم مثل من تقلا کنن.
داستان جولی
من بهارِ ۲۰۱۴ روی توئیتر با کریس آشنا شدم. هرکسی که کریس رو میشناسه، میدونه که خیلی طول نمیکشه آدم رو ترغیب به یاد گرفتنِ هسکل کنه.
بهش گفتم علاقهای به برنامهنویسی ندارم. گفتم هیچ چیز و هیچ کسی تا حالا نتونسته من رو مجذوب به برنامهنویسی کنه. وقتی فهمید پیشزمینهی زبانشناسی دارم، فکر کرد شاید به خاطرِ پردازشِ زبانِ طبیعی هم که شده هسکل یاد بگیرم. باز هم قانع نشده بودم.
از یه راهِ دیگه وارد شد. حسابی داشت روی مطالبی که برای تدریسِ هسکل داشت وقت میذاشت و میخواست اونها رو ارزیابی، و نوشتههاش رو بهتر کنه. من رو قانع کرد که سعی کنم هسکل رو یاد بگیرم تا تدریس به کسی که چیزی از کدنویسی نمیدونه رو تجربه کنه. من هم با نگرشِ "هر چیزی واسه علم" قبول کردم.
کریس خودش میدونست که آموزشهای هسکلی که موجود بودن، هر کدوم یه مشکلاتی داشتن، ولی فکر نکنم واقعاً درک کرده بود که چقدر برای من غیرقابل تحمل بودن. هر کدوم رو که میدیدم به یه پیشزمینهای از بقیهی زبانهای برنامهنویسی اتکا داشتن و خیلی از لغات رو تعریف نمیکردن، یا خیلی از امکاناتِ هسکل رو با قیاس و آنالوژی (اون هم نه به خوبی) با امکاناتِ بقیهی زبانها توضیح میدادن. من هم اصلاً اون امکانات رو نمیشناختم.
وقتی گفتم هیچ تجربهی برنامهنویسی ندارم، واقعاً جدی گفتم. باید با یادگیریِ اینکه کامپایلر کارش چیه، معنیِ کنترلِ نسخه چیه، چه چیزهایی شاملِ عوارض جانبی میشن، کتابخونه چیه، ماژول چیه، یا اصلاً سرریزِ پشته چیه. این سؤالها رو یک سال پیش (از الان که دارم این رو مینویسم) داشتم؛ این کتاب رو که تموم کنیم و منتشر شه، یه کم بیشتر از دو سال میشه.
نهایتاً وقتی کریس متوجه شد که یه نوع کتابِ جدیدی برای یادگیریِ هسکل لازمه، تصمیم گرفت خودش یکی بنویسه. اون موقع قبول کردم بشم موشِ آزمایشگاهیش. اون فصلها رو برام میفرستاد و من هم از روشون هسکل یاد میگرفتم و بهش بازخورد میدادم. در طولِ پاییز همینطوری "گَهی تند و گهی خسته" پیش رفتیم. بالاخره به این نتیجه رسیدیم که اگه من هم یه کم از مسئولیتِ نویسندگی رو به عهده بگیرم خیلی بهتر پیش میریم. یه فرایندِ نوشتاری درست کردیم که کریس یه فصل رو مینوشت و مشخص میکرد چه مطالبی باید بیان بشن. بعد من بخشهایی که میفهمیدم رو مشخص میکردم و برای بخشهایی که از قبل بلد نبودم یا برام واضح نبودن سؤالهایی رو مطرح میکردم. انقدر به سؤالهام جواب میداد تا میفهمیدم، و من هم بعضی جاها رو اصلاح و مطالبی اضافه میکردم. هردومون تمرینها رو طراحی میکردیم – تمرینهایی که من مینوشتم خیلی سادهتر از تمرینهای کریس بودن، ولی همین تنوع چیزِ خوبی بود.
در طولِ این فرایند، همهش سعی کردم از دیدِ کسی که کاملاً تازهکاره نگاه کنم. یکی از دلایلش این بود که میخواستم درکی که از هسکل داشتم رو عمیقتر کنم، به همین خاطر دائماً مطالبی که فکر میکردم بلدم رو به چالش میکشیدم. دلیلِ دیگهش هم این بود که میخواستم این کتاب برای همه مناسب باشه.
از صحبتهایی که با بقیهی کسانی که در حالِ یاد گرفتنِ هسکل بودن متوجه شدم، اونها هم به خاطر بقیهی آموزشهای هسکل که خونده بودن، قانع شده بودن که هسکل سخت و جادوییه، و بهتره فقط جادوگرها باهاش کار کنن!
اصلاً نباید اینطور باشه.