Цифров пробив — как стана

Това не е първият хакатон, който печеля, не е и първият, за който пиша, и това далеч не е първият пост в Хъбра, посветен на „Цифровия пробив“. Но не можех да не напиша. Считам, че опитът ми е достатъчно уникален, за да го споделя. Вероятно съм единственият на този хакатон човек, който е спечелил регионалния етап и финала в състава на различни отбори. Искате ли да разберете как се случи това? Добре дошли под кат.

Регионалният етап (Москва, 27 — 28 юли 2019 година).

Рекламата за „Цифровия пробив“ видях за първи път някъде през март — април тази година. Естествено, не можех да мина покрай такъв голям хакатон и се регистрирах на сайта. Там също се запознах с условията и програмата на конкурса. Оказа се, че за да участваш в хакатона, трябваше да преминеш онлайн тест, който започваше на 16 май. И, вероятно, щях да забравя за това, тъй като писмото с напомняне за старта на теста не дойде. И трябва да кажа, че впоследствие ВСИЧКИ ПИСМА, които получавах от ЦП, стабилно попадат в папката спам. Въпреки че всеки път натисках бутона „не е нежелателно“. Не знам как успяха да постигнат такъв резултат, при мен с разпращането на MailGun така не се получаваше. А за съществуването на услуги като isnotspam.com, момчетата явно не знаят в принцип. Но се отклонихме.

За началото на теста ми напомниха на една от срещите на клуба за стартиращи предприятия, там също обсъдихме формирането на екип. Отворих списъка с тестове и първото нещо, което направих, беше да се заема с теста по Javascript. Като цяло задачите бяха повече-менее адекватни (като, какъв е резултатът, ако съберем в консолата 1 + ‘1’). Но от собствения си опит бих се съгласил да използвам такива тестове при подбора за работа или в екип с много големи резерви. Работата е там, че в реалната работа програмистът рядко се сблъсква с такива неща, а неговата способност бързо да пише код не корелира с тези знания, а да се подготви за такива неща за интервюта е сравнително лесно (знам от опит). Общо взето, успях да премина теста сравнително бързо, в някои случаи проверявах себе си в консолата. В теста по python задачите бяха подобни и също проверявах себе си в консолата, с учудване получих повече точки отколкото по JS, въпреки че никога не съм програмирал професионално на питон. По-късно, в разговора с участниците, чух истории как силни програмисти получили ниски оценки на тестовете, как на някои хора изпращали писма, че не са преминали отбор, а след това все пак ги канели на него. Ясно е, че създателите на тези тестове вероятно не знаят нищо нито за теория на тестовете, нито за тяхната надеждност и валидност, нито за това как да ги апробират, и идеята с тестовете първоначално щеше да бъде неуспешна, дори да не се вземе под внимание основната цел на хакатона. А основната цел на хаката, както по-късно разбрах, беше да се постави рекорд на Гинес, и тестовете противоречаха на нея.

В някакъв момент след като преминах тестовете, ми се обадиха, попитаха дали ще участвам, уточниха детайлите и ми казаха как да се присъединя към чата за подбор на екип. Скоро влязох в чата и накратко се представих. Чатът беше в пълен хаос, създаде се впечатление, че организаторите са привлечели много случайни хора чрез реклама, които нямат никакво отношение към ИТ. Многобройни продуктови мениджъри от „нивото на Стив Джобс“ (реална фраза от представяне на участник) публикуваха разкази за себе си, а нормалните разработчици дори не се виждаха. Но аз имах късмет и скоро се присъединих към трима опитни JS-програмисти. Запознахме се по време на хакатона, тогава добавихме в екипа и момиче за вдъхновение и решаване на организационни въпроси. Вече не помня защо, но избрахме темата „Обучение по киберсигурност“ и я включихме в трака „Наука и образование 2“. За първи път бях в екип от 4 силни програмиста и за пръв път усетих колко лесно е да побеждаваш в такъв състав. Дойдохме неподготвени и до обяд спорехме и не можехме да се определим дали ще правим мобилно приложение или уеб. В друга ситуация щях да помисля, че това е провал. Най-важното за нас беше да разберем с какво ще сме по-добри от конкурентите, тъй като около нас имаше много екипи, които разработваха тестове, игри по киберсигурност и подобни неща. Гледайки всичко това и търсейки обучителни програми и приложения в Google, решихме, че нашата основна отличителна черта ще бъдат тренировките по принципа на пожарната тревога. Подбрахме редица елементи, които ни се сториха интересни за реализиране (регистрация с проверка на email и парола по хакерски бази, разпращане на фишингови имейли (под формата на писма от известни банки), тренировки по социална инженерия в чата). След като определихме какво правим и разбрахме с какво можем да се отличим, доста бързо написахме пълно работещо уебприложение, като аз играх несвойствена за мен роля на бекенд разработчик. По този начин уверено спечелихме своя трак и с още три екипа се класирахме за финал в Казан. По-късно, в Казан, научих, че класирането за финал е било фикция; срещнах много познати лица от екипи, които не преминаха през това класиране. Дори ни взеха интервю журналисти от 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 с получените от техекспертите данни, един човек пишеше на питон бекенд, аз пишех фронт на реакт и antd, дизайнерът рисуваше интерфейси. Дори се настанихме така, че да ни е по-удобно да комуникираме, решавайки собствените си задачи.

Първите 24 часа минаха почти незабелязано. В общуването с техекспертите стана ясно, че тази задача (от „Газпром нефть“) вече е решена от тях, просто ги интересува дали може да бъде решена по-добре. Няма да кажа, че това е намалило мотивацията ни, но усещането остава. Изненада ме, че през нощта модераторите на секциите отбелязваха работещите екипи (както те казваха - за статистиката), обикновено това не се практикува на хакатони. До сутринта имахме готов прототип на фонт, някои зачатъци на бека, първо решение със ML. Като цяло, вече имаше какво да покажем на експертите. През втората половина на събота дизайнерът нарисува очевидно повече интерфейси, отколкото аз бих могъл да накодя и премина на създаването на презентация. Събота беше отделена за регистрация на рекорда, и сутринта изгониха всички работещи в залата в коридора, след което достъпът до залата се осъществяваше чрез баджове, като излизането през деня беше разрешено не повече от час. Няма да кажа, че това ни създаде значителни неудобства, през по-голямата част от деня все пак седяхме и работехме. Храната наистина беше много оскъдна, за обяд получихме чашка с бульон, пирожка и ябълко, но отново, това не ни разстрои особено, бяхме съсредоточени върху друго.

Периодично раздаваха red bull, по две кутии на ръка, което беше много на място. Отдавна изпитаната на хакатони рецепта енергийна напитка + кафе, ни позволяваше да пишем код цяла нощ и на следващия ден, оставайки бодри, като стъклени топчета. На втория ден по същество просто добавяхме нови функции към приложението, направихме изчисления на финансовите показатели и започнахме да изготвяме графики за статистиката на дефектите в магистралите. По същество нямаше проверка на кода в нашия трек, експертите оценяваха решението на задачата в стил kaggle.com, въз основа на точността на прогноза, а фронтендът се оценяваше визуално. Нашето ML решение се оказа най-точно, вероятно именно това ни помогна да станем лидери. В нощта между събота и неделя работихме до 2 часа през нощта, а после отидохме да се наспим в апартамента, който използвахме за база. Спахме около 5 часа, в неделя в 9 часа сутринта вече бяхме в Казан Експо. Аз нещо набързо сглобявах, но по-голямата част от времето зае подготовката за предварителната защита. Предварителните защити се проведоха в 2 потока, пред две експертни комиси, помолиха ни да се представим последни, тъй като и двете комисии искаха да ни чуят. Възприехме това като добър знак. Приложението показвахме от моя лаптоп, от запуснатия дев сървър, не успяхме да деплойваме приложението нормално, обаче всички така правеха.

В общи линии всичко мина добре, ни посочиха моментите, в които можехме да подобрим нашето приложение и по времето до защитата дори се опитахме да реализираме част от тези забележки. Защитата също мина удивително гладко. След предварителната защита знаехме, че по точки сме напред, лидирахме по точност на решението, имахме добър фронтенд, добър дизайн и в общи линии бяхме с добри предчувствия. Още един благоприятен знак беше, че момичето модератор от нашата секция, пред входа на концертната зала направи селфи с нас, тогава заподозрях, че може би знае нещо))). Но ние не знаехме нашите точки след защитата, така че времето до момента на обявяване на нашия отбор от сцената мина малко напрегнато. На сцената ни връчиха картонка с надпис 500000 рубли и на всеки пакетче с чаша и акумулатор за мобилен телефон. Не успяхме да се насладим на победата и да я отпразнуваме нормално, бързо попаднахме на вечеря и се закичихме на такси за влака.

Цифров пробив — как стана
Отборът WAICO печели финала

След завръщането ни в Москва, журналисти от НТВ ни взеха интервю. Снимаха цял час на втория етаж на кафе „Квартал 44“ на Полянка, но по новините показаха около 10 секунди. Неминуемо, това е голям напредък в сравнение с регионалния етап.

Ако обобщя общите впечатления от Цифровия пробив, те са следните. На събитието бяха похарчени просто огромни средства, никога не съм виждал хакатони от такъв мащаб. Но не мога да кажа, че всичко това е оправдано и че действително ще се изплати. Значителна част от участниците, които пристигнаха в Казан, бяха просто любители на купона, които не умеят да правят нищо с ръцете си и бяха привлечени за установяване на рекорд. Не мога да кажа, че конкуренцията на финала беше по-висока от регионалния етап. Също така, стойността и полезността на задачите от някои трасета будят съмнения. Някои задачи отдавна бяха решени на индустриално ниво. Както стана ясно по-късно, някои организации, които водеха трасетата, изобщо не бяха заинтересовани в тяхното решаване. И тази история все още не е завършила, лидерските екипи от всяко трасе бяха избрани за преакселератор, и се предполага, че от тях ще излязат ПРОРИВНИ стартъпи. Но не съм готов да пиша за това сега, ще видим какво ще се получи.

Източник: habr.com

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster