مصاحبهای با Erik Schierboom که در آن او و Jeremy Walker دربارهی برنامهنویسی تابعی، نگهداری مسیرهای Exercism و تحلیل ایستای پیشروی راهحلهای Exercism گفتوگو میکنند.
سلام Erik. ممنون که در اولین Contributor Spotlight در Exercism شرکت کردید! میخواستیم کارتان را برجسته کنیم، چون حس میکنیم به همهجای Exercism کمک میکنید و از کار در سراسر پروژه بینشهای عالی به دست آوردهاید!
خب، برای آشنایی کمی با پیشینهتان، چطور شد که اولین بار وارد Exercism شدید؟
در سال ۲۰۱۴، یک دورهی برنامهنویسی تابعی گذراندم که زبانش Scala بود. بعد از تمام کردن آن دوره، دنبال منابعی گشتم تا مهارتهایم در Scala را بیشتر تقویت کنم و Exercism را پیدا کردم. طولی نکشید که شیفتهاش شدم و شروع کردم به کار روی مسیرهای زبانهای دیگر در Exercism. چون از نظرهایی که مردم زیر راهحلهایم میگذاشتند خیلی بهره برده بودم، خودم هم شروع کردم به نظر دادن روی راهحلهای مسیر C#. در یک مقطعی از من خواسته شد که نگهدارندهی مسیر C# بشوم و با خوشحالی پذیرفتم. پنج سال بعد، الان مربی مسیرهای C# و F# هستم، نگهدارندهی مسیرهای C#، F# و Scala، و به کار روی مشخصات مسئلههای مشترک میان مسیرها کمک میکنم.
چه خوب. پس خیلی زود، در همان اوایل عمر Exercism، وارد آن شدید. برای کسانی که اطلاعی ندارند، میتوانید توضیح دهید که نگهدارندهی Exercism بودن یعنی چه؟
حتماً. بهطور انتزاعی، نگهدارندهی Exercism مسئول «سلامت» یک مسیر است. در عمل، این میتواند شامل کارهای بسیار زیادی باشد؛ مثل پیادهسازی تمرینهای جدید، بهروزرسانی تمرینهای موجود یا بررسی Pull Requestهای نگهدارندههای دیگر. یک جنبهی مهم دیگر، مرتبکردن درست تمرینهای یک مسیر است تا زبانآموزان بهترین تجربهی یادگیری ممکن را داشته باشند. توجه داشته باشید که نگهدارنده بودن به این معنا نیست که آدم باید در همهی کارهای بالا مشارکت کند؛ کاملاً معتبر است که یک نگهدارنده فقط روی یکی دو کار تمرکز کند.
ممنون! خب، علاوه بر تمرکزتان روی C#، F# و Scala، تقریباً روی همهی مسیرهای زبان در Exercism کار کردهاید. از دید یک زبانآموز، مسیر محبوب خاصی دارید؟
با اینکه از هر مسیری که کار کردم مطالب زیادی یاد گرفتم، مسیر محبوبم بدون شک مسیر Haskell است. نه تنها زبان فوقالعادهای است با کلی مفهوم جالب، بلکه کیفیت مربیهایش هم واقعاً حیرتانگیز بود. از بقیهی محبوبهایم میتوان به مسیرهای Kotlin و F# اشاره کرد؛ Kotlin و F# زبانهایی فوقالعاده خوشطراحی و عملگرا هستند که عاشق برنامهنویسی با آنها هستم.
بله، من هم دربارهی مربیهای Haskell خیلی تعریف میشنوم! حدس میزنم کار کردن روی اینهمه مسیر، بینشهای جالبی دربارهی کدنویسی به شما داده. مورد خاصی بود که از آن تجربه یاد گرفته باشید؟
اوه بله، کلی مورد! کار کردن با طیف گستردهای از زبانها، آدم را با روشهای مختلف حل مسئله آشنا میکند. همهی این روشهای مختلف بهنوعی بر سبک کدنویسی من اثر گذاشتهاند، هرچند احتمالاً زبانهای تابعی بیشترین تأثیر را روی من داشتهاند. الان میبینم که هر جا بتوانم از مفاهیم تابعی استفاده میکنم، حتی در زبانهای غیرتابعی (که آرامآرام ویژگیهای تابعی را در خود جای میدهند).
همچنین یاد گرفتم که هرچند هر زبانی متفاوت است، بسیاری از آنها در واقع کاملاً شبیه هم هستند. در نتیجه، وقتی چند زبان را بلد باشید، یاد گرفتن یک زبان جدید خیلی آسانتر میشود. مثلاً اگر Haskell را بلد باشید، احتمالاً میتوانید نسبتاً سریع F# یا Scala را یاد بگیرید. پس یاد گرفتن زبانهای جدید میتواند یک حرکت خوب شغلی هم باشد، چون میتوانید راحتتر بین زبانها جابهجا شوید.
و در آخر، یاد گرفتم که داشتن مربیهایی که در حین یادگیری یک زبان راهنماییتان کنند، این مسیر را بسیار لذتبخشتر و مؤثرتر میکند.
من هم همین را تجربه کردهام. یاد گرفتن از دیگران واقعاً اثرش را چند برابر میکند! از دید عملی، چطور با همهی راهاندازیهای زبانهای مختلف کنار آمدید؟ من خودم اغلب فکر کردن به یادگیری یک IDE جدید را کمی ترسناک میدانم. در حین کار روی زبانها، به ویرایشگری که میشناختید وفادار ماندید، یا آن را تغییر دادید تا تجربهای اصیلتر به دست آورید؟
برای بعضی زبانها، راهاندازی یک محیط توسعهی جدید قبلاً کمی دردسر داشت، اما امروزه راهاندازی بیشتر زبانها نسبتاً آسان است. بعد سعی میکنم IDEای پیدا کنم که بهترین تجربه را برای آن زبان خاص به من بدهد. چون بهتناوب روی Windows و Mac OS کار میکنم، IDE باید چندسکویی هم باشد. یک نمونهی عالی از IDE چندسکویی Visual Studio Code است که برای مسیرهای Haskell، JavaScript، TypeScript، Elm و Elixir از آن استفاده میکنم. برای مسیرهای دیگر، از یک JetBrains IDE استفاده میکنم: Rider برای C# و F#، IntelliJ IDEA برای Java، Scala و Kotlin، و در آخر RubyMine برای Ruby (توجه: اینها هم IDEهای چندسکویی هستند). همانطور که میبینید، برای گرفتن بهترین تجربه برای هر زبان از چند ویرایشگر استفاده میکنم (هرچند IDEهای JetBrains واضحاً کاملاً شبیه هماند).
نکتهی حرفهای: اگر مشارکتکنندهی اصلی یک پروژهی متنباز هستید، Jetbrains به شما اجازه میدهد برای یک مجوز رایگان متنباز درخواست بدهید!
این خیلی مفید است. ممنون! خب، شما نگهدارندهی C#، F# و Scala هستید. چه چیزی بهطور خاص شما را به این زبانها جذب میکند؟
C# همان موقع که در سال ۲۰۰۲ منتشر شد، بلافاصله زبان محبوبم شد. زبانی خوشطراحی و شیک است با ابزارها و مستندات عالی. این زبان همچنین خیلی سریع تکامل پیدا میکند، یعنی همیشه مطالب جدیدی برای یاد گرفتن وجود دارد! یک مزیت آخر هم این است که روی framework عالی .NET (Core) اجرا میشود.
F# هم عشق از نگاه اول بود. با نحوهی نگارش شیک و مجموعهی غنیای از ویژگیهای (تابعی) زبان، دیدم که میتوانم با کد کمتر کار بیشتری انجام دهم، بهویژه در مدلسازی دامنه. همچنین زبانی بسیار عملگراست، با ویژگیهای شیءگرا و همکنشپذیری عالی با کدهای موجود .NET (روی همان framework .NET (Core) که C# روی آن اجرا میشود اجرا میشود). یک قوت دیگرش ابزارهایش است که از بهترینهای موجود برای زبانهای تابعی به شمار میرود. بهعنوان یک مزیت اضافه، یکی از بهترین معرفیهای زبان از نظر من را هم دارد، در وبسایت fsharpforfunandprofit.
Scala زبانی بود که مرا با برنامهنویسی تابعی آشنا کرد، و به همین دلیل جایگاه ویژهای در قلبم دارد. مثل F#، زبانی عملگراست، به تقریباً همان دلایل. با ادغامش در اکوسیستم Java، واقعاً به همهگیر شدن برنامهنویسی تابعی کمک کرده است.
جالب است که با Scala وارد برنامهنویسی تابعی شدید، مربی F# هستید، اما Haskell را بهترین مسیر میدانید. برای کسی که میخواهد در Exercism شیرجهای در برنامهنویسی تابعی بزند، کدامیک را توصیه میکنید اول امتحان کند؟
سؤال خوبی است! رأی من به F# است، چون به نظرم یاد گرفتنش آسانترین است. این عمدتاً به این خاطر است که زبان F# از آن دو زبان دیگر کمپیچیدهتر است. ابزارها و مستندات عالی F# هم موقع شروع یک مزیت بزرگ است. با این حال، شدیداً توصیه میکنم بعد از تمام کردن مسیر F#، به مسیر Haskell هم بپیوندید، چون Haskell ویژگیهای پیشرفته و فوقالعادهای دارد که F# ندارد.
شما در جریان بخش زیادی از برنامههای ما برای آیندهی Exercism بودهاید. مورد خاصی هست که برای پروژه بهطور خاص هیجانزدهتان کند؟
از میان همهی بهبودهایی که در برنامه است، بیشتر از همه برای تحلیل ایستای راهحلها هیجانزدهام. ایده این است که سیستمی راهاندازی کنیم که بتواند بهطور خودکار روی راهحلهای ارسالشده نظر بگذارد، از طریق تحلیل برنامهنویسیشدهی آن راهحلها برای یافتن مشکلات و پیشنهادهای رایج. این باید کمک بزرگی به مربیها بکند، چون دیگر لازم نیست روی این مشکلات و پیشنهادهای رایج نظر بگذارند و میتوانند روی مسائل جالبتر تمرکز کنند.
اگر علاقهمند بودید، نگاهی به نمونهی من (که تازه شروع شده) از یک تحلیلگر مسیر C# بیندازید؛ این پروژه از .NET Compiler Platform استفاده میکند تا کد C# را بهصورت ایستا تحلیل کند.
بله، تحلیل ایستا تقریباً هیجانانگیزترین مورد برای من هم هست. عالی است که میبینم شما همین حالا یک نمونهی اولیه آماده کردهاید. فکر میکنم بهبودهای سرعتی که تحلیل ایستا به ما میدهد، Exercism را بهطور چشمگیری ارتقا میدهد، و واقعاً برای اینکه چطور میتوانیم آن را گسترش دهیم تا به مبتدیان مطلق کدنویسی یاد بدهیم هیجانزدهام. فکر میکنم واقعاً یک تغییر بنیادین است.
سؤال آخر، پروژهی شخصی یا آرمانی دارید که به دلتان نزدیک باشد و بخواهید یادی از آن بکنید؟
برای من، وارد شدن به Exercism، مشارکت در پایگاه کد متنبازش و مربیگری برای مردم، تجربهای فوقالعاده ارزشمند بوده است. مطالب زیادی یاد گرفتهام، با آدمهای خیلی خوبی آشنا شدهام و حس میکنم توانستهام به افراد زیادی کمک کنم.
دوست دارم مردم را تشویق کنم که ببینند آیا آنها هم میتوانند وارد این کار شوند. اگر زبانی دارید که عاشقش هستید و میخواهید به یادگیری مردم کمک کنید، بهعنوان مربی در Exercism ثبتنام کنید. اگر ترجیح میدهید کد بنویسید، یک پروژهی متنباز انتخاب کنید و مشارکت کنید. قول میدهم خیلی کمتر از آنچه به نظر میرسد ترسناک باشد و از انجامش حس خوبی خواهید داشت!
عالی! ممنون که برای گفتوگو وقت گذاشتید و برای همهی کاری که در Exercism میکنید!