5-6 июня в Киеве состоялся финал IX Чемпионата по разработке DEV Challenge IX. Он стартовал в середине марта и состоял из нескольких этапов: отборочного, полуфинала и финала. Команда Lohika принимала участие в номинации Web Team и по результатам финального задания заняла первое место. Члены команды поделились своими впечатлениями о чемпионате.
Состав команды Lohika:
- Сергей Морковкин, Team Lead в компании Lohika. Опыт работы в web-разработке 16 лет. Победитель первого чемпионата UA Web Challenge в номинации «Веб мастер».
- Иван Дорошенко, Team Lead в компании Lohika. Опыт работы в web-разработке более 7 лет (single page приложения и web-сервисы, приложения для медиа-рынка).
- Владимир Замышляев, Senior ENGINEer в компании Lohika. Последние 6 лет занимается web-девелопментом. Успешно принимал участие в разработке нескольких десятков корпоративных и медиа-приложений. Нравится решать задачи web for mobile и разрабатывать с использованием WebGL и Canvas.
Ребята, почему стоит участвовать в подобных чемпионатах?
Участие в чемпионатах дает уникальный опыт интенсивной командной работы. Это сплачивает людей, дает возможность узнать друг друга лучше в качестве технических специалистов. Еще это азарт.
Иван Дорошенко, команда Lohika: «Ощущение азарта, ощущение радости, когда побеждаешь. Я решил принять участие в чемпионате из чувства солидарности с ребятами. Безусловно, было интересно оценить себя в рамках украинского IT-сообщества».
С какими трудностями вы столкнулись?
Сергей Морковкин, команда Lohika: «Трудности были, но мы с ними справились (смеется). Трудности были относительные. Для нас они заключались в выборе технологии, задача состояла в том, чтобы создать лучшее решение, на которое мы способны. В этот момент было важно перечислить все варианты, которые можно создать, сравнить и выбрать лучший. К примеру, на отборочном этапе было задание: создать систему автоматизации процесса заключения контракта между туристической компанией и клиентом. В работе над коммерческими проектами у заказчика чаще всего есть четкая позиция, какие технологии нужно использовать, а в чемпионате у нас была возможность самостоятельно выбирать технологию.
После некоторых раздумий мы приняли решение не использовать популярные фреймфорки: React, Angular. Вместо этого использовали тот стек технологий, который позволил нам создать максимально простое и функциональное решение. В нашем случае был выбран фреймворк Vue.js, создана build-система с использованием WebPack. Полностью был оптимизирован процесс разработки, включая функцию Hot Module Replacement, автоматическую перезагрузку api-сервера с помощью nodemon и прекомпиляцию less-стилей. Все это позволило вести разработку с максимальной скоростью.
Далее ситуация сложилась так, что те наработки, которые мы использовали для отборочного этапа, не пригодились в финале. Работу над финальным заданием мы начинали практически с нуля».
Насколько сложное было задание в финале чемпионата?
Иван Дорошенко, команда Lohika: Задача была создать игру в футбол в реальном времени, где игрокам вид на поле представлен сверху. Каждый, кто заходит на страничку, видит своего игрока на поле и определяется в одну из команд. Управление игроком происходит с помощью курсорных клавиш. Нашей команде повезло, т.к. у нас был схожий опыт: два члена нашей команды работали над созданием realtime-приложений на canvas и уже были знакомы с игростроением. Узнав задание, мы быстро спланировали, как должна быть реализована игра, затем разделили задачи. Сложнее всего было уложиться в 6 часов, которые были отведены для выполнения финального задания.
Мы понимали предметную область: интерактивный игрок, поле, мяч, знали, какие действия и зависимости есть между ними, учитывали коллизии. После этого, определились с протоколом, методом передачи направления и позициями игроков. На back-end мы не использовали зависимостей, только express и инфраструктурные библиотеки, так же нам пригодились знания геометрии.
Если говорить откровенно, задание было сложное, и нам не хватало рабочих рук, чтобы все успеть в срок. Мы так и не успели сделать качественное тестирование, на которое требовалось дополнительно 1,5 часа. Мы были очень удивлены, когда узнали о победе».
Мы также задали ряд вопросов представителю организаторов чемпионата – Ирине Джунь, и команде судей номинации – Александру Мариничу, Михаилу Образенко.
Ирина, расскажите немного о номинации Web Team, какие требования и критерии отбора выдвигались участникам?
Ирина Джунь, представитель организаторов чемпионата: «В чемпионате по разработке DEV Challenge IX есть действительно уникальная номинация – Web Team. Организаторы вложили в нее следующий смысл: каждый из участников команды должен показать себя и как разработчик, так и командный игрок. То есть, кроме выполнения задания, которое предложили судьи, каждый должен был показать умение распределять свое время в момент экстремальной нагрузки. Кроме этого, каждый разработчик должен быть хорошо синхронизированным с другими членами команды.
Все выше перечисленное сразу дает понять, что программистам, которые еще не работали в команде, будет почти нереально принимать участие в чемпионате по разработке в номинации Web Team. Цель соревнования в данной номинации – найти и определить наиболее сработанную команду, что мы и сделали.
В финал чемпионата по разработке прошло три команды, которые показали неожиданно хороший результат по трем основным критериям: self-management, скорость и качество разработки. К сожалению, одна команда покинула соревнование, поскольку не смогла совладать с внутрикомандным волнением и выполнить чересчур сложное задание. Несмотря на то, что мы получили два неплохих решения, с заданием финала не справилась ни одна из команд.
Во время второго дня финала чемпионата по разработке в сессии фидбеков судья номинации Александр Труш четко указал на недостатки полученных решений и высказал ряд советов, к которым командам необходимо прислушиваться, например: не использовать чрезмерное количество кода, придерживаться одного стиля и сбалансировать распределение времени на front-end та back-end.
Вопрос судьям. Чем был обоснован выбор задания для финала?
Александр Маринич, Engineering Manager@Grammarly, судья номинации Web Team
При создании задания мы с коллегами руководствовались следующими критериями:
- Хотелось сделать задание «вкусным» с инженерной точки зрения. Мы старались придумать алгоритмически насыщенное задание, не очевидное с первого взгляда. Вместе с тем хотелось, чтобы решение имело шансы быть компактным и элегантным. Мы надеемся, что заставили участников интенсивно думать, и потом быстро делать.
- Многие имеют мнение о том, что такое хорошая игра, но мало кто умеет их делать. Нас привлекла идея, что качество игрового опыта может быть одним из главных критериев успеха. В этом есть продуктовая нотка, некоторая сознательная дистанцированность от технических подробностей реализации.
- Ну и последний немаловажный аргумент: мы бы и сами были не против выполнить подобное задание, и потом сразиться в собственноручно написанную игру.
Михаил Образенко, CTO@Proffstore, судья номинации Web Team
По результатам отборочного этапа чемпионата команда Lohika зарекомендовала себя в качестве достойного участника обладающего опытом и навыками разработки веб-проектов. Для решения отборочного задания использовался фреймворк Symfony a в качестве виртуальной среды ими был выбран Vagrant, с развертыванием конфигураций которых у судей чемпионата не возникло проблем. В решении угадывалась значительная часть переиспользованного кода. Полученное решение не соответствовало всем требованиям поставленного задания, однако являлось одним из лучших.
Подводя итоги нашей беседы, ребята, что вы можете пожелать участникам будущего чемпионата?
Сергей Морковкин, команда Lohika: «Будьте готовы к самым разнообразным и непредсказуемым заданиям. Нужно уметь решать типовые задачи, знать типовые паттерны, которые могут пригодиться для реализации заданий. И еще очень важно провести подготовительные работы до начала конкурса. Следует подготовить:
- репозиторий;
- live-server;
- deployment scripts;
- виртуальную машину для того, чтобы все крутилось и судьям было удобно разворачивать работу;
- build-систему, ускоряющую процессы разработки и деплоймента, включая все build scripts, watchers, live reloads и так далее.
Web-разработка – это процесс, в рамках которого приходится выполнять очень много рутины. Шансы на победу значительно увеличиваются, если все эти подготовительные работы сделать до начала конкурса.