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

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

اسمي يوليا سيريديتش، لقد كتبنا هذا المنشور مع سيرجي كازاكوف. كلانا مطورو واجهات في مكتب Yandex في مينسك وخريجون SRI من السنوات السابقة.

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

بمناسبة افتتاح التسجيل في موسكو، ننشر تحليلاً للمهام التمهيدية للمدرسة السابقة - هنا في مينسك.

إذا قمت بتتبع تاريخ مهام SRI، فمن سنة إلى أخرى قمنا باختبار ثلاث مهارات مهمة للمبرمج:

  • تَخطِيط. يجب أن يكون كل مطور قادرًا على القيام بالتخطيط. لا يحدث أن يكون لديك العم Seryozha الذي يصمم للفريق بأكمله، وأنت تكتب النصوص فقط. لذلك، يجب على كل طالب أن يوضح كيف يعرف كيفية التنضيد.
  • جافا سكريبت. ولو اقتصر الأمر على التخطيط، فلن يكون لدينا مدرسة لتطوير الواجهات، بل مدرسة لمصممي التخطيط. الواجهة المصممة بشكل جميل تحتاج إلى إحياء. لذلك، هناك دائمًا مهمة لـ JS، ولكنها في بعض الأحيان تكون أيضًا مهمة للخوارزميات - فنحن نحبها كثيرًا.
  • ربما يكون حل المشكلات هو أهم مهارة للمطور. عندما يتعلق الأمر بإنشاء واجهات، فإن الأمور تتغير بسرعة كبيرة. إنه مثل لويس كارول: "عليك أن تجري بأسرع ما يمكن فقط لتبقى في نفس المكان، وللوصول إلى مكان آخر عليك أن تجري بسرعة مضاعفة." نواجه كل يوم تقنيات جديدة - وعلينا أن نأخذها بعين الاعتبار وأن نكون قادرين على فهمها. لذلك، في المهمة الثالثة، اقترحنا فهم التقنيات التي عادة لا يكون المطور المبتدئ على دراية بها.

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

المهمة 1: المحفظة

تم تنفيذ المهمة الأولى بواسطة مصمم Yandex.Collections Alexey Cherenkevich، الذي يعرف كيفية القيام بالتخطيط، وزميله في الخدمة، مطور الواجهة سيرجي سامسونوف.

حالة

أنشئ موقعًا إلكترونيًا للمحفظة: أخبرنا عن نفسك وعملك وتوقعاتك من المدرسة. يجب أن يتوافق الموقع قدر الإمكان مع التصميم المقترح (روابط للتخطيطات: 1000px, 600px, 320px, تخصيص). نحن مهتمون فقط بالتخطيط، لذا يرجى عدم استخدام JavaScript.

عند التدقيق سنأخذ في الاعتبار:

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

الميزة ستكون:

  • استخدام حلول CSS الحديثة: flexbox، وgrid، وما إلى ذلك؛
  • تخطيط التكيف.
  • استخدام المعالجات المسبقة و (أو) اللاحقة، والتجميع، والتصغير، وتحسين كود الإخراج؛
  • التحقق من صحة نموذج HTML، زر تحميل الملف المنمق.

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

لم تكن التخطيطات المقترحة في المهمة مخصصة فقط لشاشات الأجهزة المحمولة والأجهزة اللوحية وأجهزة الكمبيوتر المكتبية، ولكن أيضًا بمواصفات حقيقية.

من أجل تحقيق أكبر قدر ممكن من الموضوعية في نتيجة التحقق من المهمة الأولى، كان هناك الكثير من المعايير لهذا الاختيار.

معايير

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

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

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

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

العمل المنزلق. لقد كتبنا في المهمة أنه لا يمكن استخدام JS. هنا تم اختبار القدرة على حل المشكلات - يمكن عمل شريط تمرير باستخدام مجموعة و . كل السحر يحدث على مستوى المحدد #button-N:checked ~ .slider-inner .slider-slides. عندما نضغط على أحد مربعات اختيار الإدخال، فإنه ينتقل إلى الحالة المحددة. يمكننا الاستفادة من هذا وتخصيص الترجمة التي نحتاجها للحاوية التي تحتوي على الشرائح: تحويل: ترجمة (-33%). يمكنك رؤية تنفيذ شريط التمرير هنا.

القوائم المنسدلة. هنا جاء كل ذلك أيضًا ومحدد مشابه: .accordion-item input:checked ~ .accordion-item__content. يمكنك رؤية التنفيذ هنا.

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

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

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

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

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

التوافق عبر المتصفحات. لقد تحققنا من أن كل شيء على ما يرام في الإصدارين الأخيرين من المتصفحات الحديثة (بدون IE - كان المشاركون محظوظين)، وكذلك في Safari على أجهزة iPhone وChrome على أجهزة Android.

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

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

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

المهمة 2: طريق النقل

مؤلف المهمة هو رئيس مجموعة واجهات البحث دينيس باليكو.

حالة

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

توقيع الوظيفة:

const solution = function(graph, start, finish)  {
    // Ваше решение
} 

مثال على بيانات الإدخال:

const graph = {
  start: { A: 50, B: 20 },
  A: { C: 40, D: 20 },
  B: { A: 90, D: 90 },
  C: { D: 160, finish: 50 },
  D: { finish: 20 },
  finish: {}
};
const start = 'start';
const finish = 'finish'; 

مثال الإخراج:

{
    distance: 90,
    path: ['start', 'A', 'D', 'finish']
} 

ملحوظة: هيكل الحل موجود في المجلد src/، ضع الحل في Solution.js.

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

معايير

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

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

تم أخذ وضوح الحل وسهولة قراءته في الاعتبار بشكل منفصل. في جميع المؤتمرات في العالم يقولون أن 80% من عمل المبرمج يتكون من قراءة أكواد الآخرين. حتى تلاميذ المدارس يخضعون لمراجعة التعليمات البرمجية - من القيمين عليهم ومن بعضهم البعض. لذلك كان لهذا المعيار وزن كبير. كانت هناك أعمال لا تحتوي على متغيرات أطول من حرف واحد - من فضلك لا تفعل ذلك. وكانت تعليقات المشاركين مشجعة للغاية - باستثناء تلك التي كانت مطابقة لتعليقات ستيلا تشانغ.

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

القرار الصحيح:

const solution = function(graph, START, FINISH)  {
    // Всё не бесплатно в этом мире
    const costs = Object.assign({[FINISH]: Infinity}, graph[START]);

    // Первая волна родительских нод
    const parents = { [FINISH]: null };
    Object.keys(graph[START]).reduce((acc, child) => (acc[child] = START) && acc, parents)

    const visited = [];
    let node;

    // Ищем «дешёвого» родителя, отмечаем пройденные
    do {
        node = lowestCostNode(costs, visited);
        let children = graph[node];
        for (let n in children) {
            let newCost = costs[node] + children[n];

            // Ещё не оценена или нашёлся более дешёвый переход
            if (!costs[n] || costs[n] > newCost) {
                costs[n] = newCost;
                parents[n] = node;
            }
        }
        visited.push(node);
    } while (node)

    return {
        distance: costs[FINISH],
        path: optimalPath(parents)
    };

    // Возврат назад по самым «дешёвым» родителям
    function optimalPath(parents) {
        let optimalPath = [FINISH];
        let parent = parents[FINISH];
        while (parent && parent !== START) {
            optimalPath.push(parent);
            parent = parents[parent];
        }
        optimalPath.push(START);
        return optimalPath.reverse();
    }

    // Минимальная стоимость из текущей ноды среди непросмотренных
    function lowestCostNode(costs, visited) {
        return Object.keys(costs).reduce((lowest, node) => {
            if (lowest === null || costs[node] < costs[lowest]) {
                if (!visited.includes(node)) {
                    lowest = node;
                }
            }

            return lowest;
        }, null);
    };
};

المهمة 3: تقويم الأحداث

تم إعداده بواسطة مطوري الواجهة سيرجي كازاكوف وألكسندر بودسكريبكين.

حالة

اكتب تقويمًا صغيرًا لعرض جدولك الزمني. يمكنك أن تأخذ أي جدول زمني تريد. على سبيل المثال، جدول مؤتمرات الواجهة الأمامية في عام 2019.

يجب أن يبدو التقويم كقائمة. لا توجد متطلبات التصميم الأخرى. اجعل من الممكن ضبط تذكيرات الأحداث قبل 3 و 7 و 14 يومًا. بعد التنزيل الأول من الإنترنت، يجب أن يتم فتح التقويم ويعمل دون اتصال بالإنترنت.

موارد مفيدة

الجدول الزمني لمؤتمر الواجهة الأمامية:
confs.tech/javascript?topics=javascript%2Bcss%2Bux

عمال الخدمة:
Developer.mozilla.org/ru/docs/Web/API/Service_Worker_API/Using_Service_Workers
Developers.google.com/web/fundamentals/primers/service-workers

واجهة برمجة تطبيقات الإشعارات:
Developer.mozilla.org/ru/docs/Web/API/Notifications_API

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

معايير

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

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

تسجيل عامل الخدمة بدون أخطاء والعمل دون اتصال بالإنترنت بعد التنزيل الأول. وهنا مثال عامل الخدمة مع جدولة التخزين المؤقت عند التمهيد الأول. يمكن العثور هنا على تفاصيل حول عمال الخدمة وقدراتهم وطرق العمل معهم (استراتيجيات العمل مع ذاكرات التخزين المؤقت والعمل دون اتصال بالإنترنت).

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

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

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

أخطاء وحدة التحكم. إذا كان هناك مؤشر صحيح في وحدة التحكم بأن هناك خطأ ما، ولم ينتبه المشارك إليه، فقد قمنا بخصم النقاط.

نتائج

المضحك في قرارات المشاركين:

  • احتوى أحد الاستبيانات على النص التالي: "ساعدني صديق مبرمج في إنشاء تطبيق React. لقد قصفته بالأسئلة حول كيف ولماذا، فقال لي. لقد أحببته حقًا، وأريد أن أعرف المزيد عنه”. كنا ندعم هذا التطبيق من كل قلوبنا، ولكن لسوء الحظ، لم يكن صديق المرشح مفيدًا جدًا في نجاح التطبيق.
  • أرسل أحد المرشحين رابطًا إلى GitHub، حيث يوجد أرشيف RAR - من الصعب التعليق على هذا. 🙂
  • مرشح آخر، في التعليق على السطر الأول من ملف Solution.js، اعترف بصراحة أنه قام بنسخ الخوارزمية.

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

وكانت النتيجة توزيعاً مثيراً للاهتمام لمعدلات النجاح في إنجاز المهام. وأنجز المشاركون المهمة الأولى بمعدل 60%، والثانية بنسبة 50%، أما الثالثة فقد تبين أنها الأصعب وتم إنجازها بمعدل 40%.

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

أتذكر رؤيتي لمهمة القبول في SRI قبل عامين واعتقدت أنني لن أتمكن من حلها أبدًا. الشيء الرئيسي في هذه اللحظة هو الجلوس وقراءة الشروط بعناية والبدء في القيام بذلك. وتبين أن الشروط تحتوي على ما يقرب من 80٪ من الحل. على سبيل المثال، في حالة المهمة الثالثة (الأصعب)، أضفنا روابط لعمال الخدمة وNotifications API على MDN. الطلاب الذين درسوا محتويات الروابط أكملوها دون صعوبة.

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

المصدر: www.habr.com

إضافة تعليق