مدرسه توسعه رابط: تجزیه و تحلیل وظایف برای مینسک و مجموعه ای جدید در مسکو

امروز یک ثبت نام جدید افتتاح شد دانشکده توسعه رابط Yandex در مسکو. مرحله اول آموزش از 7 شهریور تا 25 مهرماه برگزار می شود. دانش آموزان شهرهای دیگر می توانند از راه دور یا حضوری در آن شرکت کنند - شرکت هزینه سفر و اقامت در خوابگاه را پرداخت می کند. مرحله دوم، همچنین مرحله نهایی، تا 3 دسامبر ادامه خواهد داشت، فقط می تواند به صورت حضوری انجام شود.

نام من یولیا سردیچ است، ما این پست را به همراه سرگئی کازاکوف نوشتیم. ما هر دو توسعه دهنده رابط در دفتر مینسک Yandex و فارغ التحصیل SRI از سال های گذشته هستیم.

مدرسه توسعه رابط: تجزیه و تحلیل وظایف برای مینسک و مجموعه ای جدید در مسکو

به مناسبت افتتاحیه ثبت نام در مسکو، ما تحلیلی از وظایف مقدماتی مدرسه قبلی - اینجا در مینسک - منتشر می کنیم.

اگر تاریخچه تکالیف SRI را دنبال کنید، سال به سال ما سه مهارت مهم را برای یک برنامه نویس آزمایش کردیم:

  • چیدمان. هر توسعه دهنده باید بتواند طرح بندی را انجام دهد. این اتفاق نمی افتد که شما عمو سریوژا را داشته باشید که برای کل تیم طراحی می کند و شما فقط فیلمنامه می نویسید. بنابراین، هر دانش آموز باید نشان دهد که چگونه حروفچینی را می داند.
  • جاوا اسکریپت. اگر موضوع به چیدمان محدود می شد، ما مدرسه توسعه رابط نداشتیم، بلکه مدرسه طراحان چیدمان داشتیم. رابط کاربری زیبا طراحی شده باید احیا شود. بنابراین، همیشه یک وظیفه برای JS وجود دارد، اما گاهی اوقات این کار برای الگوریتم ها نیز وجود دارد - ما آنها را بسیار دوست داریم.
  • حل مسئله شاید مهم ترین مهارت یک توسعه دهنده باشد. وقتی صحبت از ایجاد رابط ها می شود، همه چیز به سرعت در حال تغییر است. شبیه لوئیس کارول است: "شما باید تا جایی که می توانید سریع بدوید تا در همان مکان بمانید و برای رسیدن به مکان دیگری باید دو برابر سریعتر بدوید." هر روز با فناوری های جدیدی روبرو می شویم - باید آنها را در نظر بگیریم و بتوانیم آنها را درک کنیم. بنابراین، در کار سوم، ما برای درک فناوری‌هایی که یک توسعه‌دهنده تازه کار معمولاً با آنها آشنا نیست، پیشنهاد کردیم.

در تجزیه و تحلیل هر کار، ما نه تنها در مورد روش صحیح، بلکه در مورد اشتباهات رایج نیز به شما خواهیم گفت.

وظیفه 1: نمونه کارها

اولین کار توسط طراح Yandex.Collections، Alexey Cherenkevich، که می داند چگونه چیدمان را انجام دهد، و همکار خدمات خود، توسعه دهنده رابط، سرگئی سامسونوف، روی آن کار کردند.

وضعیت

یک وب سایت نمونه کارها ایجاد کنید: درباره خودتان، کار و انتظاراتتان از مدرسه به ما بگویید. سایت باید تا حد امکان با طرح پیشنهادی مطابقت داشته باشد (پیوندها به پوسته ها: 1000px, 600px, 320px, مشخصات). ما فقط به طرح بندی علاقه مندیم، بنابراین لطفا از جاوا اسکریپت استفاده نکنید.

هنگام بررسی ما موارد زیر را در نظر خواهیم گرفت:

  • اندازه های تورفتگی، صحت رنگ، سبک فونت، اندازه فونت.
  • طرح معنایی؛
  • وجود حالت های مختلف عناصر: نمایش دکمه ها و پیوندها هنگام نگه داشتن مکان نما، برجسته کردن فیلدهای ورودی فعال و غیره.
  • سازگاری بین مرورگرها (تست شده در آخرین نسخه مرورگرهای محبوب).

مزیت این خواهد بود:

  • استفاده از راه حل های مدرن CSS: flexbox، grid و غیره.
  • طرح تطبیقی؛
  • استفاده از پیش و (یا) پس پردازشگر، مونتاژ، کوچک سازی، بهینه سازی کد خروجی.
  • اعتبار سنجی فرم HTML، دکمه آپلود فایل تلطیف شده.

این کار بسیار حجیم است، بنابراین می توانید از مواردی که کار نمی کنند بگذرید. با این کار امتیاز شما اندکی کاهش می یابد، اما همچنان می توانید دانش خود را نشان دهید. وقتی کارتان تمام شد، دو پیوند را برای ما ارسال کنید - به نمونه کارها و کد منبع در GitHub.

طرح‌بندی‌های پیشنهادی در این تکلیف نه تنها با صفحه‌نمایش‌های دستگاه‌های موبایل، تبلت‌ها و دسکتاپ‌ها، بلکه با مشخصات واقعی نیز بود.

برای اینکه تا حد ممکن عینیت را در نتیجه بررسی کار اول بیاوریم، معیارهای زیادی برای این بررسی وجود داشت.

ضوابط

وب سایت طراحی شده. این امر بدیهی به نظر می رسد، اما برخی از بچه ها به طور کامل از برخی بلوک ها عبور کردند - یا می خواستند در زمان خود صرفه جویی کنند، یا نمی توانستند آنها را انجام دهند. طرح را می توان تقریباً به چهار صفحه اصلی تقسیم کرد: صفحه اصلی با یک آواتار، یک بلوک با لیستی از انتظارات از SRI، یک بلوک با نمونه کارها و یک بلوک با اطلاعات تماس. آنها می توانند در بخش ها یا به سادگی با استفاده از div ساخته شوند، نکته اصلی این است که هر چهار بلوک در دسترس بودند.

انطباق طرح با طرح. طراح مشخصات جداگانه ای (شامل رنگ ها، تایپوگرافی، حالت دکمه ها و غیره) ایجاد کرد تا کار را برای کاندیداها آسان کند. در پایین اشاره ای به تورفتگی ها و ویژگی های صفحه اول وجود داشت. من از بچه هایی که تمام خواسته های طراح را در نظر گرفتند بسیار خوشحال شدم: به عنوان مثال، صفحه اول نباید کمتر از ارتفاع نما باشد.

چیدمان تطبیقی - این زمانی است که رابط فقط طوری تنظیم نشده است که در سه رزولوشن همه چیز در طرح بندی پیکسل به پیکسل باشد. در حالت های میانی، چیدمان نیز نباید از هم بپاشد. برخی فراموش کردند حداکثر عرض ظرف را محدود کنند و همه چیز را روی 1920 پیکسل تنظیم کنند، برخی پس‌زمینه را به هم ریختند، اما در کل نامزدها به خوبی از عهده این کار بر آمدند.

طرح بندی معنایی. "چند بار به دنیا گفته اند" که یک پیوند باید به عنوان طراحی شود، یک دکمه - به عنوان . خوشبختانه اکثر نامزدها این شرط را نیز برآورده کردند. همه لیست پنهان را در انتظارات SRI تشخیص ندادند، و آن را با استفاده از برچسب های div درست کردند، اما آنقدرها هم بد نیست. نامزدی وجود داشت که تمام برچسب‌های معنایی را که می‌دانست درج می‌کرد - جایی که لازم بود و جایی که لازم نبود. به عنوان مثال، به جای یک لیست - و . پس از همه، معناشناسی - در مورد درک ترکیب صفحه شما و هدف هر بلوک (اکثریت آن را در اینجا مدیریت کردند)، و همچنین استفاده از پردازشگرهای پیش و/یا پس از آن (تعدادی آن را در اینجا مدیریت کردند، اگرچه این همچنین در نقاط بود - اغلب آنها کمتر و scss استفاده می کردند).

نوار لغزنده کار. در تکلیف نوشتیم که JS قابل استفاده نیست. در اینجا توانایی حل مسائل مورد آزمایش قرار گرفت - یک نوار لغزنده را می توان با استفاده از ترکیبی از و ساخت. همه جادو در سطح انتخابگر اتفاق می افتد #button-N:checked ~ .slider-inner .slider-slides. وقتی روی یکی از چک باکس های ورودی کلیک می کنیم، به حالت علامت زده می شود. می‌توانیم از این مزیت استفاده کنیم و ترجمه مورد نیاز خود را با اسلایدها به ظرف اختصاص دهیم: transform: translate(-33%). می توانید اجرای اسلایدر را مشاهده کنید اینجا.

لیست های کشویی. در اینجا همه چیز به و یک انتخابگر مشابه رسید: .accordion-item input:checked ~ .accordion-item__content. می توانید اجرا را ببینید اینجا.

در دسترس بودن حالت های :hover، :active و :focu*. یک نکته بسیار مهم راحتی در هنگام تعامل با رابط به آن بستگی دارد. کاربر باید همیشه در مورد اقدامات خود بازخورد دریافت کند. این مورد در طول تعامل با پرسشنامه بررسی شد. اگر روی دکمه "تماس بگیرید" کلیک کردم و از نظر بصری هیچ اتفاقی نیفتاد (حتی با وجود ارسال درخواست)، این بد است، زیرا دوباره و دوباره روی آن کلیک خواهم کرد. در نتیجه ده درخواست ارسال می شود و ده بار با من تماس گرفته می شود. ما نباید فراموش کنیم که دستگاه های تلفن همراه ماوس ندارند، به این معنی که نباید شناور وجود داشته باشد. و یک نکته دیگر که تأثیری بر کسانی که به این نکته در مورد معناشناسی رسیدند، نرسید. اگر کنترل شما یک عنصر تعاملی نیست، هنگامی که ماوس را روی آن نگه دارید، مکان نما استاندارد باقی می ماند. خیلی نامرتب به نظر می رسد، حتی اگر واکنشی به شناور نوشته باشید. مکان نما: اشاره گر را دست کم نگیرید.

تصاوير متحرك. مهم است که تمام واکنش هایی که با عناصر رخ می دهد صاف باشد. هیچ چیز در زندگی آنی نیست، بنابراین داشتن انتقال در حالت شناور و فعال کافی بود تا رابط کاربری دلپذیرتر شود. خوب، کسانی که اسلایدر و لیست ها را متحرک کردند، عموما عالی هستند.

با استفاده از آخرین تکنولوژی روز. بسیاری از افراد از flex استفاده می کردند، اما هیچ کس این کار را با استفاده از grid انجام نداد. اگر از flex به درستی استفاده شده باشد، امتیاز محاسبه می شود. اگر در جایی طرح به دلیل همین خمیدگی ها از هم جدا شد، افسوس که هیچ امتیاز اضافی دریافت نکردید.

اعتبار سنجی فرم. تنها کاری که لازم بود اضافه کردن ویژگی مورد نیاز به هر ورودی فرم بود. امتیازهایی را به کسانی که فیلد ایمیل را به عنوان ایمیل تأیید کردند اضافه کردیم.

دکمه بارگذاری پرونده. انتظار داشتیم ترکیبی مانند: و انتخاب فایل را ببینیم. بعد باید ورودی را مخفی کنیم و برچسب را استایل دهیم. یک راه رایج دیگر وجود دارد - ایجاد یک ورودی شفاف و قرار دادن آن در بالای دکمه. اما همه مرورگرها اجازه نمی دهند استایل بندی شود و این راه حل را نمی توان به طور کامل بین مرورگر نامید. و از نظر معنایی درست تر است که یک برچسب بسازید.

سازگاری بین مرورگرها. ما بررسی کردیم که همه چیز در دو نسخه جدید مرورگرهای مدرن (بدون اینترنت اکسپلورر - شرکت کنندگان خوش شانس بودند) و همچنین در Safari در iPhone و Chrome در اندرویدها خوب است.

برعکس، اگر کسی از JS یا Bootstrap استفاده می‌کرد، امتیاز کسر می‌کردیم: هر دوی آن‌ها هدف کل کار را شکست می‌دادند. علاوه بر این، شرکت کنندگان با بوت استرپ نه تنها امتیاز منفی دریافت کردند، بلکه امتیازات زیادی را برای معناشناسی و عناصر پیاده سازی شده از دست دادند.

کسانی که سایت خود را در جایی در اینترنت میزبانی کردند، هیچ مزیت خاصی دریافت نکردند - اما بازبینان وقتی مجبور به دانلود مخازن و اجرای محلی آنها در رایانه خود نشدند بسیار خوشحال شدند. بنابراین این به عنوان یک مزیت برای کارما عمل کرد.

اولین کار در درجه اول برای دانش آموز بسیار مفید بود. کسانی که ما آنها را نپذیرفتیم اکنون یک رزومه آماده دارند - می توانید با افتخار آن را به همه پاسخ ها پیوست کنید یا در صفحات gh-page خود پست کنید.

وظیفه 2: مسیر حمل و نقل

نویسنده این کار رئیس گروه رابط های جستجو Denis Balyko است.

وضعیت

آیا نقشه ستاره ای دارید؟ نام هر ستاره و همچنین فاصله آن تا ستاره های دیگر را در ثانیه های نوری نشان می دهد. تابع حل را پیاده سازی کنید، که باید سه آرگومان داشته باشد: یک شی که کلیدهای آن نام ستاره ها هستند، و مقادیر فاصله تا ستاره ها (ترافیک یک طرفه در فضا) و همچنین نام ستاره ها هستند. نقاط شروع و پایان مسیر - به ترتیب شروع و پایان. تابع باید کوتاهترین فاصله از ستاره شروع تا ستاره پایان و مسیری که باید دنبال شود را برگرداند.

امضای عملکرد:

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 قرار دهید.

تأیید وظیفه دوم خودکارترین و عینی ترین بود. اکثر بچه ها حدس می زدند که پیاده سازی الگوریتم دایکسترا ضروری است. کسانی که توضیحات آن را پیدا کردند و الگوریتم را در 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: تقویم رویدادها

این توسط توسعه دهندگان رابط سرگئی کازاکوف و الکساندر پودسکربکین تهیه شده است.

وضعیت

یک تقویم کوچک بنویسید تا برنامه خود را نمایش دهید. شما می توانید هر برنامه ای را که دوست دارید انجام دهید. به عنوان مثال، برنامه کنفرانس های frontend در سال 2019.

تقویم باید شبیه یک لیست باشد. هیچ الزامات طراحی دیگری وجود ندارد. امکان تنظیم یادآورهای رویداد 3، 7 و 14 روز قبل را فراهم کنید. پس از اولین بارگیری از اینترنت، تقویم باید باز شود و به صورت آفلاین کار کند.

منابع مفید

برنامه کنفرانس Frontend:
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

Notifications API:
developer.mozilla.org/ru/docs/Web/API/Notifications_API

سومین کار برای آزمایش جالب‌ترین کار بود، زیرا راه‌حل‌های ممکن زیادی وجود داشت که هر کدام راه‌حل‌های خاص خود را داشتند. ما بررسی کردیم که نامزد چگونه با فناوری‌های ناآشنا برخورد می‌کند - آیا می‌داند چگونه تحقیق کند، آیا راه‌حل‌های خود را آزمایش می‌کند یا خیر.

ضوابط

تقویم تا شده. بله ، هنوز هم باید گذاشته شود. همچنین کسانی بودند که این شرط را به معنای واقعی کلمه دریافت کردند و حتی یک خط کد CSS را وارد نکردند. خیلی جذاب به نظر نمی رسید، اما اگر همه چیز کار می کرد، امتیازات کاهش نمی یافت.

دریافت لیستی از رویدادها از یک منبع. این یک کار طرح بندی نیست، بنابراین لیست رویدادهای موجود در آن شمارش نشده است. همیشه می‌توانید یک کنفرانس را لغو کنید، آن را دوباره زمان‌بندی کنید، یا یک کنفرانس جدید اضافه کنید. بنابراین لازم بود که داده ها را از بیرون دریافت کنیم و طرح بندی را بر اساس JSON دریافتی رندر کنیم. به دست آوردن داده ها به هر طریقی (با استفاده از روش واکشی یا استفاده از XMLHttpRequest) مهم بود. اگر شخصی یک polyfill برای واکشی اضافه کند و انتخاب خود را در readme علامت گذاری کند، این به عنوان یک امتیاز محسوب می شود.

ثبت نام کارگر خدماتی بدون خطا و بعد از اولین بارگیری آفلاین کار کنید. در اینجا یک مثال است. کارگر سرویس با ذخیره برنامه در اولین بوت. جزئیات مربوط به کارگران خدماتی، قابلیت‌ها و روش‌های کار با آنها (استراتژی‌های کار با حافظه پنهان، کار آفلاین) را می‌توانید در اینجا بیابید.

امکان تنظیم یادآوریبه طوری که در واقع بعد از 3، 7، 14 روز کار می کند. لازم بود API Notifications را درک کنید، پیوند به آن درست سر کار بود ما انتظار اجرای خاصی را نداشتیم تا بررسی کنیم که آیا زمان آن رسیده است یا خیر. هر گزینه کاری پذیرفته شد: ذخیره سازی در localStorage، IndexDB یا نظرسنجی دوره ای توسط یک سرویس دهنده. حتی می توان سرور فشار را ایجاد کرد (اینجا مثال)، اما آفلاین کار نمی کند. دریافت فشار پس از بسته شدن صفحه - و پس از مدتی باز شدن به همان اندازه مهم بود. اگر یادآور همزمان با بسته شدن صفحه از بین برود، راه حل شمارش نمی شود. خیلی خوب است که بچه ها در مورد بازبین ها فکر می کردند و این امکان را فراهم کردند که همین الان فشار بیاورند - تا 3 روز منتظر نمانند.

امکان قرار دادن آیکون روی دسکتاپ (PWA). ما وجود فایل را بررسی کردیم manifest.json با آیکون های صحیح برخی از بچه ها این فایل را ساخته اند (یا آن را در CreateReactApp ایجاد کرده اند) - اما نمادهای صحیح را اضافه نکرده اند. سپس، هنگام تلاش برای نصب، خطایی مانند "یک نماد متفاوت مورد نیاز است" رخ داد.

Codestyle و ساختار پروژه. همانطور که در کار دوم، ما به یک سبک کد واحد نگاه کردیم (حتی اگر با ما مطابقت نداشته باشد). بعضی از بچه ها روی خطوط پیچند - این عالی است.

خطاهای کنسول. اگر نشانگر درستی در کنسول وجود داشت که نشان می داد مشکلی وجود دارد و شرکت کننده به آن توجه نمی کرد، امتیاز کسر می کردیم.

نمایش نتایج: از

چه چیزی در مورد تصمیمات شرکت کنندگان خنده دار است:

  • یک پرسشنامه حاوی متن زیر بود: «یکی از دوستان برنامه نویس به من کمک کرد تا یک برنامه React را تهیه کنم. من او را با سؤالاتی در مورد چگونگی و چرا بمباران کردم و او به من گفت. من واقعاً آن را دوست داشتم، می خواهم بیشتر در مورد آن بدانم." ما با جان و دل به دنبال این اپلیکیشن بودیم اما متاسفانه دوست کاندید در کارکرد اپلیکیشن خیلی کمکی نکرد.
  • یکی از نامزدها پیوندی را به GitHub ارسال کرد، جایی که آرشیو RAR در آن قرار داشت - اظهار نظر در این مورد دشوار است. 🙂
  • یکی دیگر از نامزدها در کامنت خط اول فایل solution.js صادقانه اعتراف کرد که الگوریتم را کپی کرده است.

ما از 76 نامزد درخواست دریافت کردیم و 23 نفر را انتخاب کردیم. نه تنها از مینسک، بلکه از مسکو، سن پترزبورگ و حتی تاتارستان نیز پرسشنامه هایی برای ما ارسال شد. برخی از بچه ها با حرفه فعلی خود ما را شگفت زده کردند: یکی از آنها کارشناس پزشکی قانونی است و دیگری دانشجوی پزشکی.

نتیجه توزیع جالبی از میزان موفقیت در تکمیل وظایف بود. شرکت کنندگان اولین کار را به طور متوسط ​​60٪، دومی را 50٪ انجام دادند و سومین کار سخت ترین بود و به طور متوسط ​​40٪ تکمیل شد.

در نگاه اول، وظایف پیچیده و زمان بر به نظر می رسند. دلیل آن این نیست که ما می خواهیم تا حد امکان نامزدها را حذف کنیم. در طول تحصیل، دانش‌آموزان با وظایف واقعی روبرو می‌شوند - ایجاد چت، Yandex.Music برای کودکان یا Yandex.Weather برای افراد وابسته به آب و هوا. برای این شما به یک پایه شروع نیاز دارید.

یادم می آید که دو سال پیش تکلیف ورودی SRI خود را دیدم و فکر کردم که هرگز آن را حل نمی کنم. نکته اصلی در این لحظه این است که بنشینید، شرایط را با دقت بخوانید و شروع به انجام آن کنید. به نظر می رسد که شرایط شامل تقریبا 80٪ از محلول است. به عنوان مثال، در شرایط سومین وظیفه (سخت ترین)، پیوندهایی به سرویس کارگران و Notifications API در MDN اضافه کردیم. دانش آموزانی که مطالب پیوندها را مطالعه کردند بدون مشکل آن را تکمیل کردند.

من واقعاً دوست دارم این مقاله توسط داوطلبانی که قصد دارند در آینده وارد SRI شوند، که نتوانسته اند وارد مدرسه مینسک شوند، یا شروع به انجام هر آزمون دیگری می کنند، مطالعه شود. همانطور که می بینید، انجام این کار کاملاً ممکن است. فقط باید به خودتان ایمان داشته باشید و به تمام نکات نویسندگان گوش دهید.

منبع: www.habr.com

اضافه کردن نظر