Не е първият хакафон, който печеля, нито първият, за който , и далеко не е първият пост в Хабър, посветен на „Цифровия пробив“. Но не можех да не споделя. Считам, че опитът ми е достатъчно уникален, за да го споделя. Вероятно съм единственият на този хакафон, който е спечелил регионалния етап и финала с различни отбори. Искате ли да разберете как се случи? Добре дошли под кат.
Регионалният етап (Москва, 27 – 28 юли 2019 година).
Рекламата за „Цифровия пробив“ видях за първи път някъде през март – април тази година. Естествено, не можех да подмина такъв голям хакафон и се регистрирах на сайта. Там се запознах с условията и програмата на конкурса. Оказа се, че за да участвам в хакафона, трябва да премина онлайн тестиране, което започваше на 16 май. И може би щях да забравя за него, защото писмото с напомняне за началото на тестирането не дойде. И трябва да кажа, че впоследствие ВСИЧКИ ПИСМА, които получавах от ЦП, стабилно попадаха в папката със спам. Въпреки че всеки път натисках бутона „не е нежелателно“. Не знам как успяха да постигнат такъв резултат, при мен с разпращането в MailGun не се получаваше така. А за съществуването на услуги като isnotspam.com, изглежда, момчетата изобщо не знаят. Но отклонихме се.
За началото на тестирането ми напомниха на една от срещите , там съ обсъдихме формирането на екип. Когато отворих списъка с тестове, първото нещо, което направих, беше да се захвана с теста по Javascript. Общо взето, задачите бяха повече или по-малко адекватни (например, какъв ще бъде резултатът, ако съберем в консолата 1 + ‘1’). Но от личен опит, бих подхождал с много сериозни уговорки, ако използвах такива тестове при подбора на работа или екип. Въпросът е, че в реалната работа програмистът се сблъсква с такива неща рядко, а способността му да пише код бързо не корелира с тези познания, а да се подготвиш за такива неща за интервюта е доста лесно (знам от себе си). В крайна сметка, преминах теста доста бързо, в някои случаи проверявах себе си в консолата. При теста по python задачите бяха с подобен тип, също проверявах себе си в консолата и с учудване получих повече точки, отколкото по JS, макар, че никога не съм програмирал професионално на питон. После в разговорите с участниците чух истории за това как силни програмисти получаваха ниски оценки по тестовете, как на някои хора идваха писма, в които им съобщаваха, че не са преминали подбор на ЦП, а след това все пак ги канеха на него. Ясно е, че създателите на тези тестове вероятно не са чули нищо за , нито за тяхната надеждност и валидност, нито за това как да се апробират, и идеята с тестовете първоначално би била провалена, дори и да не вземем предвид основната цел на хакатона. А основната цел на хака, както разбрах по-късно, беше да постави рекорд на Гинес, а тестовете противоречаха на това.
В някакъв момент след преминаването на тестовете ми се обадиха, попитаха дали ще участвам, уточниха детайли и ми казаха как да вляза в чата за подбор на екип. Скоро влязох в чата и кратко написах за себе си. В чата имаше пълна бъркотия, създаде се впечатление, че организаторите са натъпкали много случайни хора, които нямат никаква връзка с IT. Многобройни продуктови мениджъри „на ниво Стив Джобс“ (истинска фраза от едно представяне на участник) публикуваха истории за себе си, а нормалните разработчици почти не се виждаха. Но аз имах късмет и скоро се присъединих към трима опитни JS-програмисти. Запознахме се помежду си на хакатона, същевременно добавихме в екипа и момиче за вдъхновение и решаване на организационни въпроси. Вече не помня защо, но избрахме темата „Обучение по киберсигурност“ и с нея попаднахме в трак „Наука и образование 2“. За първи път се оказах в екип от 4 силни програмисти и за първи път усетих колко лесно е да побеждаваш в такъв състав. Дойдохме неподготвени и до обяд спорихме и не можехме да решим какво ще правим: мобилно приложение или уеб. В всяка друга ситуация бих помислил, че това е провал. Най-важното за нас беше да разберем с какво ще бъдем по-добри от конкуренцията, защото около нас имаше много екипи, които правеха тестове, игри по киберсигурност и подобни неща. Гледайки това и търсейки обучителни програми и приложения, решихме, че основната ни отличителна черта ще бъде тренировките по принципа на пожарната тревога. Подбрахме цяла поредица от особености, които ни се сториха интересни за реализиране (регистрация с проверка на имейл и парола в хакерските бази, изпращане на фалшиви имейли (под формата на имейли от известни банки), тренировки по социална инженерия в чата). След като се определихме с това, което правим и разбрахме с какво можем да се отличим, доста бързо написахме пълноценен уебприложение, като аз заех несвойствена за мен роля на бекенд разработчик. По този начин уверено спечелихме своя трак и в състава на още три екипа се класирахме за финала в Казан. По-късно, в Казан, научих, че подборът за финала е бил фикция, срещнах много познати лица от екипи, които не бяха преминали този подбор. Дори ни интервюираха журналисти от 1 канал. Обаче, в репортажа от него само за 1 секунда показаха нашето приложение.

Отборът Snowed, с който спечелих регионалния етап
Финал (Казан, 27 – 29 септември 2019 г.)
Но след това започнаха неуспехите. Всички програмисти от отбора Snowed в продължение на около месец, един след друг, съобщиха, че няма да могат да отидат в Казан за финала. Започнах да мисля за търсене на нов отбор. Първо, направих обява в общия чат на Russian Hack Team, и макар да получих доста отговори и покани в отбори, нито един от тях не ме впечатли. Имаше несбалансирани отбори, като например продуктови мениджъри, мобилни разработчици и фронтендъри, напомнящи на приказката за лебеда, рака и щуката. Имаше също отбори, които не отговаряха на технологията, която ми е нужна (например, за разработка на мобилно приложение с Flutter). Накрая, в чата, който смятах за безсмислен (онзи във Вконтакте, където се избираха отбори за регионалния етап), публикуваха обява за търсене на фронтенд разработчик и аз случайно написах. Момчетата се оказаха аспиранти от Сколтех и веднага предложиха да се срещнем и да се запознаем. Хареса ми, отборите, които предпочитат да се запознаят веднага на хакатона, обикновено ме притесняват с липсата на мотивация. Срещнахме се в "Грабли" на Петницката. Момчетата ми се сториха кадърни, мотивирани, уверени в себе си и в победата и взех решението точно там. Все още не знаехме какви ще бъдат трасетата и задачите на финала, но предполагахме, че ще изберем нещо, свързано с Машинно обучение. А моята задача ще бъде да напиша администраторски панел, така че предварително приготвих за това основа на базата на antd-admin.
До Казан пътувах безплатно, за сметка на организаторите. Трябва да кажа, че в чатове и блогове вече беше изказано много недоволство относно закупуването на билети и изобщо организацията на финала, няма да повтарям всичко това.
Следвайки ни Казан Експо, след като се регистрирах (въпреки че имах малки проблеми с получаването на баджа) и закусих, започнахме да избираме трек. На тържественото откритие, където присъстваха официални лица, останахме само около 10 минути. Всъщност вече имахме предпочитани трекове, но ни интересуваха подробностите. В трека No 18 (Ростелеком), например, се оказа, че трябва да разработим мобилно приложение, въпреки че това не беше споменато в краткото описание. Основният ни избор беше между трека No 8 Дефектоскопия на тръбопроводи, ПАО „Газпром нефт” и трека No 13 Перинатални центрове, Сметна палата на Руската Федерация. И в двата случая имаше нужда от Data Science, и в двата можеше да се добави уеб. В трека No 13 ни спря факта, че задачата по Data Science беше доста слаба, тъй като трябваше да парснем данните от Росстат и не беше ясно дали е необходим админ панел. Също така самата стойност на задачата будеше съмнения. В крайна сметка решихме, че като екип сме по-подходящи за трек 8, особено тъй като момчетата вече имаха опит с подобни задачи. Започнахме с това, че обмислихме сценария, по който нашето приложение ще използва крайният потребител. Получи се, че ще имаме два типа потребители: технически специалисти, които се интересуват от техническа информация, и мениджъри, на които са нужни финансови показатели. Когато се появи представа за сценария, стана ясно какво да се прави на фронтенд, какво да рисува дизайнерът и какви методи са необходими на бекенда, като стана възможно разпределянето на задачите. Задълженията в екипа се разпределиха по следния начин: двама души работеха по ML с данните от техническите експерти, един човек пишеше бекенд на Python, аз пишех фронтенд на React и Ant Design, дизайнерът рисуваше интерфейсите. Дори се настанихме така, че да ни е по-удобно да общуваме и решаваме задачите си.
Първите 24 часа преминаха почти незабелязано. В разговор с техническите експерти стана ясно, че тази задача за тях ("Газпром нефть") вече е решена, просто им е интересно дали може да бъде решена по-добре. Не бих казал, че това намали мотивацията, но усещането остана. Удиви ме, че през нощта модераторите на секции оценяваха работещите екипи (както те казаха за статистиката), което обикновено не се практикува на хакатони. До сутринта имахме готов прототип на фронтен интерфейс, някои семена на бекенд и първото ML решение. В общи линии, имаше какво да покажем на експертите. През втората половина на съботния ден дизайнерът нарисува очевидно повече интерфейси, отколкото бих успял да програмирам и се концентрира на създаването на презентация. Съботата беше отпусната за регистрация на рекорда, и сутринта всички работещи в залата бяха изгонени в коридора, след което входът и изходът от залата се осъществяваха с бейджове, като излизането за деня беше ограничено до не повече от един час. Не бих казал, че това ни причини значителни неудобства, през по-голямата част от деня все пак седяхме и работехме. Храната наистина беше много скромна, за обяд получихме чаша с бульон, пай и ябълка, но отново, това не ни разстрои особено, бяхме съсредоточени върху друго.
Периодично получавахме red bull, по две кутии на ръка, което беше много удобно. Отдавна пробваната на хакатони рецепта енергийна напитка + кафе, ни позволяваше да кодираме през цялата нощ и следващия ден, будейки се бодри като стъкло. На втория ден всъщност просто добавяхме нови функции в приложението, направихме изчисления на финансовите показатели и започнахме да извеждаме графики за статистиката на дефектите в магистралите. Нямаше какво да наречем code review в нашия трек, експертите оценяваха решението на задачата в стил kaggle.com, по точността на прогнозата, а фронтендът се оценяваше визуално. Нашето ML решение се оказа най-точно, възможно е именно това да ни е помогнало да излезем на лидерски позиции. В нощта между събота и неделя работихме до 2 часа през нощта, а след това отидохме да спим в апартамента, който използвахме като база. Спахме около 5 часа, а в неделя в 9 сутринта вече бяхме в Казан Експо. Някак бързо подготвях, но по-голямата част от времето отне подготовката за предзащитата. Предзащитите се провеждаха в 2 потока, пред две екипа експерти, поискаха да излезем последни, тъй като и двата екипа експерти искаха да ни слушат. Възприехме това като добър знак. Приложението показвахме от моя лаптоп, от работещия дев сървър, не успяхме нормално да деплойваме приложението, но така правеха всички.
Като цяло, всичко мина добре, посочиха ни моменти, в които можехме да подобрим приложението си, и през времето до защитата дори се опитахме да реализираме нещо от тези забележки. Защитата също мина удивително гладко. След предзащитата знаехме, че по точки сме напред, водехме по точност на решението, имахме добър фронтенд, добър дизайн и като цяло, имахме добри предчувствия. Още един благоприятен знак беше, че момичето модератор от нашата секция, пред входа на концертната зала, направи селфи с нас, тогава заподозрях, че тя може би знае нещо))). Но ние не знаехме нашите точки след защитата, така че времето до обявяването на нашия отбор от сцената мина малко напрегнато. На сцената ни връчиха картонка с надпис 500000 рубли и на всеки пакет с чаша и зарядно за мобилен телефон. Не успяхме да се насладим на победата и нормално да я отпразнуваме, бързо вечеряхме и с такси отидохме на влака.

Отборът WAICO печели финала
При завръщането ни в Москва, интервю с нас бяха взели журналисти от НТВ. Снимали цял час на втория етаж на кафе "Квартал 44" на Полянка, но в новините показаха около 10 секунди. Все пак, значителен напредък в сравнение с регионалния етап.
Ако обобщя общите впечатления от Цифровия прорыв, те са следните. За мероприятието бяха изразходвани неимоверни средства, никога не съм виждал такъв мащаб на хакатони. Но не мога да кажа, че това е оправдано и че наистина ще се изплати. Значителна част от участниците, които дойдоха в Казан, бяха просто тусовчици, които не могат да правят нищо със собствените си ръце и които бяха поканени за да се установи рекорд. Не мога да кажа, че конкуренцията на финала беше по-висока от регионалния етап. Също така, стойността и ползата от задачите на някои трекове будят съмнения. Някои задачи отдавна бяха решени на индустриално ниво. Както по-късно се оказа, някои организации, които ръководеха трековете, не бяха заинтересовани в тяхното решаване. И тази история все още не е приключила, отборите лидери от всеки трек бяха подбрани за преакселератор, и се предполага, че от тях ще произлязат ПРЕВРАТНИ стартапи. Но не съм готов засега да пиша за това, ще видим какво ще излезе от това.
Източник: habr.com
