Это не первый хакатон, который я выигрываю, не первый, про который
Региональный этап (Москва, 27 — 28 июля 2019 года).
Рекламу «Цифрового прорыва» я впервые увидел где-то в марте — апреле этого года. Естественно, пройти мимо такого крупного хакатона я не мог и зарегистрировался на сайте. Там же ознакомился с условиями и программой конкурса. Оказалось, чтобы попасть на хакатон, нужно было пройти онлайн-тестирование, которое начиналось с 16 мая. И, возможно, я бы про это благополучно забыл, так как письмо с напоминанием о старте тестирования не приходило. И, надо сказать, в дальнейшем ВСЕ ПИСЬМА, которые приходили мне от ЦП, стабильно попадали в папку спам. Хоть я и каждый раз нажимал кнопку «не является нежелательным». Не знаю, как им удалось добиться такого результата, у меня с рассылкой на MailGun так не получалось. А про существование сервисов типа isnotspam.com ребята, похоже, не знают в принципе. Но мы отклонились.
О начале тестирования мне напомнили на одной из встреч
В какой-то момент после прохождения тестов мне позвонили, спросили, буду ли я участвовать, уточнили детали и сказали, как попасть в чат для подбора команды. Вскоре, я зашел в чат и коротко написал о себе. В чате творился полный треш, создалось впечатление, что организаторы нагнали рекламой много случайных людей, которые не имеют к IT никакого отношения. Многочисленные продакт менеджеры «уровня Стив Джобс» (реальная фраза из одного представления участника) постили рассказы о себе, а нормальных разработчиков даже не было видно. Но мне повезло, и я вскоре присоединился к трем опытным JS-программистам. Познакомились друг с другом мы уже на хакатоне, тогда же добавили в команду девушку для вдохновения и решения орг вопросов. Уже не помню почему, но мы взяли тему «Обучение кибербезопасности» и попали с ней в трек «Наука и образование 2». Я первый раз оказался в команде из 4 сильных программистов и впервые ощутил, насколько легко побеждать в таком составе. Мы пришли неподготовленные и до обеда спорили и не могли определиться, что будем делать: мобильное приложение или веб. В любой другой ситуации я бы подумал, что это провал. Самым главным для нас было понять, чем мы будем лучше конкурентов, ведь вокруг было полно команд, которые пилили тесты, игры по кибербезопасности и тому подобные вещи. Глядя на это и гугля обучающие программы и приложения, мы решили, что нашей главной отличительной особенностью будут тренировки по принципу пожарной тревоги. Мы отобрали целый ряд фишек, которые показались нам интересными для реализации (регистрация с проверкой емейла и пароля по хакерским базам, рассылка фишинговых писем (в виде писем от известных банков), тренировки по социальной инженерии в чате). Определившись с тем что мы делаем и поняв, чем мы можем выделиться, мы довольно быстро написали полноценное вебприложение, причем я выступил в несвойственной для себя роли бекенд разработчика. Таким образом, мы уверенно выиграли свой трек и в составе еще трех команд отобрались в финал в Казань. Уже позже, в Казани я узнал, что отбор в финал был фикцией, я встретил там много знакомых лиц из команд, которые этот отбор не прошли. У нас даже взяли интервью журналисты с 1 канала. Правда, в репортаже из него только на 1 секунду показали наше приложение.
Команда Snowed, в составе которой я выиграл региональный этап
Финал (Казань, 27 – 29 сентября 2019 года)
Но дальше начались неудачи. Все программисты из команды Snowed в течении примерно месяца, один за другим, сообщили что не смогут поехать в Казань на финал. И я задумался о поиске новой команды. Сначала я кинул клич в общем чате сборной Russian Hack Team, и хотя там я получил довольно много откликов и приглашений в команды, но ни одна из них меня не зацепила. Были несбалансированные команды, как например, продакт, мобильный разработчик, фронтендер, напоминает лебедя, рака и щуку из басни. Были также команды, которые не подходили мне по технологии (например, с разработкой мобильного приложения на Flutter). Наконец, в чате, который я считал трешовым (тот самый вконтакте, где происходил подбор команд на региональный этап), запостили объявление о поиске в команду фрондендера, и я чисто наугад написал. Ребята оказались аспирантами сколтеха и сразу предложили встретиться и познакомиться. Мне это понравилось, команды, которые предпочитают знакомиться сразу на хакатоне, обычно меня настораживают своим отсутствием мотивации. Встретились в «Граблях» на Пятницкой. Парни показались мне толковыми, мотивированными, уверенными в себе и в победе, и решение я принял прямо там. Мы еще не знали, какие будут треки и задачи в финале, но предполагали, что выберем что-то, связанное с Machine Learning. А моей задачей будет написать под это дело админку, поэтому я заранее приготовил для этого заготовку на основе antd-admin.
В Казань я поехал бесплатно, за счет организаторов. Надо сказать, что в чатах и блогах уже было высказано очень много недовольства по поводу закупки билетов и, в целом, организации финала, не буду это все пересказывать.
Приехав в Казань Экспо, зарегистрировавшись (при этом у меня возникли небольшие проблемы с получением бейджа) и позавтракав, мы пошли выбирать трек. На торжественное открытие, где выступали официальные лица, мы зашли только минут на 10. На самом деле, у нас уже были предпочитаемые треки, но нас интересовали детали. В треке No 18 (Ростелеком), например, оказалось что нужно разработать мобильное приложение, хотя в кратком описании этого не было. Основной выбор мы делали между треком No 8 Дефектоскопия трубопроводов, ПАО «Газпром нефть» и треком No 13 Перинатальные центры, Счётная палата РФ. И там, и там нужен был Data Science, и там, и там можно было бы прикрутить веб. В треке No 13 нас остановило то, что задача по Data Science там была довольно слабой, нужно было парсить росстат и не было понятно, нужна ли админка. Да и сама ценность задачи вызывала сомнения. В итоге мы решили, что как команда мы больше заточены под 8 трек, тем более, что у ребят уже был опыт решения подобных задач. Начали мы с того, что продумали сценарий, по которому наше приложение будет использовать конечный пользователь. Получалось, что у нас будет два типа пользователей: технари, которых интересуют техническая информация и управленцы, которым были нужны финансовые показатели. Когда появилось представление о сценарии, стало понятно, что делать на фронте, что рисовать дизайнеру, и какие методы нужны на бекенде, стало возможным распределить задачи. Обязанности в команде распределились следующим образом: двое человек решали ML с полученными от техэкспертов данными, один человек писал на питоне бекенд, я писал фронт на реакте и antd, дизайнер рисовал интерфейсы. Мы даже сели так, чтобы нам было удобнее общаться, решая свои задачи.
Первые сутки пролетели практически незаметно. В общении с техэкспертами выяснилось, что эта задача ими («Газпром нефтью») уже решена, им просто интересно, можно ли ее решить лучше. Не скажу, что это снизило мотивацию, но осадочек остался. Удивило, что ночью модераторы секций отмечали работающие команды (как они говорили для статистики), обычно на хакатонах это не практикуется. К утру у нас был готов прототип фронта, некоторые зачатки бека, первое решение ML. В общем, уже было что показывать экспертам. Во второй половине дня субботы дизайнер нарисовал уже заведомо больше интерфейсов, чем я бы успел накодить и переключился на создание презентации. Суббота была отведена на регистрацию рекорда, и с утра, всех работающих в зале выгнали в коридор, затем вход и выход из зала осуществлялся по бейджикам, причем выходить за день можно было не больше чем на час. Не скажу что это доставило нам какие-то существенные неудобства, большую часть дня мы все равно сидели и работали. Питание, действительно, было очень скудным, на обед мы получили стаканчик с бульоном, пирожок и яблоко, но опять же нас это не сильно расстроило, мы были сосредоточены на другом.
Периодически выдавали red bull, по две банки на руки, это было очень кстати. Давно уже опробованный на хакатонах рецепт энергетик + кофе, позволял кодить всю ночь и последующий день, будучи бодрым, как стеклышко. На второй день мы, по-сути, уже просто накручивали на приложение новые фишки, сделали расчет финансовых показателей, стали выводить графики по статистике дефектов в магистралях. Как такового code review в нашем треке не было, эксперты оценивали решение задачи в стиле kaggle.com, по точности прогноза, а фронтенд оценивался визуально. Наше ML решение оказалось наиболее точным, возможно именно это позволило нам вырваться в лидеры. В ночь с субботы на воскресенье мы работали до 2-х часов ночи, а потом поехали поспать на квартиру, которую использовали в качестве базы. Спали около 5 часов, в воскресенье в 9 утра мы уже были в Казань Экспо. Я что-то спешно подверстывал, но большую часть времени заняла подготовка к предзащите. Предзащиты проходили в 2 потока, перед двумя командами экспертов, нас попросили выступить последними, так как обе команды экспертов хотели нас послушать. Мы восприняли это как хороший знак. Приложение показывали с моего ноутбука, с запущенного дев сервера, нормально задеплоить приложение мы не успели, впрочем, так делали все.
В целом, все прошло хорошо, нам указали на моменты, в которых мы могли улучшить наше приложение, и за время до защиты мы даже попытались что-то из этих замечаний реализовать. Защита тоже прошла на удивление гладко. По итогам предзащиты мы знали, что по баллам мы впереди, мы лидировали по точности решения, у нас был хороший фронтенд, хороший дизайн и, в целом, были хорошие предчувствия. Еще одним благоприятным знаком было то, что девушка модератор с нашей секции, перед входом в концертный зал сделала с нами селфи, я тогда и заподозрил, что она возможно что-то знает))). Но мы-то свои баллы после защиты не знали, поэтому время до момента объявления нашей команды со сцены прошло немного напряженно. На сцене вручили картонку с надписью 500000 рублей и каждому пакетик с кружкой и аккумулятором для сотового. Насладиться победой и нормально ее отметить не получилось, мы быстро поужинали и поехали на такси на поезд.
Команда WAICO побеждает в финале
По возвращению в Москву у нас брали интервью журналисты с НТВ. Снимали целый час на втором этаже кафе «Квартал 44» на Полянке, но в новостях показали секунд 10. Как-никак сильный прогресс по сравнению с региональным этапом.
Если резюмировать общие впечатления от Цифрового прорыва, то они следующие. На мероприятие были потрачены просто бешеные деньги, я еще ни разу не видел хакатоны такого масштаба. Но сказать что это оправданно, и что это действительно окупиться я не могу. Значительная часть участников, приехавших в Казань, была просто тусовщиками, которые не умеют что либо делать своими руками, и которых нагнали для установления рекорда. Я не могу сказать, что конкуренция в финале была выше, чем на региональном этапе. Также ценность и полезность задач некоторых треков вызывает сомнения. Некоторые задачи уже давно были решены на индустриальном уровне. Как оказалось позже, некоторые организации которые вели треки, были и не заинтересованы в их решении. И эта история еще не закончена, команды лидеры с каждого трека были отобраны в преакселлератор, и ведь предполагается, что из них получатся ПРОРЫВНЫЕ стартапы. Но писать про это я пока не готов, посмотрим что из этого получится.
Источник: habr.com