Источник: https://vk.com/vkteam?w=wall-147415323_7075&z=photo-147415323_457244843%2Falbum-147415323_278132289
Источник: https://vk.com/vkteam?w=wall-147415323_7075&z=photo-147415323_457244843%2Falbum-147415323_278132289

Чемпионаты по программированию — это прекрасная возможность получить практический опыт, деньги и работу. Рассказывая про свой опыт победы и формат VK Cup, я поделюсь советами по процессу решения практической части, проработке идей и реализации продукта, а также по тому, как блистать на сцене. Это будет полезно и вне рамок соревнований.


Предисловие

Я узнал про VK Cup из одной из множества рассылок, которые регулярно приходят мне и вам на почтовый ящик. Участвовать решил из-за имени и даже не представлял, что это может во что-то вылиться.

Отбор на данное соревнование простейший: требовалось решить тест на проверку теории по языку и ОС (в моем случае — Android). Вопросы простые, ответы можно найти по первому запросу в гугл, поэтому при отборе не должно возникнуть сложностей. Полагаю, данный этап помогает отсеять тех, кто не собирается всерьез браться за решение: из тысячи подавших заявку только 256 прошли в следующий этап.

Далее речь пойдет про основные этапы соревнования: практическую и продуктовую части. Данные этапы можно встретить и на других соревнованиях, например здесь, здесь и здесь, а продуктовый этап есть во всех хакатонах без исключений. Если вы собрались участвовать в подобных соревнованиях или думайте об этом, эта статья для вас.


Практическая часть соревнований: решение задач

Задания трека Mobile. Источник: https://codeforces.com/contest/1309
Задания трека Mobile. Источник: https://codeforces.com/contest/1309

Об этапе: Практическая часть представляет собой решение 7 больших задач за 2 недели. Самое главное на этом этапе — набрать как можно большее количество баллов. 2 недели — очень маленький срок, потому что требуется не только сверстать экраны, но и соблюсти ряд бизнес-требований с использованием VK API. Тактики здесь две: делать упор на количество и решить как можно больше задач или на качество, стараясь совершенствовать техническую сторону.

Рассмотрим самую простую задачу — отображение документов из VK. Требования и макеты для нее представлены на скриншотах ниже.

Требования первого задания. Источник: https://codeforces.com/contest/1309/problem/A
Требования первого задания. Источник: https://codeforces.com/contest/1309/problem/A
Макет первого задания. Источник: https://www.sketch.com/s/4WWb3
Макет первого задания. Источник: https://www.sketch.com/s/4WWb3

Помимо реализации базовой функциональности, приложение можно докручивать бесконечно:

  • совершенствовать архитектуру;

  • добавлять кеш;

  • реализовать постраничную загрузку данных и их preloading;

  • реализовать просмотр всех типов документов напрямую в приложении;

  • …и много другое.

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

Совет #1: Чтобы преуспеть при прохождении данного этапа, важно не держать все голове и где-то хранить идеи и процесс выполнения. Вот так выглядела моя итоговая Kanban-доска, которая даже не поместилась в скриншот:

Совет #2: Если вы считаете, что какая-то задача вам не по силам, не приступайте к ней. Лучше уделите больше времени тому, с чем вы можете справиться, так вы получите больше баллов. Для меня непосильной задачей была реализация функциональности а-ля Instagram-stories, только взгляните на один из экранов:

Макет задания “Camera App”. Источник: https://www.sketch.com/s/V889A
Макет задания “Camera App”. Источник: https://www.sketch.com/s/V889A

По итогам раунда в финал попало 40 мобильных разработчиков из 256, моя тактика не подвела:)


Продуктовая часть соревнований

Выступление. Источник: https://vk.com/vkteam?w=wall-147415323_7528
Выступление. Источник: https://vk.com/vkteam?w=wall-147415323_7528

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

Совет #3: На этапе представления продукта самое главное — ваша идея! Больше всего это касается хакатонов. Ваш продукт должен решать какую-то проблему, приносить пользу, удовлетворять чьи-то потребности, иначе в вашем продукте нет смысла и он ни за что не выиграет. На подобных соревнованиях от вас не требуют конечной реализации: сделайте MVP и попытайтесь чем-то удивить. Не думайте над архитектурой и качеством кода. Но не переборщите: организаторы все же смотрели на код, но по моим ощущениям это была скорее “проверка на адекватность”.

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

В конце концов я решил переиспользовать экраны документов и альбомов и сделать “Облако ВКонтакте” — расширить экосистему облачным хранилищем. Почему я посчитал, что эта идея может выстрелить, смотрите в моем выступлении.

После определения темы я начал накидывать дизайн, получилось примерно так (да, дизайнер из меня так себе):

Сама реализация получилась следующей:

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

Совет #5: Как впечатлить жюри. Сделайте логотип! Логотип придаст вашему продукту элемент завершенности. Если дизайнер из вас так себе (вспомните мой прототип), попросите знакомых. Я обратился к своему коллеге-дизайнеру. Результат на скриншоте ниже. Дизайнеры VK были в восторге, это определенно сыграло мне на руку.


Выступление

На эту тему есть уже много статей и рекомендаций. Пожалуй, больше всего мне помогла серия видео про мастерство презентаций. Для себя я четко определил следующее:

Совет #6: Составьте текст выступления заранее. Если вы можете без этого — вам повезло, я по-другому не могу. Это сильно помогло мне не волноваться.

Совет #7: Отрепетируйте выступление! Желательно с теми, кто может покритиковать вас и задать хорошие вопросы. С любимой бабушкой лучше не репетировать.


Во что вылилась победа

После победы можете ожидать получения шестизначной суммы на банковский счет и не сомневаться в получении письма счастья от HR-менеджера со стороны организаторов.

Также, когда последний этап еще не начался, работодателей приманивал сам факт выхода в финал такого чемпионата.

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

Совет #8: Укажите опыт участия в подобных чемпионатах в своем резюме.


Краткие итоги

  1. Чемпионаты, хакатоны и соревнования по программированию — это прекрасная возможность для получения:

    1. опыта выполнения заданий в сжатые сроки;

    2. денег;

    3. работы.

  2. При выполнении практических задач:

    1. самое главное — корректное решение задач и набор наибольшего количества баллов;

    2. не пытайтесь держать все идеи и прогресс в голове, используйте Kanban-доски.

  3. При работе над непосредственным продуктом:

    1. самое главное — идея;

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

  4. До выступления:

    1. заранее составьте текст (если можете без этого — отлично);

    2. отрепетируйте с теми, кто может дать совет по выступлению, задать вам вопросы и покритиковать.

  5. Чтобы впечатлить жюри, сделайте логотип для продукта.

Ссылки

  1. Задания практической части VK Cup по мобильной разработке.

  2. Выступление.