Чемпионаты по программированию — это прекрасная возможность получить практический опыт, деньги и работу. Рассказывая про свой опыт победы и формат VK Cup, я поделюсь советами по процессу решения практической части, проработке идей и реализации продукта, а также по тому, как блистать на сцене. Это будет полезно и вне рамок соревнований.
Предисловие
Я узнал про VK Cup из одной из множества рассылок, которые регулярно приходят мне и вам на почтовый ящик. Участвовать решил из-за имени и даже не представлял, что это может во что-то вылиться.
Отбор на данное соревнование простейший: требовалось решить тест на проверку теории по языку и ОС (в моем случае — Android). Вопросы простые, ответы можно найти по первому запросу в гугл, поэтому при отборе не должно возникнуть сложностей. Полагаю, данный этап помогает отсеять тех, кто не собирается всерьез браться за решение: из тысячи подавших заявку только 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-доски.
При работе над непосредственным продуктом:
самое главное — идея;
используйте мозговой штурм для генерации идей, спросите своих коллег/семью/друзей о том, что им не хватает, какие у них боли при использовании продукта, который вам надо улучшить.
До выступления:
заранее составьте текст (если можете без этого — отлично);
отрепетируйте с теми, кто может дать совет по выступлению, задать вам вопросы и покритиковать.
Чтобы впечатлить жюри, сделайте логотип для продукта.