Uploaded avatar of iHiD

حوار مع Erik Schierboom

@iHiD
منذ أكثر من 7 سنوات

مقابلة مع Erik Schierboom يناقش فيها هو وJeremy Walker البرمجة الوظيفية، وصيانة مسارات Exercism، والتحليل الساكن المرتقب لحلول Exercism.

مرحبًا يا Erik. شكرًا لمشاركتك في أول عدد من تسليط الضوء على مساهمي Exercism! أردنا أن نسلّط الضوء على عملك لأننا نشعر أنك تساهم في كل جزء من Exercism، ولديك رؤى رائعة اكتسبتها من العمل في المشروع بمجمله!

ولنبدأ ببعض الخلفية: كيف انخرطت في Exercism لأول مرة؟

في عام 2014، درست دورة في البرمجة الوظيفية كانت تستخدم Scala كلغة لها. بعد أن أنهيت الدورة، بحثت عن مصادر تطوّر مهاراتي في Scala أكثر، فوجدت Exercism. ولم يمضِ وقت طويل حتى صرت مفتونًا بها، وبدأت أتعلم مسارات لغات أخرى على Exercism أيضًا. وبعد أن استفدت كثيرًا من التعليقات التي يتركها الناس على حلولي، بدأت أعلّق على الحلول في مسار C#. وفي مرحلة ما، طُلب مني أن أتولى صيانة مسار C#، فرحّبت بذلك. وبعد خمس سنوات، أصبحت الآن مرشدًا في مساري C# وF#، ومسؤولًا عن صيانة مسارات C# وF# وScala، وأشارك في العمل على مواصفات المسائل المشتركة بين المسارات.

رائع. إذن انخرطت في Exercism في وقت مبكر جدًا من عمرها. ولمن لا يعرف، هل يمكنك أن تشرح ما معنى أن تكون مسؤولًا عن صيانة مسار على Exercism؟

بالتأكيد. من الناحية النظرية، المسؤول عن صيانة مسار على Exercism هو من يهتم بـ«صحة» المسار. ومن الناحية العملية، قد يعني ذلك أشياء كثيرة جدًا، مثل تنفيذ تمارين جديدة، أو تحديث تمارين قائمة، أو مراجعة طلبات السحب التي يرسلها مسؤولون آخرون عن الصيانة. ومن الجوانب المهمة أيضًا ترتيب تمارين المسار ترتيبًا صحيحًا، لضمان أفضل تجربة تعلّم ممكنة للمتعلّمين. ولاحظ أن كونك مسؤولًا عن الصيانة لا يعني أن عليك القيام بكل الأنشطة المذكورة؛ فمن المقبول تمامًا أن يركّز المسؤول عن الصيانة على نشاط واحد أو نشاطين فقط.

شكرًا لك! وإلى جانب تركيزك على C# وF# وScala، أتممت على ما يبدو كل مسارات اللغات على Exercism. هل لديك مسارات مفضلة بشكل خاص من وجهة نظر المتعلّم؟

رغم أنني تعلّمت الكثير من كل مسار أنجزته، فإن مساري المفضل هو بلا شك مسار Haskell. فهو ليس لغة رائعة مليئة بالمفاهيم المثيرة فحسب، بل كانت جودة مرشديه مذهلة تمامًا. ومن المسارات المفضلة لدي أيضًا مسارا Kotlin وF#، إذ تُعدّ Kotlin وF# لغتين محكمتي التصميم وعمليتين للغاية أحب البرمجة بهما.

أجل، أسمع الكثير من الإشادة بمرشدي Haskell! أتصور أن العمل على هذا العدد الكبير من المسارات منحك قدرًا هائلًا من الرؤى المثيرة حول البرمجة. هل هناك أمور محددة تعلّمتها من تلك التجربة؟

أوه نعم، أشياء كثيرة! العمل مع تنوّع واسع من اللغات يعرّضك لأساليب عديدة ومختلفة في معالجة المسائل. وقد أثّرت هذه الأساليب المختلفة كلها في أسلوبي في البرمجة بشكل ما، وإن كانت اللغات الوظيفية هي الأكثر تأثيرًا فيّ على الأرجح. وأجدني الآن أستخدم المفاهيم الوظيفية كلما استطعت، حتى في اللغات غير الوظيفية (التي بدأت تُدخل ميزات وظيفية ببطء).

وتعلّمت أيضًا أنه رغم اختلاف كل لغة عن غيرها، فإن كثيرًا منها متشابه إلى حد كبير في الواقع. ونتيجة لذلك، يصبح تعلّم لغة جديدة أسهل بكثير بمجرد أن تعرف لغتين أو ثلاثًا. فمثلًا، معرفة Haskell تعني أن المرء قد يتعلّم F# أو Scala بسرعة نسبية. وهكذا قد يكون تعلّم لغات جديدة خطوة جيدة على صعيد المسار المهني أيضًا، لأنك ستتمكن من التنقل بين اللغات بسهولة أكبر.

وأخيرًا، تعلّمت أن وجود مرشدين يوجّهونك أثناء تعلّم لغة ما يجعل العملية أكثر متعة وفعالية بكثير.

لاحظت الشيء نفسه. التعلّم من الآخرين مضاعف رائع! من الناحية العملية، كيف تعاملت مع كل عمليات الإعداد الخاصة باللغات المختلفة؟ غالبًا ما أجد أن فكرة تعلّم بيئة تطوير متكاملة جديدة مرهبة بعض الشيء. هل التزمت بمحرر تعرفه أثناء عملك على اللغات، أم نوّعت بينها لتحصل على تجربة أقرب إلى أسلوب اللغة نفسه؟

بالنسبة لبعض اللغات، كان إعداد بيئة تطوير جديدة أمرًا متعبًا بعض الشيء في الماضي، لكن إعداد معظم اللغات اليوم صار سهلًا إلى حد كبير. بعد ذلك أحاول أن أجد بيئة تطوير متكاملة تمنحني أفضل تجربة لتلك اللغة تحديدًا. ولأنني أتنقل بين Windows وMac OS، ينبغي أن تكون بيئة التطوير متعددة المنصات أيضًا. ومن الأمثلة على بيئة تطوير متكاملة رائعة ومتعددة المنصات Visual Studio Code، وأنا أستخدمها في مسارات Haskell، وJavaScript، وTypeScript، وElm وElixir. أما بقية المسارات، فأستخدم لها بيئة تطوير متكاملة من JetBrains: Rider مع C# وF#، وIntelliJ IDEA مع Java وScala وKotlin، وأخيرًا RubyMine مع Ruby (ملاحظة: هذه أيضًا بيئات تطوير متكاملة متعددة المنصات). وكما ترى، أستخدم عدة محررات للحصول على أفضل تجربة لكل لغة (وإن كانت بيئات JetBrains المتكاملة متشابهة جدًا بالطبع).

نصيحة احترافية: إذا كنت مساهمًا أساسيًا في مشروع مفتوح المصدر، فإن Jetbrains تتيح لك التقدم بطلب للحصول على رخصة مجانية للمشاريع مفتوحة المصدر!

هذه معلومة مفيدة جدًا. شكرًا لك! إذن أنت مسؤول عن صيانة مسارات C# وF# وScala. ما الذي يجذبك تحديدًا إلى هذه اللغات؟

أصبحت C# لغتي المفضلة فور صدورها في عام 2002. فهي لغة محكمة التصميم وأنيقة، مع أدوات ووثائق ممتازة. كما تتطور اللغة بوتيرة سريعة، مما يعني أن هناك دائمًا أشياء جديدة يمكن تعلّمها! ومن مزاياها الأخيرة أنها تعمل على إطار .NET (Core) الممتاز.

وكانت F# أيضًا حبًّا من النظرة الأولى. بفضل صياغتها الأنيقة ومجموعتها الغنية من الميزات (الوظيفية)، وجدت أنني أستطيع أن أنجز أكثر بكود أقل، خاصة عند نمذجة المجال. وهي أيضًا لغة عملية للغاية، بميزات كائنية التوجه وتوافق ممتاز مع كود .NET القائم (فهي تعمل على إطار .NET (Core) نفسه الذي تعمل عليه C#). ومن نقاط قوتها الإضافية أدواتها، التي تُعدّ من الأفضل المتاح للغات الوظيفية. ومكافأةً إضافية، فيها إحدى أجمل المقدمات إلى لغة برمجة رأيتها على الإطلاق، على موقع fsharpforfunandprofit.

أما Scala فهي اللغة التي عرّفتني بالبرمجة الوظيفية، ولذلك تحتل مكانة خاصة في قلبي. ومثل F#، هي لغة عملية، وللأسباب نفسها إلى حد كبير. وبفضل اندماجها في منظومة Java، ساعدت حقًا في نشر البرمجة الوظيفية.

من المثير للاهتمام أنك بدأت البرمجة الوظيفية عبر Scala، وترشد في مسار F#، لكنك تعتبر Haskell أفضل مسار. ولمن يريد الغوص في البرمجة الوظيفية على Exercism، أيًّا من هذه المسارات تنصحه بتجربته أولًا؟

سؤال رائع! أعطي صوتي لـ F#، لأنني أشعر أنها اللغة الأسهل للتعلّم. ويعود ذلك أساسًا إلى أن لغة F# أقل تعقيدًا من اللغتين الأخريين. كما تُعدّ أدوات F# ووثائقها الممتازة ميزة كبيرة عند البدء. ومع ذلك، أوصي بشدة أيضًا بالانضمام إلى مسار Haskell بعد أن تنهي مسار F#، لأن Haskell تمتلك بعض الميزات الرائعة والمتقدمة التي لا تمتلكها F#.

لقد اطّلعت على قدر كبير من خططنا لمستقبل Exercism. هل هناك ما يتحمّسك بشكل خاص في المشروع؟

من بين كل التحسينات المخطط لها، أكثر ما يتحمّسني هو التحليل الساكن للحلول. والفكرة أننا سننشئ نظامًا يمكنه التعليق تلقائيًا على الحلول المُرسلة، عبر تحليل تلك الحلول برمجيًا بحثًا عن المشكلات والاقتراحات الشائعة. ومن المفترض أن يساعد هذا المرشدين كثيرًا، إذ لن يضطروا بعد ذلك إلى التعليق على هذه المشكلات والاقتراحات الشائعة، ويمكنهم التركيز على مسائل أكثر إثارة للاهتمام.

وإن كنت مهتمًا، فاطّلع على نموذجي الأولي (المبكر) لـمحلّل مسار C#، الذي يستخدم .NET Compiler Platform لتحليل كود C# تحليلًا ساكنًا.

أجل، التحليل الساكن هو أكثر ما يثير حماسي أنا أيضًا إلى حد كبير. ومن الرائع أن أرى أن لديك نموذجًا أوليًا جاهزًا بالفعل. أعتقد أن تحسينات السرعة التي سيمنحها لنا التحليل الساكن ستحسّن Exercism تحسينًا هائلًا، وأنا متحمس حقًا لكيفية توسيعه لتعليم المبتدئين تمامًا البرمجة. أعتقد أنها نقلة نوعية حقيقية.

سؤال أخير: هل لديك مشاريع شخصية أو قضايا قريبة من قلبك تودّ أن تشير إليها؟

بالنسبة لي، كان الانخراط في Exercism، والمساهمة في قاعدة كودها المفتوحة المصدر، وإرشاد الناس تجربة مجزية إلى أبعد حد. فقد تعلّمت أشياء كثيرة، وتعرّفت على أشخاص رائعين للغاية، وأشعر أنني تمكنت من مساعدة كثيرين.

وأودّ أن أشجّع الناس على أن يجربوا الانخراط هم أيضًا. فإن كانت لديك لغة تشعر بشغف تجاهها وتريد مساعدة الناس على تعلّمها، فسجّل مرشدًا على Exercism. وإن كنت تفضّل كتابة الكود، فاختر مشروعًا مفتوح المصدر وساهم فيه. أعدك أنه أقل إخافة بكثير مما يبدو، وستشعر بشعور رائع حين تفعل ذلك!

رائع! شكرًا لك على وقتك في هذه المحادثة، وعلى كل عملك في Exercism!

21 يناير، 2019 · هل وجدته مفيدًا؟