Хакатоны и чемпионаты по программированию: how to win
Чемпионаты по программированию — это прекрасная возможность получить практический опыт, деньги и работу. Рассказывая про свой опыт победы и формат VK Cup, я поделюсь советами по процессу решения практической части, придумыванию идеи и реализации продукта, а также по тому, как блистать на сцене. Это будет полезно и вне рамок соревнования.
Предисловие
Я узнал про VK Cup из одной из множества рассылок, которые регулярно приходят мне и вам на почтовый ящик. Участвовать решил из-за имени и даже не представлял, что это может во что-то вылиться.
Отбор на данное соревнование простейший: требовалось решить тест на проверку теории по языку и ОС (в моем случае — Android). Вопросы простые, ответы можно найти по первому запросу в Google, поэтому при отборе не должно возникнуть сложностей. Полагаю, данный этап помогает отсеять тех, кто не собирается всерьез браться за решение: из тысячи подавших заявку только 256 прошли в следующий этап.
Далее речь пойдет про основные этапы соревнования: практическую и продуктовую части. Данные этапы можно встретить и на других соревнованиях, например здесь, здесь и здесь, а продуктовый этап есть во всех хакатонах без исключений. Если вы собрались участвовать в подобных соревнованиях, эта статья точно для вас.
Практическая часть соревнований: решение задач
Об этапе: Практическая часть представляет собой решение 7 больших задач за 2 недели. Самое главное на этом этапе — набрать как можно большее количество баллов. 2 недели — очень маленький срок, потому что требуется не только сверстать экраны, но и использовать VK API и соблюсти бизнес-требования. Тактики здесь две: делать упор на количество и решить как можно больше задач или на качество, стараясь совершенствовать техническую сторону.
Рассмотрим самую простую задачу — отображение документов из VK. Требования и макеты для нее представлены на скриншотах ниже.
Помимо реализации базовой функциональности, приложение можно докручивать бесконечно:
- совершенствовать архитектуру;
- добавлять кеш;
- реализовать постраничную загрузку данных и их preloading;
- реализовать просмотр всех типов документов напрямую в приложении;
- …и много другое.
И это всего лишь самое простое приложение! В заданиях есть приложения с камерой, картой, большим количеством экранов и сложной бизнес-логикой, за качеством которых не угнаться за 2 недели. Поэтому я решил выбрать количественную тактику.
Совет #1: Чтобы преуспеть при прохождении данного этапа, важно не держать все голове и где-то хранить идеи и процесс выполнения. Вот так выглядела моя итоговая Kanban-доска, которая даже не поместилась в скриншот:
Совет #2: Если вы считаете, что какая-то задача вам не по силам, не приступайте к ней. Лучше уделите больше времени тому, с чем вы можете справиться, так вы получите больше баллов. Для меня непосильной задачей была реализация функциональности а-ля Instagram-stories, только взгляните на один из экранов:
По итогам раунда в финал попало 40 мобильных разработчиков из 256, моя тактика не подвела:)
Продуктовая часть соревнований
Об этапе: На выполнение последнего этапа давалась неделя: требовалось на основе уже реализованных экранов собрать полноценный продукт. Экраны можно было дополнять как угодно и менять под свои нужды, использовать часть экранов или все сразу.
Совет #3: На этапе представления продукта самое главное — ваша идея! Больше всего это касается хакатонов. Ваш продукт должен решать какую-то проблему, приносить пользу, удовлетворять чьи-то потребности, иначе в вашем продукте нет смысла и он ни за что не выиграет. На подобных соревнованиях от вас не требуют конечной реализации: сделайте MVP и попытайтесь чем-то удивить. Не думайте над архитектурой и качеством кода. Но не переборщите: организаторы все же смотрели на код, но по моим ощущениям это была скорее “проверка на адекватность”.
Совет #4: Чтобы придумать идею, я использовал метод мозгового штурма: накидывал все возможные варианты развития разработанных экранов, их пользы и возможной монетизации, советовался с коллегами и друзьями, а в конце сортировал по простоте реализации и тому, насколько действительно может выстрелить данная идея. Чтобы сгенерировать максимально возможное количество идей, вывел все свои экраны в одно место, это помогло ничего не упустить. На скриншоте ниже представлено, как это было.
В конце концов я решил переиспользовать экраны документов и альбомов и сделать “Облако ВКонтакте” — расширить экосистему облачным хранилищем. Почему я посчитал, что эта идея может выстрелить, смотрите в моем выступлении.
После определения темы я начал накидывать дизайн, получилось примерно так (да, дизайнер из меня так себе):
Сама реализация получилась следующей:
Здесь важно понимать, что некоторые вещи у меня не работают (все кнопки на экране профиля некликабельные), а социальные возможности и развитие документов были представлены как концепты, но победе это не помешало (смотри совет #3).
Совет #5: Как впечатлить жюри. Сделайте логотип! Логотип придаст вашему продукту элемент завершенности. Если дизайнер из вас так себе (вспомните мой прототип), попросите знакомых. Я обратился к своему коллеге-дизайнеру. Результат на скриншоте ниже. Дизайнеры VK были в восторге, это определенно сыграло мне на руку.
Выступление
На эту тему есть уже много статей и рекомендаций. Пожалуй, больше всего мне помогла серия видео про мастерство презентаций. Для себя я четко определил следующее:
Совет #6: Составьте текст выступления заранее. Если вы можете без этого — вам повезло, я по-другому не могу. Это сильно помогло мне не волноваться.
Совет #7: Отрепетируйте выступление! Желательно с теми, кто может покритиковать вас и задать хорошие вопросы. С любимой бабушкой лучше не репетировать.
Во что вылилась победа
После победы можете ожидать получения шестизначной суммы на банковский счет и не сомневаться в получении письма счастья от HR-менеджера со стороны организаторов.
Также, когда последний этап еще не начался, работодателей приманивал сам факт выхода в финал такого чемпионата.
Помогает ли полученный опыт в работе? Ну, скорее да, чем нет. В ситуации большой неопределенности и ограниченности сроков начинаешь отдавать приоритет тому, в чем видишь бо́льшую ценность для бизнеса.
Совет #8: Укажите опыт участия в подобных чемпионатах в своем резюме.
Краткие итоги
- Чемпионаты, хакатоны и соревнования по программированию — это прекрасная возможность для получения: опыта выполнения заданий в сжатые сроки, денег и работы.
- При выполнении практических задач самое главное — это корректное решение задач и набор наибольшего количества баллов.
- Не пытайтесь держать все идеи и прогресс в голове, используйте Kanban-доски.
- При работе над непосредственным продуктом самое главное — это ваша идея. Используйте метод мозгового штурма для ее генерации, спросите своих коллег/семью/друзей о том, что им не хватает, какие у них боли при использовании продукта, который вам надо улучшить.
- До выступление заранее составьте его текст (если вы можете без этого — отлично).
- До выступления отрепетируйте с теми, кто может дать совет по выступлению, задать вам вопросы и покритиковать.
- Чтобы впечатлить жюри, сделайте логотип для продукта.
Ссылки
- Задания практической части VK Cup по мобильной разработке — https://codeforces.com/contest/1309.
- Выступление — https://vk.com/vkteam?w=wall-147415323_7528.