العودة إلى المجتمع

أن تصبح مطورًا متعدد اللغات

«ما معنى متعدد اللغات؟»، هكذا أسمعك تقول... حسنًا، وفقًا للقاموس، هي القدرة على معرفة عدة لغات! فكيف تصبح «متعدد اللغات»؟ تحدّث إلى Erik Schierboom واحصل على نظرة من الداخل!

شاهد على YouTube
المدة 57دقيقة

Jonathan: مرحبًا بالجميع، وأهلًا بكم في بودكاست Exercism أو البث المباشر. اسمي Jonathan، ويشرّفني أن أكون مضيفكم اليوم. ومعي Eric، وهو عضو في فريق Exercism ومنخرط في العمل فيه منذ عدة سنوات. وإذا كنت جزءًا من منظومة Exercism في أي وقت خلال العامين الماضيين، فمن المرجح جدًا أنك صادفت Eric في مكان ما على الطريق. لكن يا Eric، من الرائع وجودك معنا في حلقة اليوم. أنا متحمس لمعرفة المزيد عن قصتك، وكيف انتهى بك المطاف في مجال التقنية، وبعض وجهات نظرك حول أمور مختلفة في هذا المجال. لكن قبل أن نغوص كثيرًا في هذه الأمور، أود أن تعرّفنا بنفسك وأن تحكي لنا قليلًا عن خلفيتك، وعن القصة التي أوصلتك إلى ما أنت عليه الآن. Erik: بالتأكيد. أجل. من الرائع أن أكون هنا. أنا Eric، كما ذكرت على الأرجح. أعيش في هولندا، وُلدت هناك، وعشت هنا طوال حياتي. بدأت أفكر في أول مرة فعلت فيها شيئًا فعليًا بالحاسوب، وأظن أنها كانت جهاز NES، وأنا ألعب Mario. وهذا ما جعلني أتعلق بالأمر. أجل، كان ذلك رائعًا، ومحبطًا جدًا في الوقت نفسه، لأن الألعاب في ذلك الوقت لم تكن ترحم. Jonathan: لم تكن هناك نقاط حفظ وما إلى ذلك، بل تعيد المحاولة من البداية. Erik: حسنًا، هذا يعتمد على ما إذا كنت تعيش في الولايات المتحدة أو في بقية العالم، لأنه كانت هناك في الواقع نسختان مختلفتان. لكن نعم، أظن أنك تفتح الفتحة في المقدمة ثم تضع الأقراص أو أيًا كان، الخراطيش. وقد أحببت ذلك حقًا. لم يكن لدينا جهاز NES، لكن كان لديّ صديقان يملكان واحدًا، فكنت أذهب إليهما بانتظام لألعب، وكانت هناك ألعاب رائعة كثيرة لعبتها، وألعاب محبطة. لكنها كانت تجربة رائعة حقًا. ثم تعلّقت بالأمر. أظن أن كثيرًا من المبرمجين يتعلقون بالفكرة ويسعون ليصبحوا مبرمجين بسبب رغبتهم في بناء لعبة فقط. فكرت في الأمر. لكن، تحذير: سأكشف النهاية، لم أفعل ذلك قط. أنا لست مطوّر ألعاب. حسنًا. لا، لا، لا. لكن ذلك كان السبب في أنني بدأت أحب الحواسيب. ثم تعرّض والدي لحادث قبل ولادتي، فشُلّ أسفل كتفيه، وكان يتنقل على كرسي متحرك. لكنه كان دائمًا في البيت، وكان ذلك رائعًا. كان لديّ أب موجود في البيت على مدار الساعة، فكانت العودة إلى البيت دائمًا شيئًا جميلًا. وكان يحب الحواسيب أيضًا. في مرحلة ما، وأظن أن عمري كان حوالي 10 سنوات أو ما شابه، أحضر حاسوبًا غير فخم على الإطلاق. أظن أنه كان من نوع X286، بأبيض وأسود، وكان عليه MS-DOS. وكان بإمكانك لعب الألعاب. وكانت هناك ألعاب كثيرة، وحصلت على بعض الألعاب من أصدقائي الذين أحضروا لي ألعابًا، وكان عليهم طباعة كل الأوراق التي تحمل كلمات المرور، مرتبةً، لتشغيل الألعاب فعليًا، لأنها كانت حماية بكلمة مرور. كان الأمر أشبه بدليل الاستخدام. لا يمكنك أن تفلت من هذا الآن، لكن في ذلك الوقت كان ذلك ممكنًا. وكنت أحب لعب تلك الألعاب، لكنني كنت أحب أيضًا أن أحاول أن أفهم كيف تعمل. وقد عطّلت حاسوبي مرات لا أستطيع حتى أن أحصيها. كان لديّ ما يشبه مكتب دعم، وهو والد أحد أصدقائي وكان بارعًا جدًا في الحواسيب. وكلما عطّلت نظامي، كنت أتصل به، فكان يتفضل مشكورًا ويأتي ليساعدني في إصلاحه. لكنني ما زلت أتذكر أنني كنت في حالة ذعر عندما أدرك أنني لا أستطيع الخروج من هذه المشكلة. لكنني تعلمت الكثير من ذلك. Jonathan: هذه المشكلة. لكنني تعلمت الكثير من ذلك. على قرص مرن، وأتذكر أنني وفّرت المال لشراء هذا الشيء لسنوات، ثم وضعته، فلم يُقلع أبدًا على تلك الأقراص المرنة الصغيرة. كان ذلك أحد أكبر مصادر إحباطي. لا أظن أنني تجاوزت مرحلة محاولة معرفة كيفية إصلاحه. لكن هل كانت الألعاب تأتي على أقراص مرنة، وكان عليك أن تحصل على خرطوشة صغيرة تضعها فيها وتحملها، وكل هذا النوع من الأشياء. Erik: أبدًا. Jonathan: أجل. Erik: أجل، في بعض الأحيان كان لديك عدة أقراص مرنة. لذا، نعم، كانت فترة رائعة فعلًا. أحببت MS-DOS ومجرد اكتشاف ما يمكنني فعله، ثم اكتشفت ما لا يمكنني فعله. لذا، نعم، كان ذلك رائعًا حقًا. Jonathan: أجل، كان رائعًا حقًا. هل كانت والدتك تعمل بدوام كامل حينها؟ وكان والدك في البيت؟ Erik: لا، كانت أمي ترعى أبي بدوام كامل. كان يحتاج إلى رعاية كثيرة. في البداية كان يستطيع التنقل بيديه، ثم صار يستخدم ذقنه لأن يديه بدأتا تتدهوران قليلًا وفقد السيطرة عليهما. لكنها كانت ترعاه بدوام كامل. كان والداي دائمًا في البيت. لذلك كان من الغريب جدًا بالنسبة لي أن أذهب إلى بيوت آخرين يعمل والداهم، فيكون النهار قد انتهى ووالداهم ما زالا غير موجودين. كان ذلك غريبًا جدًا في نظري. لكن نعم، إنها مجرد حالة مختلفة. Jonathan: كان ذلك غريبًا جدًا في نظري. كنت وحدك. Erik: بلى، لديّ أخت واحدة، تصغرني بثلاث سنوات. لا أحد يمكن أن يصدّق أننا أشقاء، فنحن مختلفان جدًا. كنت أتشاجر معها كثيرًا، لكننا الآن على وفاق تام. انتهى الأمر بخير. حسنًا. ولم تكن تحب الحواسيب، فلم تكن تقتحم وقتي على الحاسوب. Jonathan: لكننا كنا نتشاجر غالبًا على الحاسوب. كانت تريد أن تلعب Sims وأنا أريد أن ألعب SimCity أو أيًا كان. فكنا دائمًا في خلاف من هذه الناحية. Erik: وداعًا. بالتأكيد أحب اختيار SimCity أكثر بكثير. لكن لا، لم تكن مهتمة بالحواسيب فعليًا. الطريقة الوحيدة التي استطعت بها جذب اهتمامها كانت عندما حصلت على جهاز SNES، أي Super Nintendo، وكان لدينا Mario Kart. وقد أحبت Mario Kart فعلًا، فكنا نلعب كثيرًا معًا. وبالطبع كنت أفوز دائمًا لأنني كنت أكثر تدريبًا بكثير، لكنها ظلت تحبه. Jonathan: فهل ما زلت تحب العبث بالأشياء؟ أجل، MS-DOS، إن لم أكن مخطئًا، مستوى منخفض إلى حد كبير. أجل. إذن كان ذلك على مستوى منخفض إلى حد كبير. أجل، بالتأكيد. وكم كان عمرك حين كنت تعبث بذلك النظام؟ Erik: حسنًا. مستوى منخفض، أجل. منخفض تمامًا. أجل، كان عمري حوالي 10 سنوات، أظن. ثم كان لديّ صديق في فريقي لكرة القدم، في فريقي لكرة القدم أساسًا، هكذا ينبغي أن أقول. لكنه كان مبرمجًا جيدًا بالفعل، وكان قادرًا على برمجة ألعاب فعلية، وكان يفعل ذلك بـ Visual Basic، وقد ذُهلت تمامًا. كان يأتي إلى حاسوبي ويريني أنه سيكتب شيئًا ما، ولم أكن أفهم منه شيئًا. لكن بعد نصف ساعة كان لديه شيء يمشي على الشاشة، وكان ذلك سحرًا خالصًا في نظري. كنت مبهورًا تمامًا. لكنني لم أحاول البرمجة فعليًا في تلك المرحلة. كنت ما زلت أشعر أنها أصعب من أن أحاولها. فلم أفعل، واكتفيت بالعبث ولعب الألعاب. Jonathan: إذن أنا... سأقاطعك قليلًا فقط. Erik: ثم عندما صرت أكبر قليلًا. Jonathan: كيف نشأ الربط بين «آه، أستطيع برمجة اللعبة» و«أستطيع أن أفعل هذا بشكل جدي كامل، إن كان ذلك مفهومًا»، أو «أستطيع أن أسير في هذا الطريق بشكل أكثر جدية»؟ Erik: أجل، جاء ذلك لاحقًا. حين كان عمري حوالي 17 عامًا، أظن، كان عليّ أن أختار المسار الذي سأسلكه. كان في ذهني خياران: إما دراسة التاريخ، وإما دراسة تقنية المعلومات. في النهاية كان الخيار بسيطًا نوعًا ما، لأنني شعرت أن تقنية المعلومات شيء سأحب فعله أكثر قليلًا من دراسة التاريخ وحده. قد تكون في التاريخ أجزاء مملة جدًا، ولم أظن أن في علوم الحاسوب أجزاء مملة، لكنها موجودة بالطبع. فكنت مخطئًا. أجل، أجل. لا، حسنًا، يمكن أن نتعمق في ذلك في وقت آخر. لكن نعم، هناك أجزاء مملة. لكنني اتخذت قراري حينها. وكان ذلك في وقت كان فيه كل شيء مزدهرًا، أي فترة ازدهار شركات الإنترنت. فعندما كنا نزور مدرستي الثانوية، المدرسة التي سألتحق بها، وهي جامعة للعلوم التطبيقية، كان بإمكاني الاختيار بين جامعة العلوم التطبيقية والجامعة. لكنني أفضل العلوم التطبيقية لأنني أريد أن أبني الأشياء. أنا لست منظرًا بارعًا، لا أعرف كيف تقولونها، لكنني لست بارعًا في النظرية. أحب أن أبني الأشياء، وأنا عملي جدًا. فبدأت بالجانب العملي، وأحببته كثيرًا. وكانت تلك فترة كانت فيها كل هذه الشركات تحقق أرباحًا طائلة، وكانت تقول: بمجرد أن تتخرج ستحصل على سيارة، وستحصل على هذا وذاك. ثم حين تخرجت انفجرت فقاعة شركات الإنترنت، فصار كل شيء في حالة من الفوضى، وكان العثور على عمل صعبًا فعلًا. وفي تلك المرحلة شعرت أن عليّ أن أجرب الجامعة، لأن تجربة العلوم التطبيقية كانت ممتعة جدًا، وفيها تعلمت البرمجة فعليًا. لكنني قلت: حسنًا، ربما أؤجل مسيرتي المهنية قليلًا وأرى إن كان بإمكاني الالتحاق بالجامعة. وكان ذلك جميلًا. Jonathan: إذن، نظام التعليم الأوروبي، حسب فهمي، يفرز الطلاب بسرعة إلى مسار عملي قائم على المهارات، أو إلى الجامعة، أي مسار أكاديمي أكثر. هل هذا صحيح في هولندا؟ وهل هم بارعون في القول: أنت مناسب تمامًا لهذا؟ أعرف في سويسرا، وهي مرجعي في الحقيقة، أنك إن كنت بارعًا في مجال ما يمكنك أن تقول: حسنًا، اذهب وتدرّب كمتدرب واكتسب المهارة بهذه الطريقة. وهو في الحقيقة لا يُعتبر أقل ولا أكثر من الذهاب إلى الجامعة أو أيًا كان، بل هو أقرب إلى تفضيلاتك من هذه الناحية. هل هذا صحيح في هولندا أيضًا؟ وهل مررت بهذا النوع من العمليات وأنت تكبر؟ Erik: لن أقول إنه كان يُنظر إليه على أنه مساوٍ. لا تزال هناك فكرة أن الذهاب إلى الجامعة بدلًا من جامعة العلوم التطبيقية أفضل أو أصعب، أو على الأقل أكثر مكانة. ويمكنك أيضًا الحصول على لقب مختلف. لكن ذلك لم يكن جاذبًا لي كثيرًا، فقد كان نظريًا أكثر من اللازم. كنت أريد أن أتعلم البرمجة لأنني لم أكن قد تعلمتها بعد. كنت أعرف أنني على الأرجح سأحبها. كنت قد رأيت شذرات من HTML، لكنني لم أكتب سطر كود واحد فعليًا. ومع ذلك كنت واثقًا إلى حد كبير من أنني سأحبها حقًا. حين بدأت، لم أكتب في السنة الأولى سطر كود واحد تقريبًا. كنت فقط أُسايِر مجموعة من زملائي، لأن أحدهم كان مبرمجًا رائعًا يعرف كل شيء، وكان يفعل كل شيء، فلم أكن حتى أحصل على فرصة لفعل الكثير. لكن في السنة الثانية اتخذت قرارًا واعيًا: الأمر لا يسير على هذا النحو، ولن أتعلم البرمجة أبدًا بهذه الطريقة. فانغمست تمامًا وبرمجت بكل ما أملك. كانت غوصة عميقة. بدأت بـ C، وهي لغة فظيعة للبدء بها. لن أتوسع في رأيي في C كلغة فعلية، لكن كبداية، هي لغة صعبة جدًا. فتطبيق قائمة مترابطة في الدرس الثاني أو الثالث مثلًا ليس شيئًا تقدّره كطالب إن لم يكن لديك أي خلفية. لكنني تمكنت من البرمجة، وأحببتها إلى درجة أنني بدأت أبرمج كثيرًا في وقت فراغي. والطريقة التي علّمت بها نفسي البرمجة تقريبًا، لأن طريقة تدريسهم كانت سيئة للغاية، هي أن أحدد شيئًا أود استخدامه بنفسي ثم أبنيه، أو أحاول بناءه على الأقل، لأنك في البداية تتخبط ولا تفعل الكثير فعليًا. وهذا مفيد في الواقع. لكن في النهاية، الأمر مجرد تدريب وتدريب وتدريب. فقد اكتشفت أن البرمجة مهارة تكتسبها بالممارسة فقط. يمكنك أن تتلقى كل النظرية التي تريدها وأن تشاهد، لا أعرف، 10 ملايين فيديو. لكن إن لم تستثمر الوقت فعليًا، فلا أظن أنك ستصبح مبرمجًا جيدًا أبدًا. عليك أن تفعلها فحسب. وهذه خطوة كبيرة. ما زلت أتذكر عندما صرت قادرًا على قراءة الكود وكنت سعيدًا بذلك. لكن أن تضطر إلى كتابة الكود، كانت تلك خطوة كبيرة جدًا. Jonathan: سعيدًا بذلك، وأن تضطر إلى كتابة الكود، كانت تلك خطوة كبيرة جدًا. في الحلقات القليلة الماضية كنت أسأل عن اللحظة التي نقرت فيها البرمجة في أذهان الناس. فهل كانت هناك لحظة انجلت فيها الصورة بالنسبة لك وقلت: يا إلهي، كل هذا منطقي؟ أم كنت تتخبط محاولًا استيعاب النظرية، أم كانت هناك لحظة قلت فيها: حسنًا، لا، هذا الأمر واضح ومباشر؟ Erik: لا أظن أنني مررت بلحظة واحدة من لحظات «وجدتها». أظن أنني مررت بعدة لحظات. فالأمر يأتي على مراحل. أظن أن أول برنامج فعلي كتبته كان لعبة تخمين كلمة. مثل اللعبة الشائعة جدًا هذه الأيام التي... حسنًا، إنها شبيهة بـ Hangman، فلنقل إنها Hangman. لكنها كانت بـ C، وقد نجحت فعلًا في تشغيلها حتى ألعب لعبتي الخاصة. ففهمت نوعًا ما ما كان يحدث، ثم تتقدم قليلًا. كان لديّ شيء يتعلق، كما أظن، بـ mutexes، حيث كانت هناك قطارات يجب ألا تصطدم، فكان بإمكانك استخدام mutex عند تقاطعها. و mutex أشبه بلافتة تقول: قف أو امضِ. وكان ذلك ممتعًا جدًا، وكنت سعيدًا به. فأعطيته لأستاذي، فقال لي: لكن ماذا لو أردت أربعة قطارات مثلًا؟ فقلت: أوه، أوه، لم أفكر في ذلك. كانت تلك لحظة فتحت عيني، وكانت مجرد جملة واحدة بسيطة. وفكرت: كان عليّ أن أضع في الحسبان أنه قد يسأل عن شيء كهذا. فذهبت وأمضيت عطلة الأسبوع أحاول جعل الكود قابلًا للمعاملات حتى يمكنك أن تحصل على قطارات متعددة، وقد نجحت في ذلك. ركّبتها بطريقة ملتوية، لم تكن جميلة، لكنها عملت. فكانت تلك لحظة أخرى فكرت فيها: هذا رائع حقًا، وأنا قادر على فعل أشياء من هذا القبيل. Jonathan: رائع. أستطيع أن أرى أنك تفعل أشياء من هذا القبيل. فمن معرفتي بك أعرف ذلك. وأيضًا من تجربة تعلم البرمجة، هناك هذه العملية التي تكتب فيها أي شيء، وتجعله يعمل، ثم تحسّنه. فهل كانت تجربتك كذلك أيضًا؟ كان الأمر أشبه بـ: اكتبه فقط، واجعله يعمل، ولا يهمك أي شيء آخر، ثم حسّنه بعد ذلك. Erik: أجل، أجل، أظن أن السنة الأولى أو نحوها كان الأمر مجرد: إن كان يعمل فأنا سعيد جدًا. لم تكن هناك مسألة جماليات أو شيء من هذا القبيل، فقط إن كان يعمل فهو جيد. وقد بالغت تمامًا في التعليقات على الكود، لأن أستاذي قال لي إن عليك أن تعلّق على كودك. فكانت نسبة الكود إلى التعليقات ربما واحد إلى عشرة أو ما شابه، وكانت ضخمة. و... أجل، ما زال أقدم مشروع لي على الإنترنت، وهو أول مشروع مفتوح المصدر لي. هل تتذكر MSN Messenger حيث كان بإمكانك إرسال الرسائل؟ Jonathan: حسنًا، يطرق شيئًا في ذاكرتي، لكن ليس تمامًا. Erik: هل تتذكر Winamp؟ Jonathan: أجل. Erik: أجل، كان Winamp مشغل وسائط، وكان ذلك في عصر Napster. فكنت تنزّل ملفات MP3 ثم تشغلها عبر Winamp. وما أردت فعله هو أنه إذا كنت أشغل أغنية، أردت أن تُضاف تلقائيًا إلى اسمي داخل MSN Messenger. وكنت متحمسًا للبرمجة على Windows في ذلك الوقت، أي Win32. كانت قديمة الطراز جدًا، ليست كالتي لدينا الآن، لكنها منخفضة المستوى وأشياء رائعة جدًا أيضًا. فبنيت إضافة بـ C++، وكانت لغتي المفضلة حينها، لكنني كنت أعرف ثلاث لغات فقط، فلم يكن ذلك يقول الكثير. لكنني بنيت إضافة. فإذا كان Winamp يشغل شيئًا، كانت تحصل على اسم الأغنية عبر APIs خاصة بـ Win32، ثم تحدّث الاسم الذي لديك في نافذة MSN، فيمكن للجميع أن يرى أي أغنية كنت أشغلها. وقد وضعته فعلًا على الإنترنت لأنني ظننت أن آخرين قد يحبونه. أظن أنه كان على SourceForge، الذي لم يعد أحد يستخدمه الآن، لأنني أظن أنهم واجهوا مشكلات تتعلق بالخصوصية أو شيء من هذا القبيل. لكن آخرين في العالم استخدموه فعلًا، وقد دهشت للغاية. كنت أرى عدد التنزيلات، لا أعرف، مئات قليلة من التنزيلات، وأناس يستخدمون برمجتي التي كتبتها. كان ذلك أفضل شعور على الإطلاق. وكان أول برنامج مفتوح المصدر لي. لم أمر أبدًا بمتلازمة المحتال. كنت أشعر أن هذا كودي، وإن رآه أحدهم سيئًا فلا بأس، إنه يعمل وأنا راضٍ عنه، ويمكنني أن أتعلم من تعليقات الآخرين. لم أعرف متلازمة المحتال قط، ومن يعرفني لن يتفاجأ بذلك. Jonathan: لن أتفاجأ. بالنسبة لتجربتك مع الأساتذة والمدرسين في الجامعة، هل كان هناك أساتذة معينون برزوا بالنسبة لك، وكانت طريقة تدريسهم قد سرّعت تعلمك أو كان لها أثر كبير في فهمك للبرمجة والكود؟ وماذا فعلوا تحديدًا ليسمحوا لك بجسر الفجوة بين الجانب النظري والتطبيق العملي للأشياء؟ هذا سؤال كبير نوعًا ما، ويمكنك أن تقسّمه إلى أي عدد من الأجزاء تشاء. أجل، أجل. Erik: أجل، أجل. عليّ أن أفصل بين جامعة العلوم التطبيقية والجامعة. ولو بدأنا بالأخيرة، أظن أن المستوى العام لمهارات من كانوا يدرّسون الناس كان منخفضًا جدًا. كان المعيار منخفضًا للغاية. وكان شعوري أن كثيرًا من الذين يدرّسون في الجامعة يفعلون ذلك لأنهم مضطرون، لا لأنهم يريدون. ففي الجامعة تريد غالبًا أن تتفرغ للبحث، لكن عليك أن تقضي عددًا من الساعات في تدريس الناس، وإلا... حسنًا، إنه جزء من العمل، لكنهم لم يحبوه فعليًا. أردت أن أتعلم البرمجة أكثر بعد أن تعلمتها، فتخصصت في البرمجة هناك، لكنه كان سيئًا للغاية. كنت شبه غاضب من أن هذا هو مستوى معرفة البرمجة الذي أرادوا إيصاله إليّ، وكان ذلك سيئًا إلى درجة أنني انتقلت فعلًا إلى الأمن السيبراني. ولستُ مهتمًا فعلًا بالأمن السيبراني، لكن مادة البرمجة كانت سيئة للغاية. أقول دائمًا إن الشيء الوحيد الذي تعلمته حقًا في مسيرتي الجامعية هو كيف أكتب المقالات كتابة سليمة، وكيف أبحث في المصادر بحثًا سليمًا بحيث أعرف مصادر واضحة ولا أقبل أي مصدر. هذا ما تعلمته في تلك السنوات، أما البرمجة فلم أتعلم عنها شيئًا على الإطلاق. Jonathan: يبدو ذلك قريبًا جدًا من التاريخ أيضًا، مثل كيفية استجوابك لمصدر، وكيف تتأكد من أن حجتك متماسكة، وكل هذا النوع من الأمور. كيف كانت مهارات التاريخ ومتعته... Erik: قريبًا جدًا. Jonathan: كيف تجلّت في البرمجة وتعلم البرمجة، إن تجلّت أصلًا؟ وما بعض أوجه التشابه بينهما؟ Erik: هذا سؤال صعب. حسنًا، كلاهما يتضمن قراءة كثيرة. فالتاريخ قائم على القراءة، والبرمجة أيضًا قائمة على قراءة الكود. فعدد المرات التي تكتب فيها الكود أقل بكثير من عدد المرات التي تقرأ فيها الكود. فهي أيضًا تشبه القراءة كثيرًا. وقد تشبه أحيانًا عمل علماء الآثار، إذا بدأت عملًا جديدًا ووجدت نفسك أمام نظام قديم موروث عليك أن تجد طريقك فيه. تشعر كأنك تتطلع إلى الزوايا والأركان الخفية لترى ما يختبئ فيها، وأحيانًا تخرج جثث من الخزائن وما إلى ذلك. فالأمر يشبه الاستكشاف قليلًا. أعني، ما الذي استمتعت به في هذا؟ لا أعرف إن كان هناك أي شيء آخر، أين كان الاستمتاع أصلًا؟ Jonathan: شكرًا. أين كان الاستمتاع في هذا المجال بالنسبة لك؟ Erik: في الغالب... حسنًا، الحكايات التي كان أساتذتي يروونها. مثل القراصنة، كانوا يحكون عن أن يُجرّ أحدهم بحبل تحت السفينة، وكانوا يصفون ذلك بتفصيل صارخ وما إلى ذلك. أحببت هذا النوع من الأمور، أحببته حقًا. وأحب الرومان وثقافتهم وكيف انتشروا، وكان ذلك... ثم أيضًا السياسة، أي الغدر والخيانات وما إلى ذلك. أحب ذلك كثيرًا. كما درست اللاتينية في مدرستي الثانوية. لم أهتم باللاتينية على الإطلاق، لكنني أحببت كثيرًا القصص التي... فلم يعجبني أن عليّ دراستها، لكن القصص التي كان علينا ترجمتها، تلك أحببتها. لكنني تركتها بعد سنتين. Jonathan: تلك القصص أحببتها. لا، السبب في أنني سألت عن التاريخ كان... Erik: أجل، أعرف القصة. Jonathan: لقد رأيت عددًا من الناس الذين يميلون إلى الجانب الفني أو الاجتماعي، كيف نقول؟ ربما في الإطار الإنجليزي يشمل الفنون ما يشبه الفنون والتاريخ، ويدخل في تلك الفئة. لكنني أرى على نحو متزايد أشخاصًا استمتعوا بذلك المجال ينتقلون إلى تعلم البرمجة. والسبب في اهتمامي هو أن هناك بوضوح... تداخلًا، ومحاولة رسم هذا التداخل قليلًا كانت جزءًا ممتعًا للغاية من المحادثات التي أجريتها مع أشخاص مختلفين. ويبدو أنك إن استطعت رؤية الصورة الكبيرة وكان لديك نهج متعدد التخصصات يمتد عبر مختلف الأشياء التي تدرسها، فإن جلب ذلك إلى البرمجة مفيد جدًا، لأنك تصبح قادرًا على تطبيق مهارات مختلفة في مجال البرمجة. وأظن، نعم، هذا مجرد... أردت فقط أن أعلّق على ذلك. فمن المثير للاهتمام أنك أحببت التاريخ، والآن لديك خبرة في أكثر من 30 لغة برمجة مختلفة، وتصون كثيرًا منها. حسنًا، ليس الصيانة بالضرورة، لكنك منخرط بعمق في إدارتها كلها على Exercism، وهو... حسنًا، أجل، أجل. تفضل، أكمل. Erik: كم منها لك؟ هل يمكنني أن أعود قليلًا إلى ما قلته للتو؟ فقد ذكرت أن هناك أنواعًا كثيرة مختلفة من الناس، واهتمامات مختلفة، يمارسون البرمجة. وأحد أسباب اعتقادي بأن الأمر كذلك هو أن البرمجة تجذب الأشخاص ذوي العقلية التقنية الشديدة، لأن فيها قواعد صارمة، واللغات محددة جدًا، فيها قواعد نحوية وتراكيب. كلها أمور كثيرة تجذب الناس الذين يحبون الأشياء على نحو معين. فمثلًا، إن كنت فيزيائيًا فأنت تحب القواعد والقوانين وما إلى ذلك. وفي البرمجة أمور من هذا القبيل، لكنها أيضًا تشبه الفن. ولهذا يقارنها الناس أحيانًا بكتابة كتاب، وما زلت أظن... أن ذلك على الأرجح أحد أفضل الأمثلة. لا أحب تشبيه بناء المنزل، لأنه لن يُبنى أي منزل لو بنينا برمجياتنا كما نبني المنزل. لكنها في الحقيقة علم وفن في آن واحد، كما أشعر. ذكر Jeremy هذا مؤخرًا في محتوى Dig Deeper، أنه في تمرين بسيط جدًا يمكن للناس أن يأتوا بمئات الحلول المختلفة، حتى وإن ظننت أنه لا ينبغي أن يكون هناك سوى طريقة واحدة لحله. لكن هناك دائمًا أكثر من طريقة. وهذا ما أحببته في البرمجة: أن يكون لديك شيء يعمل، ثم تستكشف، لا أعرف، 20 خيارًا آخر، وتكتب وترى أن هذا يعمل أيضًا. هذا المزيج بين كونها فنًا وعلمًا هو ما أحبه حقًا، لأنني أظن أنها أيضًا المجال الوحيد الذي أستطيع فيه أن أكون مبدعًا فعلًا. أنا لست شخصًا مبدعًا على الإطلاق. لديّ يد يمنى ويد يسرى، لكن... لن تعرف ذلك لو رأيتني أفعل شيئًا في البيت مثل الأعمال المنزلية أو النجارة أو أيًا كان. لستُ بارعًا في ذلك، ويعود ذلك أيضًا إلى أن والدي لم يستطع أن يعلّمني. هذا مثير للاهتمام فعلًا. Jonathan: لكن أيضًا، لم أكن مهتمًا بذلك حقًا. أما أنا فقد درست الفنون في المدرسة، وعزفت الموسيقى، وعزفت الجيتار أو أيًا كان. لذلك كان إطار الإبداع لديّ دائمًا في الرسم أو الموسيقى وما شابه. ولم أفكر قط في الجانب الإبداعي للكود. والآن بعد أن ذكرت ذلك، كيف يظهر هذا عندك؟ هل تعزف آلة مثلًا؟ أعرف أنك تستمتع بالموسيقى، لكنني أحاول فقط الربط بين الأمرين. Erik: حسنًا... بلى، بلى. أجل، حاولت أن أتعلم الجيتار. وكان ذلك صعبًا جدًا على زوجتي لأننا كنا نعيش في شقتها الطلابية، وكانت مساحتها 20 مترًا مربعًا ربما. فكنت أحاول تعلم الجيتار وكنا قريبين جدًا من بعضنا. وما زلت مندهشًا من أنها تحمّلت ذلك. Jonathan: إنه مجرد Erik: ليس لديّ أي موهبة فطرية في العزف على آلة. كان عليّ أن أعمل بجد شديد جدًا لأصل إلى مستوى معين، وكان منخفضًا جدًا مع ذلك. كنت أجيد اللعب على الإيقاع وما إلى ذلك. لكن في مرحلة ما طلب مني أستاذ الجيتار أن أرتجل وأن أعزف منفردًا، فضعت تمامًا. لم أستطع فعل ذلك مهما حاولت. لا توجد لديّ أي موهبة إبداعية موسيقية. Jonathan: لا توجد لديّ أي موهبة إبداعية موسيقية. وماذا عن البرمجة؟ بخلافك. حين تأتي إلى البرمجة من الصفر، لنقل إنك تتلقى تكليفًا من Jeremy أو طلب ميزة في Exercism، ويكون الأمر «سنفعل كذا وكذا وكذا». هل يمنحك ذلك حقًا حيوية ذهنية، وهل تشعر بـ«واو، حسنًا رائع، لنستكشف هذا حقًا» وتستمتع بذلك؟ هل تستمتع بهذه العملية؟ هل تشعر أنك تنبض بالحياة من ناحية ما؟ Erik: بخلافك. حسنًا. أجل، أجل. الأمر هو أن تكون لديك فكرة وتجعلها شيئًا، فتصبح تقريبًا مثل إله صغير، نعم، حيث تبدأ من لا شيء، وتكون لديك فكرة، ثم يصبح هناك شيء. وهذا سحري للغاية. وما زلت أشعر ببهجة شديدة جدًا حين يكون لديّ نص برمجي. فتكون هناك كل هذه النصوص سطرًا سطرًا، ثم تراها تفعل الأشياء. ومن الممتع جدًا أن ترى الحاسوب يعمل من أجلك بناءً على ما قلت إنه ينبغي أن يفعله. ما زلت أحب ذلك. فجانب الإبداع موجود بالتأكيد أيضًا في استكشاف الطريقة التي ستحاول بها بناء شيء ما. ثم بعد أن تبنيه، ربما سمعت عن دورة إعادة الهيكلة، حيث يكون لديك شيء يعمل، ثم تبدأ في تحسينه لترى إن كان يمكنك جعله أفضل. أنا أعشق إعادة الهيكلة تمامًا. هناك أحد الكتب... أين هو؟ أوه، لا أستطيع رؤيته لأنه خارج نطاق الكاميرا. لكنه كتاب Refactoring لمارتن Fowler. وهو من أفضل تجاربي في القراءة عن البرمجيات. فأنا أحب إعادة الهيكلة كثيرًا. إنها مجرد عملية يكون لديك فيها شيء يعمل، لكنك تستطيع جعله أفضل أو أجمل أو أسرع، أيًا كان معيارك. ولهذا أيضًا أحببت Exercism حقًا، لأنه مبني لهذا الغرض: تحل الاختبارات، ثم يكون لديك إطار اختبارات ويمكنك أن تفعل بكودك ما تشاء. وطالما أنه أخضر، فهو لا يزال... أي أنه يعمل. Jonathan: أحب ذلك كثيرًا. سأستمر في العودة إلى خطوط زمنية مختلفة. إذن الآن أنهيت جامعتك، وتعلمت البرمجة، وقلت فعلًا: حسنًا، أنا ملتزم بهذه العملية التعليمية وسأغوص فيها بعمق. فماذا حدث بعد ذلك من نقطة الالتزام الحقيقي هذا، ثم بدأت على الأرجح تفكر في المسار المهني، وهذا دائمًا جزء كبير من تجربة الجامعة: ماذا سأفعل لبقية حياتي؟ كيف سار ذلك؟ ماذا كان تفكيرك حوله؟ وما الذي انفتح أمامك؟ Erik: بالتأكيد. لم أفكر في مسيرتي المهنية فعليًا قط. لا أظن أنني فعلت ذلك في حياتي أبدًا. الشيء الوحيد الذي يهمني حقًا هو أن أفعل شيئًا أحب فعله، وأن يكون قريبًا مني حتى لا أضطر إلى القيادة كثيرًا، فأنا لا أحب القيادة كثيرًا. لكن لا، لم أفكر في مسيرتي المهنية فعليًا قط. وكنت محظوظًا بشكل لا يصدق. لم أضطر أساسًا إلى التقدم لوظيفة إلا مرة أو مرتين ربما. كان لديّ دائمًا أصدقاء أو أشخاص يعرفونني. وكذلك الأمر مع Exercism: كان Jeremy يعرفني ولم أضطر إلى التقديم والمرور، لا أعرف، بأربع أو خمس مراحل مقابلات كما اضطررت أنت. ربما أكثر من ذلك في حالتك، بالمناسبة. لكن... لا، لا، أعرف. لكنني لم أمر بأي منها. وكان الأمر كذلك حين كنت أبحث عن عمل. كنت دائمًا أعمل إلى جانب دراستي في المدرسة، حتى في الثانوية، كنت أحاول دائمًا أن أكسب بعض المال لأن والديّ لم يكن لديهما مال كثير، فكان عليّ أن أكسب نصيبي الخاص. لكنني أحب العمل. وأظن أنني عملت ربما 20 ساعة في وظيفة برمجة أثناء دراستي الجامعية، لأن الوقت الفعلي الذي كان علينا قضاؤه داخل الجامعة كان قليلًا جدًا، فاستطعت أن أكسب مالًا لا بأس به، وقررت أن أشتري به مجموعة ضخمة من أقراص DVD. Jonathan: لندع ذلك جانبًا. Erik: لندع ذلك جانبًا. أجل، آسف، لقد تبرعت بمعظمها فعلًا، وأبقيت على تلك التي لديّ بها ذكريات عزيزة جدًا، لكنني تبرعت بمعظمها. كان لديّ 400 أو 500 قرص DVD في مرحلة ما. Jonathan: 400-500 قرص DVD في مرحلة ما. أوه، هذا ممتع. Erik: كان قريبًا من ذلك. كان قريبًا من ذلك. أجل. لكن... أثناء دراستي الجامعية، كان أحد أصدقائي، وهو نفسه المبرمج أيام كان عمري 10 سنوات أو ما شابه، يدرس معي في الجامعة. وكان يعمل في وظيفة، فسألني: هل تريد أن تنضم إلى هذه الشركة لتكسب بعض المال الإضافي؟ ففعلت. ثم بقيت هناك أساسًا، وبعد أن أنهيت دراستي الجامعية سألوني إن كنت أرغب في إعداد رسالة دكتوراه. لكنني فسّرت ذلك على أنه: لقد وجدت شيئًا مثيرًا للاهتمام في رسالة الدكتوراه، وكان ذلك محض حظ، بالمناسبة، أنا بذلت العمل، لكنه كان حظًا. وفسّرت ذلك على أنه: نريد أن نضع أسماءنا على شيء ستكتبه، فنحصل على نشر علمي. فلم أكن متحمسًا لذلك. ولم أرد أن أمضي أربع سنوات في أمور نظرية، ولم يكن عالم الأكاديميا كله جاذبًا لي فعلًا. كنت أكثر ارتياحًا بكثير في القيام بأمور عملية داخل شركة. فبقيت حيث كنت أعمل. كنت أعمل بـ PHP، وكان لدينا فريق رائع. أظن أنني، ربما باستثناء فريقنا الحالي، لم أعمل قط في فريق بهذا التنوع وهذه الكفاءة. لكن الإدارة التي كانت تقودنا كانت سيئة للغاية. كانت بيئة التقنية هناك يسودها الاستياء، لم تكن جيدة، لكنني مع ذلك استمتعت كثيرًا. لكن PHP ليست لغتي المفضلة، فكنت متحمسًا لـ C sharp. كنت من محبي C sharp منذ أن كانت لا تزال C sharp 1.0، وكانت حينها خشنة الحواف إلى حد كبير. طلبت كتبًا من أمريكا واضطررت إلى دفع بعض الضرائب الإضافية، فكانت مكلفة جدًا في النهاية، لكنني ما زلت أستخدم ذلك الكتاب كثيرًا جدًا. ثم قلت إنني أريد أن أعمل بـ C sharp، لا على الجانب فقط، فتقدمت بطلب. في الواقع، كان ذلك أيضًا في الجامعة، لكنه لم يكن بحثًا أو شيئًا من هذا القبيل، بل كان أشبه بعمل دعم في أجزاء مختلفة من الجامعة. وعملت بـ C sharp نحو سبع سنوات. Jonathan: وعملت بـ C sharp نحو سبع سنوات. أخبرني بالقصة هناك. لأنك بدأت متطوعًا أو مساهمًا، أليس كذلك؟ ثم بنيت نفسك من هناك تدريجيًا. Erik: أجل. أجل، أثناء عملي في الجامعة كانوا متسامحين جدًا في السماح لك بدراسة أشياء أو الذهاب إلى المؤتمرات وما إلى ذلك. في مرحلة ما سمعت بشيء يُسمى البرمجة الوظيفية، ففكرت: يا إلهي، لا أعرف شيئًا عن هذا. كنت أعرف أنهم يدرّسون درسًا اختياريًا واحدًا في الجامعة، لكنني لم أفعل شيئًا به فعليًا. وفكرت أن عليّ على الأرجح أن أتعلم البرمجة الوظيفية، فربما تكون ممتعة. ووجدت زميلًا آخر لي أراد الانضمام. فأخذنا دورة مجانية، دورة Scala على Coursera. يجب أن تدفع الآن إن أردت فعلها، لكن في تلك الأيام لم يكن ذلك مطلوبًا. وكان يدرّسها Martin Ordeski، وهو مؤلف Scala، وهي لغة وظيفية لدينا أيضًا على Exercism. واستمتعت كثيرًا بتعلم البرمجة الوظيفية، وكانت في بعض الأحيان صراعًا ذهنيًا لا بأس به، لأنها طريقة مختلفة حقًا في التفكير في الأشياء. لكنني واصلت وصبرت، وأحببتها حقًا. وكان هناك منتدى يمكنك أن تناقش فيه مع طلاب آخرين، مثل التمارين التي لم تستطع حلها. لكن بعض الناس سألوا: ما المصادر التي يمكنني استخدامها إن أردت أن أتعلم المزيد عن Scala؟ فذكر أحدهم: جرّب Exercism، لديهم هذا الشيء الرائع حيث يمكنك حل كثير من التمارين المختلفة، أشبه بألغاز صغيرة. ففكرت: هذا يبدو جيدًا. فانضممت وحللت مسار Scala. وتعلمت كثيرًا حقًا. وكانت تلك بدايتي في عالم البرمجة الوظيفية، حيث غمست أصابع قدمي فيه. ثم فكرت أن أغوص بعمق، فانتقلت إلى Haskell. وكانت تلك غوصة عميقة حقًا بالنسبة لي في ذلك الوقت. لكن ما كان هناك... كان ذلك في Exercism V1. كان الناس يعلّقون على كودك فقط، ولم يكن هناك نظام إرشاد رسمي أو شيء من هذا القبيل. وكان أهل Haskell رائعين تمامًا، فتعلّمت Haskell منهم أساسًا. كنت أبحث كثيرًا في Google وأجد بعض الحلول الغريبة، وكنت أكتب حلولًا غريبة، لكنهم كانوا دائمًا يحاولون توجيهي نحو حل يكون أصيلًا في Haskell وأنيقًا. وكانت تجربة رائعة إلى درجة أنني فكرت: عليّ على الأرجح أن أفعل هذا بنفسي مع الآخرين، ربما أستطيع المساعدة أيضًا. لطالما أحببت المساعدة. فقلت سأعمل على C sharp وأعلّق فقط على كود C sharp الخاص بالآخرين. وقد أعجبني ذلك. ثم لاحظت أن مسار C sharp فيه، لا أعرف، 40 تمرينًا، وHaskell فيها أكثر. لماذا؟ فحاولت أن أعرف السبب، ووجدت أنه يمكنك إرسال pull requests إلى Exercism وإضافة تمارين جديدة. وهذا ما جعلني أتعلق بالأمر. فصرت أضيف تمارين كل عطلة أسبوع. ولما انتهيت من C sharp فكرت: حسنًا، F sharp، لنجرب F sharp. فـ F sharp وظيفية، وهي في منظومة Microsoft. فأحب الاثنتين، فلنجمع بين الأشياء المفضلة لديّ. فعملت على F sharp وفعلت الشيء نفسه. فكنت من مسؤولي صيانة F sharp وأبني التمارين، وأحببت ذلك كثيرًا جدًا. Jonathan: أحببت ذلك كثيرًا جدًا. تأخذ لغة، وتقول: حسنًا، سأجرب Scala، وتتعمق فيها نوعًا ما، ثم تغوص في أعماقها. فهل الوقت الذي استغرقته لفهم كل لغة قلّ مع الوقت؟ لأن لديك الآن عدد منها. أعني، كيف سار ذلك؟ Erik: أجل، أجل. حسنًا، الأمر يسير بالطريقة نفسها مع اللغات الطبيعية. فإن تعلمت الفرنسية وأتقنتها، فسيكون تعلم الإسبانية أسهل بكثير، لأن هناك معرفة مشتركة كثيرة، مثل المفردات المشتركة، وحتى لهجات متقاربة تقريبًا. والأمر نفسه في برمجة الحاسوب. فإن كنت تعرف C وانتقلت إلى C++، فستجد مفاهيم جديدة كثيرة، لكن هناك أيضًا الكثير من الأمور المتطابقة تمامًا. فالعائلة كلها الشبيهة بـ C، وهذا أيضًا من الأمور التي أحبها في البرمجة: أن لديك ما يشبه شجرات العائلة. فهناك فرع Lisp، وفرع ML، وفرع شبيه بـ C. وهو أشبه بالتاريخ، حيث لديك هذا النسب في شجرة عائلة أو شيء من هذا القبيل. قلت ذلك بصوت عالٍ أكثر من اللازم. أجل، ذلك Haskell أو Prologue. لكني أحب تلك اللغات الشاذة أيضًا، لأنها تحمل أفكارًا فريدة. وهذا ما أريد عادة أن أجربه: أن أجد لغة تفعل شيئًا مختلفًا، مع أن كل لغات البرمجة تتشارك قدرًا كبيرًا من المعرفة نفسها. فكلها تعتمد منطق القيم المنطقية، وهو أمر ثابت ومسلّم به، فيعمل بالطريقة نفسها في كل مكان. قد تحتاج إلى كتابة علامتي & أو إلى كتابة and ككلمة أو شيء من هذا القبيل، لكن الأساسيات تظل هي نفسها. فبمجرد أن تتقن هذه الأساسيات وتعرفها جيدًا، تستطيع تطبيقها في لغات أخرى بسهولة أكبر. Jonathan: إنه أشبه بالتاريخ حيث لديك هذا النسب في شجرة عائلة أو شيء من هذا القبيل. لغات أخرى بسهولة أكبر. تتعلم البرمجة وتأخذ تجربتك الخاصة في الحسبان. ما بعض السلوكيات والأمور التي يفعلها الناس لتعلم البرمجة؟ وأنا واثق أن هناك تداخلًا في كثير من التخصصات المختلفة. ذكرت أنك التزمت وغصت بعمق وصارعت الأمر حتى فهمته. هل هناك سلوكيات أو أمور أخرى يفعلها من رأيتهم وقلت إنهم وضعوا أنفسهم في موضع التعلم؟ نعم، أحسنت. Erik: حسنًا، لطالما حاولت أن أشجع الناس على بناء شيء يحبون بناءه. فحين كنت أتعلم PHP، بنيت شيئًا يتتبع قائمة أفضل 250 فيلمًا على IMDB التي شاهدتها. كنت أشاهد أفلامًا كثيرة، فأردت أن أراجع كل واحد منها، وتعلمت الكثير من PHP وMySQL بذلك، فقط لأنني بنيت شيئًا أردت بناءه. لأنك حينها تصبر وتواصل؛ فإذا اصطدمت بعقبة، لا تريد أن تتوقف، بل تريد أن تواصل، وأن تصلحها، وأن تجعلها تعمل. وقد قدمت هذه النصيحة لعدة أشخاص بدأوا تعلم البرمجة، وقد نجحت معهم بشكل جيد. واليوم الوضع مختلف تمامًا عما كان حين كنت أتعلم البرمجة مع Stack Overflow وما إلى ذلك. فهناك معرفة هائلة يمكنك أن تجدها على الإنترنت، لكن العثور على المصادر الصحيحة صعب أيضًا. وهنا أظن أن Exercism يمكن أن يتألق حقًا، لأننا نستطيع أن نكون أشبه بحراس بوابة: لدينا في مجتمعنا أشخاص يعرفون ما هي المصادر الصحيحة. وهذا أحد الأمور التي أرى المبتدئين يعانون منها. وأيضًا هناك هذه المسألة: لا تجد تقريبًا أبدًا مصادر تبدأ فيها فعلًا من الصفر. عادةً جمهور Exercism يعرف لغة واحدة على الأقل، ثم ينتقل إلى لغات أخرى أو يتعمق أكثر في تلك اللغة. لكنه ليس موجّهًا لمن لا يملك أي خلفية برمجية، فلا يعرف ما هي حلقة for ولا ما هي المتغيرات. وكلمة السلاسل النصية تعني شيئًا مختلفًا تمامًا في ذهنك. أجل، دائمًا ما أتلقى نظرات غريبة إذا رأت زوجتي أنني أتحدث عن السلاسل النصية، فمعناها مختلف هنا في هولندا. Jonathan: أجل. سأقوم ببعض التعميمات هنا. في العامين الماضيين، من المرجح أنه صحيح أن المزيد والمزيد من الناس صاروا على وعي بالبرمجة وكتابة الكود. في الماضي، كان عدد من يعرفون كيف يتحركون في هذا المجال أقل على الأرجح. ومن الواضح أنه مع نمو هذه الصناعة ونموها المتسارع، هناك بالتأكيد آراء كثيرة، وأناس ما زالوا يشقون طريقهم ليحددوا موقفهم من أمور ومواضيع معينة. وفكرة التل الذي تموت عليه تعني أساسًا: ما الرأي الذي تحمله وتقاتل من أجله أو تدافع عنه بطريقة صحية، بالطبع. لكن ما الشيء الوحيد الذي ستدافع عنه وتريد أن... تثبّت نفسك عليه وتقول: لن أتحرك من هذه النقطة، وعليك أن تدافع عنه؟ ما الذي سيكون؟ حسنًا. Erik: لديّ آراء كثيرة من هذا النوع، لكنني أظن أن أحدها الذي أرغب في شرحه هنا هو أن عليك أن تتعلم لغات أكثر مما تعرف بالفعل. فجرّب لغات جديدة لا تعرفها، وجرّب لغات مختلفة جدًا عما تعرفه بالفعل. الأمر سهل جدًا: فمثلًا، إن كنت تعرف C sharp، فابقَ مع C sharp وهذا لا بأس به. لكن إن تمكنت من إيجاد الوقت والإرادة لتجربة شيء آخر، مثل F sharp أو، لا أعرف، جرّب Kotlin، فافعل شيئًا مختلفًا فقط وانظر ما الفروق. ستصبح مبرمجًا أفضل بكثير. أنا واثق تمامًا بنسبة مئة في المئة أن تعلمي F sharp جعلني مبرمجًا أفضل في C sharp، حتى وإن كانتا لغتين مختلفتين لهما فلسفتان مختلفتان. لكن التداخل بين اللغات اليوم كبير جدًا. حين كانت اللغات لا تزال فتية، مثلًا، Lisp لا تشبه C على الإطلاق، فكانت اللغات الوظيفية مختلفة جدًا عن اللغات الأمرية. لكن اللغات الحديثة مثل C sharp وJava وKotlin وRust مثلًا تستلهم أيضًا من لغات أخرى، ومن اللغات الوظيفية كذلك. فحين كنت في الجامعة، كانت النكتة الدارجة تقول دائمًا إن البرمجة الوظيفية رائعة، لكن لا أحد يمارسها. وهذا لم يعد صحيحًا الآن. فرغم أنك قد لا تعمل بلغة وظيفية، فإن الأفكار الوظيفية في كل مكان. فـ JavaScript فيها الكثير من المفاهيم الوظيفية، وC sharp فيها مطابقة أنماط متقدمة، وفيها LINQ، وهناك الكثير من الأمور الوظيفية. وما تراه هو أن اللغات تستعير المفاهيم من كل مكان، فلم يعد واضحًا تمامًا أي لغة هي لغة وظيفية وأي لغة هي مجرد لغة أمرية. الأمر الآن أشبه بخليط. لكنني ما زلت أظن أن هناك الكثير لتكسبه إن بدأت تعلم لغة جديدة. قال بعض الناس: تعلّم لغة جديدة كل عام. وأنا أحاول أن أفعل ذلك. أستطيع أن أتصور أن ذلك قد يكون مزعجًا للناس، وأنهم سيشعرون بالإرهاق. لكن جرّب لغة واحدة مختلفة على الأقل، وليكن اختيارك لغة تخرج قليلًا عن منطقة راحتك. وأعدك أنك ستتعلم أشياء، وستتعلم الكثير، وستصبح مبرمجًا أفضل بشكل عام، وكذلك في اللغة التي تعمل بها بالفعل. Jonathan: وكذلك في اللغة التي تعمل بها بالفعل. من الواضح أن الناس يبتكرون لغات جديدة لتلبية حاجة معينة. وأنت تقول إن اللغات الأمرية والوظيفية نوعًا ما تندمجان قليلًا. فهل ترى يومًا وضعًا تتلاشى فيه اللغات ويبقى لدينا عدد قليل من اللغات الأساسية؟ أم أن ذلك ساذج؟ Erik: لا، لا، أظن أن الناس متعصبون لآرائهم أكثر من أن يحدث ذلك. لذا ستكون هناك دائمًا لغات جديدة، وستظهر لغات جديدة كل يوم، وهذا لا بأس به. لكن ستكون هناك أشجار تهتز، واللغات الشائعة في النهاية ستصمد على الأرجح. فلا أرى Java أو C sharp تختفي قريبًا. لكن مثلًا، كانت C أو C++ دائمًا لغتين ضخمتين، والآن نرى Rust، وهي محاولة جديدة لمعالجة المسائل نفسها، لكن بأمان أكبر، أي أمان مبني في اللغة. وهي لغة رائعة ينبغي أن أتعلم عنها أكثر فعلًا. لكن من المثير للاهتمام أن نرى Rust تشق طريقها الآن ببطء إلى المجال نفسه، حيث بدأ الناس يستخدمونها بدلًا من C أو C++، وهذا شيء جيد جدًا في رأيي الشخصي. فمثلًا، في Linux يمكنك الآن كتابة تعريفات الأجهزة بـ Rust. لطالما كان الأمر C++، لكنهم الآن يدعمون كتابة تعريفات الأجهزة بـ Rust، وكانت تلك خطوة كبيرة. لذا أظن أن اللغات ستظل موجودة، لأنه لا يمكنك أن تصنع لغة تناسب كل غرض. ولهذا أيضًا أظن أن عليك أن تتعلم لغات متعددة، لأن المواقف المختلفة تتطلب لغات مختلفة. فتستطيع أن تحاول... إنه مثل استخدام... ما هو؟ المطرقة كمنشار. لا أعرف ما هو التعبير. Jonathan: التعبير؟ إنه مثل: حسنًا، تحتاج إلى منشار، لكن ليس لديك سوى مطرقة. ماذا ستفعل؟ حسنًا. Erik: أجل، أجل، شيء من هذا القبيل. إنه... أظن أنه بمسمار ومطرقة، شيء من هذا القبيل، لكنني لستُ بارعًا في الأمثال الإنجليزية، ولن أزعجك بالنسخة الهولندية. لكن المعنى أساسًا: إن كنت تعرف C sharp فقط، فقد يكون هناك إغراء لاستخدام C sharp في كل شيء، لكن قد تكون هناك لغات أفضل لبرمجة الأنظمة أو، لا أعرف، للذكاء الاصطناعي، من C sharp؛ فرغم أنك تستطيع فعل ذلك بـ C sharp، فإن ذلك لا يعني أن عليك أن تفعله. فإن كنت تعرف لغات أكثر، فستكون على الأرجح أقدر على اتخاذ خيار جيد، خيار أنسب للمجال الذي تعمل فيه. Jonathan: حسنًا، فهو ممتع وجميل. بخصوص مجتمع Exercism، ما التوصية التي ستعطيها لمجتمع Exercism هذا الأسبوع، والتي ترى أنهم يجب أن يجربوها بشدة؟ ويمكن أن تكون في أي شيء، قد تكون، كما تعلم، اذهب في نزهة. جرّب الوقوف على يديك. لا أعرف. حسنًا، يمكنك أن تقدم أكثر من توصية إن أردت... أعرف بالفعل ما سأقوله، فيمكنك أن تقدم ثلاث توصيات. Erik: فهو ممتع ومفيد. أعرف بالفعل ما سأقوله. حسنًا. حسنًا، أول ما يخطر ببالي هو أن تتفقد تبويب Dig Deeper الذي لدينا الآن. فقد بدأنا... أضفنا الميزة الجديدة Dig Deeper، حيث يمكنك، بعد أن تحل تمرينًا أو على الأقل بعد أن تعمل عليه وتكرر المحاولة، أن ترى الأساليب، أي الطرق المختلفة التي يمكن بها حل التمرين. وهذه أساسًا هي الطريقة التي كان الجميع يتعلم بها في Exercism V1، مقارنة بالتعليقات الإضافية: النظر إلى كود الآخرين ورؤية كيف حلوا الأمر. وبهذه الطريقة تعلمت Haskell كثيرًا، إلى جانب تعليقاتي. مجرد أن ترى: أوه، يمكنك أن تفعلها هكذا. ثم تجربها بنفسك وتقول: أوه، هذا أنيق حقًا، ويمكنني أن أفعل به أشياء أكثر، ثم تطبق ذلك على تمارين أخرى. فالقدرة على إيجاد هذه الطرق المختلفة لفعل الأشياء تعود بك نوعًا ما إلى الفن الكامن في البرمجة، أي قدرتك على حل الأمور بطرق مختلفة. فهناك هذه الأساليب المختلفة. فقد كتبت مقالات وأساليب عن عكس سلسلة نصية. وهذا أحد أسئلة المقابلات الأساسية في مقابلات تقنية المعلومات: كيف تعكس السلسلة النصية؟ في C sharp هناك عدة طرق أصيلة مختلفة، لكنها متباينة ولها خصائص أداء مختلفة، وإحداها تركز بشدة على الأداء لكنها أقل قابلية للقراءة. لذا يعجبني أنه على الموقع، بعد أن تحلها بطريقة معينة، يمكنك أن تقول: هناك طرق أخرى أيضًا، وهذه فوائد فعلها بتلك الطريقة، وهذه المقايضات. وليس فقط أنك ترى الأسلوب المختلف، بل نحاول أيضًا أن نكتب مستندًا تقديميًا نساعدك فيه على الاختيار بينها. فهناك دائمًا مقايضات في مجال التقنية، ولا يوجد تقريبًا حل هو الأفضل بإطلاق. فدائمًا يمكنك أن تكتب الأشياء بطريقة مختلفة. فهي غالبًا... نعم. فالحل الأكثر قابلية للقراءة ليس دائمًا الأفضل أداءً. فنساعدك على الموازنة بين المقايضات وفهمها والاختيار بين الأساليب المختلفة. وهذا أيضًا شيء نحاول فعله في تبويب Dig Deeper. وقد كنت أكتبها في وقت فراغي مؤخرًا. وأستمتع كثيرًا بمجرد كتابة هذه المعلومات ومشاركتها مع الناس. لذا أشجع الناس حقًا على تجربة كتابتها أو مجرد قراءة الأساليب. أعرف أن ليس كل تمرين لديه أساليب. بدأنا هذه الميزة قبل أسبوع فقط، لذا ستقتصر في البداية على بضعة تمارين في C sharp، لكننا سنوسّعها كثيرًا. ونحن نقبل طلبات السحب من المجتمع لهذا النوع من الأمور، وسأساعدك بسرور في الكتابة وإتمام الأمر، ويمكنك أن تشارك معرفتك بلغتك. أظن أن هذا شيء يحبه الناس دائمًا: إذا أحبوا لغة، أحبوا أن يحبها الآخرون أيضًا. فالأساليب طريقة جميلة جدًا لاستعراض ما تستطيع لغتك فعله. اذهب وتفقّدها. أجل. Jonathan: اذهب وتفقّدها. هل لديك توصيات أخرى لهذا الأسبوع؟ Erik: حسنًا، مع خطر أن أبدو شخصًا منغمسًا في Exercism تمامًا، فإنني أحب منتدى Exercism حقًا. ومن الأمور التي اكتشفتها في مسيرتي أن العثور على مجتمع من الناس بعقلية تقنية يكون بمثابة مساحة آمنة، يمكنك أن تناقش فيها الأمور دون أن يجعلك آخرون تشعر بأنك غبي، أو أن يجرّوك إلى جدال أو مشاكسة، أمر صعب جدًا. لذا يعجبني حقًا كيف نحاول أن نجعل المنتدى مكانًا آمنًا وسعيدًا جدًا للناس، وكذلك مكانًا يمكنك أن تلتقي فيه بمبرمجين بارعين جدًا، أشخاص ذوو مهارات عالية ولديهم رؤى رائعة في لغاتهم أو في مجال البرمجة. وأنا أستمتع حقًا بمجرد قراءة ما يكتبه الآخرون. هناك موضوع نقاش عن كتب البرمجة المفضلة لديك. وقد أضفت بالفعل بعض الكتب إلى قائمتي القصيرة من الكتب التي أريد قراءتها، لأن... أجل، أنت لا تصادف كل كتاب بنفسك، لكن آخرين قرأوه، فيمكنك أن تستفيد من حكمة الجماعة. أساسًا... Jonathan: فيستفيد الناس، ثم نتمكن من الاستفادة من حكمة الجماعة أساسًا، ذلك الموضوع، وأنا واثق أنه سيكون هناك ذهب حقيقي نستخرجه منه. لكن أعني، كما تعلم، هذا رائع حقًا يا Eric. أظن أنك إن أردت تقديم توصية أخرى فمرحبًا بك، وإلا فسنبدأ نجمع الأمور قليلًا. لكن هل لديك أي أفكار أو تعليقات إضافية؟ نعم، لنواصل المشاركة. Erik: حسنًا... أجل، هذا سيظهر في الفيديو. لا، ليس فعلًا. كنت أحاول أن أجد توصية ثالثة. Jonathan: وأنا حقًا، أبحث دائمًا عن توصية ثالثة. في تلك الحالة، أكثر من اللازم. لكن يا Eric، شكرًا جزيلًا على وقتك. كان رائعًا حقًا أن أسمع قصتك، وأن أسمع كيف انتقلت هذه الأمور إلى مجال التقنية. لقد استمتعت بشكل خاص بسماع القليل عن التاريخ، وربما هذا شيء قد ترغب في التفكير فيه ومشاركته بمزيد من التفصيل، عن كيف يتداخل التاريخ والبرمجة وكل هذا في مرحلة ما. لكن شكرًا جزيلًا. من الرائع وجودك في الفريق، وقد تعلمت منك الكثير وسأستمر في ذلك. تحية كبيرة لك، لأنك تجاوزت 100,000 نقطة سمعة على موقع Exercism. أعرف أنك ستقول إن السبب في ذلك أنك غششت، لكننا سنعتبر ذلك إنجازًا ملحوظًا على أي حال. فشكرًا جزيلًا لك. وإذا كنت تستمع إلى هذا ولم تصادف Exercism من قبل، فاذهب وتفقّد Exercism، وأنا واثق أنك ستجد Eric في مكان ما في هذا المجال. لكن يا Eric، شكرًا لك. أنا ممتن حقًا. سأوقف هذا التسجيل ويمكننا أن نتواصل بعد ذلك، لكن شكرًا على وقتك. وآمل أنك استمتعت كما استمتعت أنا. كان هذا رائعًا. Erik: لا مانع لدي. رائع. لقد استمتعت، أجل. شكرًا جزيلًا.

المزيد من قصص مجتمعنا

استمع وتعلّم واستلهم من أعضاء مجتمعنا.