مجيء البرمجة: منافسة من أحاجي تنشر البهجة في عالم البرمجة

10 دقائق
مجيء البرمجة
حقوق الصورة: نيو ستاك.

بحلول منتصف ليل 1 ديسمبر/ كانون الأول، 2015، عندما أطلق إريك واستل تحديه البرمجي السنوي الذي يتضمن أحجية يومية بطابع بابا نويل، والذي يحمل اسم مجيء البرمجة (تيمناً باسم مجيء الميلاد أي الأيام التي تسبق ذكرى ميلاد السيد المسيح)، كان 81 شخصاً قد سجلوا أسماءهم للمشاركة. وقد كان هذا موافقاً لخطته الأولية التي كانت مخصصة لاستيعاب 70 مشاركاً. تراءى لواستل أن هذه التسلية قد تثير اهتمام بضعة أصدقاء، وربما بعضاً من أصدقائهم أيضاً.

ولكن واستل، وهو مهندس برمجيات يعمل كمشرف أساسي في "تي سي جي بلاير" (TCGPlayer)، وهي سوق على الإنترنت لألعاب البطاقات، فشل في توقع مدى التأثير التكراري المُعدي لوسائل التواصل الاجتماعي في تجاوز توقعاته المتواضعة. ويقول مازحاً إن المصطلح التقني المستخدم لما حدث بعد ذلك هو: "يا للهول، كلا!" فخلال 12 ساعة، وصل عدد المشتركين إلى 4,000 شخص. وكاد الخادم أن يصل إلى مرحلة الانهيار. وبعد 48 ساعة، وصل العدد إلى 15,000 شخص، وبحلول نهاية الحدث في 25 ديسمبر/ كانون الأول، وصلت المحصلة النهائية إلى 52,000. في السنة التالية، قام بنقل العملية إلى منصة خدمات أمازون ويب للحوسبة السحابية (AWS)، وأخذت الأرقام بالتصاعد منذ ذلك الحين.

وفي السنة الماضية، وربما بسبب الوباء، شهد هذا الحدث ارتفاعاً حاداً في التفاعل على الشبكة بنسبة 50%، مع وصول العدد إلى أكثر من 180,000 شخص في كافة أنحاء العالم.

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

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

اقرأ أيضاً: كيف تعلم آبل البرمجة للأطفال عبر اللعب

متعة البرمجة

في منتصف الليل بتوقيت شرق الولايات المتحدة (يعيش واستل في مدينة بوفالو بولاية نيويورك)، وفي كل ليلة من 1 إلى 25 ديسمبر/ كانون الأول، تظهر أحجية جديدة على موقع adventofcode.com، مدمجة في سياق رواية بطابع يتعلق بالميلاد المجيد بصياغة متقنة، وقد وصف أحد اللاعبين القصة بأنها "ذريعة للأحجية، إن جاز التعبير".

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

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

يكسب كل لاعب نجمة ذهبية لقاء حل المسألة الواحدة، ولكن إذا كنت أول من يحصل على النجمة، ستحصل أيضاً على 100 نقطة، أما إذا كنت الثاني، فسوف تحصل على 99 نقطة، وهكذا وصولاً إلى صاحب الرتبة المئة، والذي يحصل على نقطة واحدة.

وكما يشرح مشرف الأحاجي: "حتى تنقذ عيد الميلاد، يجب أن تحصل على جميع النجوم الخمسين بحلول الخامس والعشرين من ديسمبر/ كانون الأول".

مجيء البرمجة
حقوق الصورة: إم إس تك/ مجيء البرمجة.

يهدف تحدي مجيء البرمجة إلى حل الأحاجي باستخدام لغة برمجة من اختيارك (لغة بايثون هي الأكثر شيوعاً). أيضاً، يستخدم المشاركون أي أساليب أخرى ممكنة، بدءاً من جداول برنامج إكسل، أو كما يصفه واستل "جنون إكسل"، وصولاً إلى أكوام من أوراق الأشكال البيانية، بل إن عدداً مثيراً للدهشة من المشاركين يقومون بحل الأحاجي في لعبة ماينكرافت.

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

أما على قمة لوحة النتائج العالمية، والتي تتضمن تصنيف أفضل 100 لاعب مع أعلى نتائج إجمالية، فإن المبرمجين التنافسيين مثل برايان تشين (والذي يحمل الاسم الرمزي "بيتافيروس") وآندرو هي ("إكنيروالا") يسعون إلى تحقيق أعلى النتائج بأقصى سرعة. حقق تشين، وهو مهندس برمجيات حماية يعمل على التشفير بين الطرفيات في منصة زوم، المرتبة الأولى في السنة الماضية (والسنة التي قبلها)، على حين أتى هي في المرتبة الثانية بفارق صغير.

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

تشين و"هي" خريجا علوم الحاسوب من جامعة إم آي تي، ويعيشان في منطقة خليج سان فرانسيسكو، وتربطهما علاقة منافسة ودية، فقد تنافسا معاً في العديد من تحديات البرمجة على مدى عدة سنوات، في نفس الفريق ضمن المسابقة البرمجية الجامعية العالمية (ICPC)، أو كخصمين ضمن مسابقات كورفورسز ومسابقات جوجل كود جام. وهذه السنة، تغلب تشين من جديد على "هي". يقول "هي"، وهو مهندس مؤسس في الشركة الناشئة مودال التي تبني البنى التحتية والأدوات لفرق البيانات: "بصراحة، هو أبرع مني بقليل ي العديد من الحيل وأساليب التطبيق التي تزيد من السرعة، ولكنني لا أحب أن أعترف بهذا".

بطبيعة الحال، فإن لوحة النتائج العالمية تقع خارج نطاق قدرات أغلب المشاركين، خصوصاً مع تزايد صعوبة الأحاجي يوماً بعد يوم. فقد احتلت كاثرين تانغ، والتي تدير فريقاً للعمليات الهندسية في "شوبيفاي" (Shopify)، المرتبة 36 في اليوم الأول، وبقيت عالقة في المركز 81 بحلول اليوم الثالث، ولكنها عرفت أن موقعها على لوحة النتائج لن يدوم طويلاً. وتقول: "أنا أقوم بهذا بدافع المرح باستخدام جوجل شيتس".

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

وقد قال المهندس أليك بريكنر، في تعليق ضمن قناة سلاك في "برايمر دوت إيه آي" (Primer.ai)، وهي شركة ناشئة خاصة بمعالجة اللغات الطبيعية: "إن التنافسية تساعد على الالتزام" (تمكن بريكنر من الوصول إلى لوحة النتائج ليومين حتى وقت كتابة هذا المقال).

ورد زميله مايكل ليكام: "لا يهمني، إن المكافأة الحقيقية بالنسبة لي هي متعة البرمجة".

ووافق جون بوهانون، مدير برايمر العلمي، على هذا الرأي مستخدماً الإيموجي: "وأنا كذلك".

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

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

اقرأ أيضاً: أفضل 5 لغات برمجة لتطوير تطبيقات الهواتف الذكية

يمكنك أن تحبه أو تكرهه

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

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

وقد وجد هيلمستيدر أن بعض طلابه شعروا بالارتباك إزاء التحدي الثنائي –أي استيعاب المسألة ومن ثم كتابة برنامج لحلها- ولكن معظمهم تقبل هذا التحدي الصعب. وقد قال أحد الطلاب في استبيان: "تعجبني صعوبة التحديات". وقال آخر: "بصراحة، لا توجد أي سلبيات، ويعجبني أسلوب العمل بالتقدم تدريجياً نحو تحقيق هدف معين". وعلى الرغم من أن سؤال الاستبيان متعدد الخيارات حول "المشاعر" إزاء الحدث أدى إلى إجابة واحدة تقول "أكرهه"، فقد وردت 41 إجابة تقول: "أعجبني" (بدرجات مختلفة)، و8 إجابات تقول: "لقد أحببته".

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

وقد جرب غريغور كيكلج -وهو طالب يدرس الرياضيات في السنة الثالثة في الجامعة- المشاركة في مجيء البرمجة في 2019. وأبلى حسناً بما يكفي للحصول على فترة تدريبية في شركة "كوما دوت إيه آي" (Comma.ai) (التي تعمل على برنامج أوبن بايلوت لأنظمة قيادة السيارات شبه الآلية)، بما أن مؤسس الشركة كان أيضاً من المشاركين في المنافسة. كما تمكن كيكلج من تعزيز درجاته في مادة البرمجة (مع أستاذ آخر)، لأن حل كل مسألة كان يكافئ درجات إضافية في الامتحان النهائي، مع درجات أكثر عند الفوز بمكان على لوحة النتائج.

وكان كيكلج ("غريكيكي") ينهض باكراً كل صباح عند طرح الأحجية الجديدة –في السادسة صباحاً بتوقيت سلوفينيا- وفاز بالمرتبة 52 على لوحة النتائج، وتمكن من الحصول على ما مجمله 23 علامة إضافية في الامتحان. ويستذكر قائلاً: "بعد تلك السنة، قامت الإدارة بتحديد عدد العلامات التي يمكن الفوز بها بهذه الطريقة بخمس علامات". ولكنه ما زال حتى الآن ينهض باكراً للانقضاض على الأحجية. وفي هذه السنة، حقق أفضل مرتبة في اليوم الخامس، حيث وصل إلى المرتبة 25، على أمل البقاء ضمن المئة الأوائل. ويقول: "سنرى ما سيحدث عندما تزداد صعوبة المسائل".

اقرأ أيضاً: شريحة إلكترونية تغير تعليماتها البرمجية آنياً للتصدي للاختراق

كيفية الوصول إلى لوحة النتائج

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

أما مجموعة مجيء البرمجة على موقع ريديت، وهي إحدى المجتمعات الكثيرة المنتشرة على الإنترنت، فهي مليئة بالنقاشات الغنية بالخبرات والمعلومات الدقيقة حول كيفية التقدم (باستخدام الحلول ومواضيع المساعدة، ناهيك عن السخرية الذاتية والميمات). ولكن ربما كانت مدونة برايان تشين حول "كيفية تحقيق الانتصار في لوحة النتائج" هي أفضل مصدر.

حيث يتعمق تشين في النصائح العامة مثل: "إياك وكتابة أخطاء برمجية"، و"إذا كتبت أي أخطاء برمجية، يجب أن تكشفها مبكراً". و"انطلق بسرعة" و"تخلّ عن أية أمور غير ضرورية بحيث تستطيع البرمجة بسرعة أعلى" و"اكتب تعليمات برمجية للاختراق" و"تعامل مع التعليمات البرمجية بطريقة النسخ واللصق" و"استخدم الثوابت (المتحولات التي تحمل قيماً ثابتة) ضمن البرنامج" و"قم بتحويل البيانات (Mutation) بشكل صريح" و"استخدم الاستثناءات للتحكم في سير تنفيذ البرنامج" وحول المتحولات البوليانية إلى أعداد صحيحة (بشكل قسري) واستخدمها كمؤشرات" و"قم بتمثيل البيانات على شكل سلاسل من المحارف حتى عندما لا يتعين عليك القيام بذلك على الإطلاق" و"كن فخوراً".

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

وعند كتابة البرنامج، يحاول بيتر نورفيغ أن يتذكر مبدأ ياغني YAGNI (اختصار بالإنجليزية لعبارة "أنت لن تحتاجه").

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

ويشرح نورفيغ قائلاً: "إن أحد أسس فكرة مجيء البرمجة هو ضرورة اتخاذ بعض الخيارات التصميمية لحل الجزء الأول من الأحجية قبل إمكانية رؤية توصيف الجزء الثاني، ولهذا، فهناك نوع من التشويق في رغبتك بأن يتضمن حل الجزء الأول العناصر الأساسية اللازمة التي يمكن أن تُستخدم في حل الجزء الثاني، دون الوقوع في فخ ياغني".

وإضافة إلى فعل كل ما يمكن فعله للبرمجة بسرعة ودون أخطاء، فإن أهم نصيحة يقدمها تشين هي نصيحة أساسية، وإن كانت غير بديهية: "كن متفرغاً لحظة طرح الأحجية". ففي 2018، قام بحل إحدى الأحاجي عندما كان في حفلة كاريوكي مع بعض الأصدقاء. ويقول: "توقفت قليلاً، وفتحت الحاسوب المحمول، وأنهيت العمل جالساً في الزاوية، ومن ثم عدت إلى الكاريوكي، وبالطبع، فقد كانت سرعتي عاملاً مساعداً"، على الرغم من أن المطاف انتهى به في المرتبة الثانية تلك السنة. وفي 2019، قام بحل مسألة اليوم 17 مستخدماً اتصالاً ضعيفاً لشبكة الواي فاي أثناء رحلة من سان فرانسيسكو إلى تايبيه، وبعدها أنجز حل المسألة لليوم 22 على هاتفه (سراً) أثناء حضوره زفاف أحد أقاربه.

ويقول خصمه جيوفري سونغ ("غوفري")، وهو مهندس برمجيات في "دروب بوكس" (Dropbox) وأحد الساعين إلى المرتبة الأولى: "يا له من مبرمج هائل!"

وفي سعيه لتحقيق الأفضلية، يعتمد سونغ على مسابقة الطباعة السريعة تايب ريسر لتمرين عضلات أصابعه مسبقاً. كما أن جميع اللاعبين المتنافسين يضبطون ساعة المنبه على توقيت يسبق طرح الأحجية بخمس دقائق، وذلك حتى يكون أمامهم متسع من الوقت للاستعداد الذهني والجلوس بشكل مستقر أمام لوحة المفاتيح. وحتى في هذه الحالة، يمكن أن يحدث أي شيء. ففي هذه السنة، في اليوم الثاني، انتفض آندرو هي –الذي يسكن في منطقة خليج سان فرانسيسكو- مستعداً عندما رن المنبه في الساعة 8:55 مساءً بتوقيت منطقة المحيط الهادئ. وبعد أن جلس أمام الحاسوب وجهز مساحة العمل على الشاشة، بقي أمامه خمس دقائق من وقت الفراغ حتى يضيعه كيفما اتفق. ولكن، وقبل أن ينتبه، كان قد ضيع على نفسه 10 دقائق. يقول هي: "لقد كان مجرد حادث، فقد تشتت انتباهي، ولم أبدأ حتى الساعة 9:05".

ولكن، وبحلول ذلك الوقت، كان كل شيء قد انتهى. حل تشين مسائل ذلك اليوم في 66 ثانية و39 ثانية على الترتيب. ولكن، في هذه الأثناء، فوت على نفسه الكثير من النقاط. ويقول: "من الممكن دون شك تعويضها، ولكنني لست متأكداً، كما تعرفون... سأحاول، وسنرى ما سيحدث". (ويلحظ أن تشين فوت يوماً كاملاً في السنة الماضية، ولكنه فاز على أي حال ببراعة).

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

المحتوى محمي