مستوحاة من الإنتاج وكرة السلة: كيف تستعد ياندكس بطولة البرمجة

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

صورة

يجب على جميع المشاركين أولاً التغلب على جولة التأهيل. بعد التقديم ، سوف تختار متى تأخذه. التأهيل هو 4 ساعات ويشمل 4 إلى 6 مهام. سوف ندعو الأفضل للمشاركة في النهائيات ، التي ستعقد في 1 يونيو ، على الإنترنت أيضًا. سيتم الإعلان عن النتائج في الخامس من يونيو. سيحصل الفائزون في كل اتجاه على 300 ألف روبل ، والمركز الثاني - 150 ألف روبل ، والثالث - 100 ألف روبل. التسجيل مفتوح وسيستمر حتى آخر يوم من جولة التأهيل - 26 مايو ، لكن من الأفضل إرسال الطلب مبكرًا.

في هذا المنشور سوف نشارك تجربة إجراء مثل هذه المسابقات - من حيث الجمهور وإعداد المشاكل الخوارزمية المعقدة.

* * *

تمثل البطولة تطوراً للفكرة التي طبقناها في 2017-2017 في سلسلة Yandex.Blitz. الفرق هو أن Blitz كان مجرد سلسلة من المسابقات المنفصلة في اتجاهات مختلفة. تم توحيدهم فقط من خلال التنسيق ، وأنها وقعت في أوقات مختلفة تماما. تأكد من قراءة habrastati مع تحليل المهام لكل مسابقة: في التعلم الآلي ، والواجهة الخلفية ، وتطوير الواجهة الأمامية والجوال .

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

لماذا يستحق المشاركة؟


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

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

الإنتاج مثل


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

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

أفكار الأفكار


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

شروط "التنظيف"


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

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

ما نتحقق منه


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

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

تحليلات المنافسة


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

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

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

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

Source: https://habr.com/ru/post/ar449602/


All Articles