Как мы вошли в число победителей двухнедельного онлайн-хакатона

В начале сентября ВКонтакте запустили двухнедельный хакатон «Вездекод». Принцип такой: вы собираете команду от 1 до 4 человек и смотрите задания в специальной закрытой группе. Каждый день отправляете решённое задание на оценку, получаете за него баллы, и по общему баллу составляют рейтинг команд. К концу двух недель первые 5 команд в рейтинге получают призы (каждому участнику):

  1. Макбуки
  2. Айфоны
  3. Айпэды
  4. Apple часы
  5. Airpods

В любом конкурсе и соревновании нужно умножать вероятность вашей победы на объём выигрыша, а потом сравнивать это с объёмом затрат. На этом месте я неправильно оценил объём затрат, о чём расскажу позже, и поэтому сразу бросился собирать команду.

Команда и подготовка

Я сразу смекнул, что мероприятие будет похоже на Tech Race, который ВК провели прошлой осенью совместно с Junction. И у меня возникло подозрение, что команды получат преимущество, в числе прочего, за количество участников, как было на Tech Race. Так в итоге и вышло, об этом ниже. Но идея собрать максимальную команду в 4 человека была заранее продуманной и по итогу очень верной.

Придумал для нашей команды название Cod Mode, которое обыгрывает соответствующий режим в стрелялках.
Придумал для нашей команды название Cod Mode, которое обыгрывает соответствующий режим в стрелялках.

В первую очередь я позвал своего постоянного товарища по хакатонам Гришу. Сам я собирался делать веб, Гришу направить на бэкенд. Затем мы присоединили к команде Гришку, как мобильного разработчика, и Алдара, как дизайнера и художника. Получилась команда, которая хорошо закрывала компетенции хакатона.

Задания

Данный хакатон отличался от классических тем, что задания были строго разбиты по типам:

  • Дизайн
  • Нативная (!) мобильная разработка
  • Мобильная веб разработка

Отсутствие в команде нужного специалиста автоматически приводило к тому, что задание вы делать не могли, не получали за него баллы и падали в рейтинге. На обычном хаке вы можете вместо мобильного приложения сделать вебсервис, а вместо него — чатбота. Но здесь такая тема не прокатывала.

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #2

Все задания публиковались в закрытую группу для участников, но дублировались в открытую VK Tech с приглашением присоединиться. Смысла присоединяться со второго (и уж тем более с десятого) дня особо не было, шанс восстановить разрыв в одно выполненное задание мог бы появиться только в том случае, если бы все участники всех команд из топа попали в анабиоз на сутки.

Дополнительные задания

Помимо основных суточных заданий были дополнительные. В половине случаев это тесты на «знание» разных IT-фишек. Я пишу в кавычках, потому что ограничений по времени на ответ не было, что теоретически не мешало участникам гуглить ответы или спрашивать у кого-нибудь.

Другая половина заданий интереснее: конкурсы Code in the Dark и Kitten Contest. Но и с ними была проблема — количество мест на порядок меньше, чем количество участников. Из-за этого приходилось оперативно ловить возможность регистрации, буквально раз в секунду обновляя форму в браузере и стараясь её за секунду заполнить и отправить.

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #3

В какой-то момент администрация поняла, что ситуация не очень хорошая, и разрешила командам участвовать в таких регистрационных допах только по разу. Фундаментально это проблему не решило, но позволило нам, например, поймать третью такую регистрацию.

Code in the Dark

Это интересное соревнование для верстальщиков: нужно сделать экран, не смотря визуально на то, что у тебя получается. Я участвовал в таком один раз, получилось плохо, но мне понравилось.

Гришка верстает страницу на 10 из 10
Гришка верстает страницу на 10 из 10

Конкретно в «Вездекоде» правила были упрощены: последние 2 минуты можно было смотреть результат. Но, что странно, ВК сделали такой конкурс не по вебу, а по нативной мобильной вёрстке. Это не слишком понятное для меня решение по двум причинам:

  1. Нативных мобильных разработчиков мало, и в целом нативная разработка всё стремительнее уступает вебу по понятным причинам.
  2. От вёрстки стараются уйти, поэтому подобный навык становится устаревшим. На iOS набирает популярность визуальный редактор, куда действительно переходят разработчики. Формально на Android визуальный редактор тоже есть, но он пока слишком плох, хотя, уверен, практически полный отказ от вёрстки не за горами.

Тем не менее, Гришка в нашей команде прекрасно и без особого труда справился с заданием на максимальный балл: 10 из 10, что позволило нашей команде сделать значимый скачок вперёд. Но о баллах чуть позже.

Kitten Contest

Другой любопытный конкурс — викторина в стиле «Своей Игры» про IT. Вопросы разбиты по темам и дают баллы.

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #5

И тут, конечно, подбор вопросов сильно удивил. Я после ~14 лет в айти и зная на хорошем уровне почти семь языков программирования не мог бы не гугла ответить на 80% того, что там спрашивали. Начиная от классических вещей с плохих собеседований в стиле: «Какая асимптотическая сложность у сортировки Хоара, если использовать двоичную кучу?» и заканчивая упоминанием узкоспециализированных UNIX-утилит, которые даже сисадмины то запускают раз в год.

То есть конкурс очень сильно провоцировал пытаться успевать гуглить (ну или чтобы твои товарищи по команде сидели рядом и гуглили). А ещё вопросы повторялись. Получается, косвенно за факт просмотра стримов предыдущих контестов участник мог получить баллы.

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #6

И ещё забавный факт: администрация в каждый контест включила блок вопросов из разных гик-вселенных, вроде «Звездных войн» и «Стартрека». Мысль о том, что программисты это в основном гики, звучит разумно. Меня крайне удивила ситуация, когда участники не смогли назвать двух капитанов Энтерпрайза. И вообще, эти разделы выбирали неохотно и в последнюю очередь. Видимо, сейчас IT так популярны, что сюда идут вообще все, в том числе не слишком увлечённые технологиями (и как следствие — фантастикой) люди.

Выполнение заданий

Как я уже писал, каждое задание четко попадало под компетенцию одного из участников. Разве что не было заданий на бэкенд, но Гриша делал нам моки данных и решал все допы, что суммарно принесло нам едва ли не больше баллов, чем основные задания (об этом ниже).

Ваш покорный слуга брал на себя задачи по вебу: была пара тем на уязвимости, а остальное — вёрстка демок по готовым макетам. Гришка брал на себя в точности такие же задачи по мобильной разработке, делая решения под Android. В заданиях по дизайну Алдар придумывал макеты и внешний вид для разных пользовательских сценариев.

Задания по дизайну были полноценной частью хакатона, программисты их делать не могли даже на общем уровне, поэтому своеобразным внутренним мемом хакатона стал хэштег #агдекод, намекающий организаторам на то, что нужны задачи по программированию.

Второе подряд задание по дизайну вызвало такую реакцию
Второе подряд задание по дизайну вызвало такую реакцию

Честно признаться, лично мне задания скорее не понравились. На хакатоне ты обычно хочешь материализовать какую-либо идею, почти вся твоя умственная деятельность уходит на продумывание концепции и написание логики. Здесь же задания состояли из кропотливой и изнурительной работы по переносу готовых макетов в какую-то минимальную логику, придуманную другими. Рутинная работа с капризными мелочами, в которой эти самые мелочи оценивались выше всего. Особенно в вебе, где вёрстка ведёт себя не только по-разному на разных операционных системах, но и иногда ведёт себя не так, как ты от неё ожидаешь. Потому что стандарты там со временем накладывались один на другой, а диапазон их поддержки чудовищно размыт.

Задание с картой, за которое я получил больше всего баллов из всех своих работ, кроме тренировочной задачи в первый день. Связь эмоций и тем постов на карте.
Задание с картой, за которое я получил больше всего баллов из всех своих работ, кроме тренировочной задачи в первый день. Связь эмоций и тем постов на карте.

Задания по дизайну, наоборот, были лишены важных подробностей и чёткости ТЗ, но при этом оценивались согласно гайдлайнам. С одной стороны как бы говорили «придумайте», а потом «ну, вы придумали не так, как мы ожидали».

Задание по дизайну редактора подкастов, которое сделал Алдар
Задание по дизайну редактора подкастов, которое сделал Алдар

Мобильному Гришке было проще всего: если что-то работало и правильно отрисовывалось у него, то скорее всего так же было и у жюри. При этом, мобильных разработчиков было мало, а с Гришкиным опытом — и того меньше. Он легко обходил конкурентов на поворотах.

Найдите на этом скриншоте пасхалку
Найдите на этом скриншоте пасхалку

Начисление баллов

Единственный по-настоящему серьёзный просчёт организаторов хакатона и объект самой значительной критики со стороны многих участников. Всё остальное, о чём я тут пишу — субъективные придирки. Но система начисления баллов показала себя объективно нелогичной с самого начала. И проблема была в тестах. Тесты из 10 вопросов давали по баллу за каждый правильный ответ каждому участнику команды.

Команды из 4 участников за полностью решённый тест получали 40 баллов, а команды из трёх — 30. И так далее. Если в основных заданиях сильный многофункциональный специалист теоретически мог бы хотя бы попытаться делать и дизайн, и приложения, то в тестах у команд из 1-3 человек не было никаких шансов.

К тому же, основное задание оценивалось максимум в 25 баллов, и получить этот максимум было очень непросто. Нужно было абсолютно идеально выполнить всё под несколько платформ. Из нашей команды за все 2 недели максимум получил только один раз я за тренировочное задание, всё. При этом тест давал 40 баллов, что чертовски обесценивало работу по основным заданиям.

Ближе к концу недели был конкурс мемов. Позицию в рейтинге он не менял, но всё равно было забавно. Конечно мемы, выбранные администрацией, показывают всю глубину выражения «О вкусах не спорят». А на картинке мой мем, получивший, кажется, наибольшее число лайков от участников.
Ближе к концу недели был конкурс мемов. Позицию в рейтинге он не менял, но всё равно было забавно. Конечно мемы, выбранные администрацией, показывают всю глубину выражения «О вкусах не спорят». А на картинке мой мем, получивший, кажется, наибольшее число лайков от участников.

А работы было много. Основные задания без преувеличения тратили целую ночь: 6-10 часов работы после рабочего дня. В одну из суббот я днём клал керамогранит на балконе, а ночью до утра делал задание по вебу — так сильно я не уставал, пожалуй, никогда. Получить за него потом 17 баллов из 25 было очень обидно, хоть и ожидаемо: я вообще не сделал целый экран. И это одна из проблем — полное отсутствие простого в техническом исполнении, но довольно муторного по затратам времени экрана лишило меня трети баллов, хотя я уверен, что один из немногих, кто сделал технически сложную функцию вырезания звука в браузере на iOS. У многих ли участников работало вырезание на iOS в браузере? Сомневаюсь.

Тот самый редактор подкастов. Попробуйте сделать в браузере, и чтобы работало с мобильника на любой платформе.
Тот самый редактор подкастов. Попробуйте сделать в браузере, и чтобы работало с мобильника на любой платформе.

Непродуманная система начисления баллов привела к тому, что список команд в топе стабилизировался на примерно одних и тех же названиях, которым удалось вырваться, и в дальнейшем менялся очень слабо. Дополнительные 3-4 часа ночной работы, потраченные на мелочи в выполнении задания, равнялись одному (!) неправильно отвеченному вопросу в тесте на 10 минут.

Топ в начале второй недели, все будущие победители уже тут
Топ в начале второй недели, все будущие победители уже тут

Магазин

Помимо рейтинга баллы можно было тратить в магазине мерча. При этом из рейтинга баллы не изымались, иначе бы их вряд ли кто тратил. Сама идея очень хороша: для тех, кто уже точно не претендует на топ, формально появляется мотивация не уходить из соревнования. И в качестве небольшого приятного дополнения к основному соревнованию весьма неплохо. А ещё в магазине были полезные «перки» для участников: например, возможность отодвинуть дедлайн по сдаче задания или подготовка презентации к питчингу.

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #14

Но несовершенная экономическая модель сильно ударила и по этой идее тоже. Команда-абсолютный лидер по баллам набрала за две недели всего 119 баллов на человека, то есть хватало на самые дешёвые вещи. Средний уровень баллов у команды за весь хакатон по моим оценкам вышел около 100-200 на всех. Из-за этого дешёвые товары разобрали очень быстро, а дорогие смог себе позволить мало кто. Под конец люди даже торговали баллами в чате (баллы можно было переводить): одни пытались купить баллы, чтобы приобрести в магазине хоть что-то, а другие пытались продать баллы, потому что девать их было некуда ввиду отсутствия дешёвых товаров.

Не шутка
Не шутка

Финал

Последнее задание было забавным: специальный генератор составил темы вымышленных проектов. Каждой команде попалась случайная тема, по которой нужно было сделать питч с презентацией. Там могло быть что-то типа «социальная сеть для шоппинга супергероев». Очень классная задумка, делать это задание было по-настоящему интересно после рутинных «сверстай макет».

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #16

В питче участвовали топ-20 команд. И здесь снова проявились проблемы наградной математики — например пятое место отставало от нас ровно на 25 баллов (мы были на втором), а это значит, что мы попадали в топ-5, даже если бы получили за презентацию ноль. И наоборот: у команд ниже 9 места не было никаких шансов. Из-за этого примерно половина команд с питча просто слились, не стали ничего делать.

Нам попалась тема «персонализированный чат-бот для занятий спортом домашних животных». Ну и мы его закодили. Делать чат-бота это вам не социальную сеть сверстать. Гришка за несколько часов набил логику, Алдар нарисовал классные рисунки. Кажется, MVP не было ни у кого, кроме нас. Это было необязательным условием, но ценилось, так что мы получили за презентацию 22 из 25.

Листайте карусель
Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #18
Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #19
1 of 3
Листайте карусель

Впрочем, питчи абсолютно никак не поменяли раскладку топ-5. Не изменились ни сами команды, ни даже их порядок. За питчи все получили примерно 18-22 балла, и разрывы между командами соответствовали подобному разбросу.

В итоге у нас второе место из 647 команд. По крайней мере, формально на хакатоне зарегистрировалось именно столько. По факту, конечно, весь низ списка команд это какие-то непонятные участники с нулём баллов. А середина — те, кто проходил только тесты. По моим ощущениям, реальных участников, которые сдали хотя бы одно основное задание, было около 150 команд.

Итоговая таблица
Итоговая таблица

Заключение

Моя девушка сразу сказала, что подобный хакатон, вероятно, для людей без работы и семьи. И была права, поскольку он требовал гораздо больше внимания, чем я хотел ему дать, но спортивный азарт вынудил меня идти на истощение.

Автор мема: Даниил Суворов (https://vk.com/severecloud). На скрине в портале первое задание хакатона.
Автор мема: Даниил Суворов (https://vk.com/severecloud). На скрине в портале первое задание хакатона.

Реально, хак требовал очень много сил и внимания. Постоянно какие-то обновления, постоянно ловить задания, пытаться успеть на регистрацию, делать по ночам часами вёрстку, следить за рейтингами, не упускать детали в стримах и чатах. Будь я школьником или студентом, кайфовал бы, но после работы и вперемешку с бытовыми делами — очень тяжело. Впрочем, школьником я имел гораздо меньше опыта и делал бы задания хуже. Как в тосте «Чтобы наши желания совпадали с нашими возможностями», да.

Организаторы, конечно, тоже не спали. Сутками проверяли задания и отвечали на однообразные (а нередко и откровенно глупые) вопросы в чатах. За что им огромное спасибо, я прекрасно понимаю, сколько это отнимает энергии.

На мой личный взгляд пофиксить 90% проблем хакатона можно за один ход:

Давать за основные задания по 100 баллов, вместо 25.

Следите за рукой. Такая экономика сразу позволила бы:

  1. Команде из 2-3 сильных специалистов не особо переживать из-за того, что во всех тестах они на 10-20 баллов отстают от команд в 4 человека.
  2. Команды могли бы уменьшать отставание на 20-30 баллов, просто несколько дополнительных часов посидев над основным заданием.
  3. Лучше распределить работу магазина.
  4. Сделать менее обидным проигрыш, потому что баллы позволили бы набрать в магазине товары.
  5. Не переживать из-за того, что не успел зарегистрироваться на code in the dark и kitten contest, которые дают 10 баллов.
  6. Меньше людей слилось бы с питчинга, и в целом питчинг был бы более ценен своей способностью эффективно сокращать отрывы, если вложиться очень сильно.
  7. Был бы смысл для людей присоединяться к соревнованию не с первого дня хотя бы ради мерча.

Тем не менее, я благодарю организаторов хакатона за интересный опыт, своих соперников за напряжённое соревнование, а свою команду за высокий профессионализм и организованность.

Как мы вошли в число победителей двухнедельного онлайн-хакатона, image #22
1106 views·9 shares