Как мы НЕ выиграли внутренний хакатон JetBrains

Вступление

В прошлые выходные компания JetBrains устраивала хакатон у себя в офисе. Оказывается, они делают что-то подобное каждый год, но предыдущие разы могли участвовать только сотрудники, а сейчас достаточно было, чтобы как минимум один человек в команде был сотрудником.

По правилам можно было делать что угодно, никаких ограничений. У нас в команде было аж трое бэкенд-разработчиков, двое из которых с фронтенд-опытом, и один чистый фронтендщик.

Как мы НЕ выиграли внутренний хакатон JetBrains, image #1

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

Таким образом мы решили делать TowerDefence-игру для изучения программирования на Kotlin, в которой игроку нужно было решать задачки на этом языке, чтобы отражать атаки вражеских кораблей на… остров Котлин :) Ну и на каком языке мы писали бэкенд вы тоже, думаю, уже догадались.

Начало

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

Как мы НЕ выиграли внутренний хакатон JetBrains, image #2
Как мы НЕ выиграли внутренний хакатон JetBrains, image #3
1 of 2

Проблемы начались с неожиданной стороны. Первые 20 минут я собирался потратить на настройку контейнера для быстрого деплоя, а потом заниматься основными задачами. Мы писали на Kotlin, где основной системой сборки и управления зависимостями является Gradle, и тут наш ждал сильный облом:

  • Проект, созданный на одном компьютере, не собирался на другом.
  • Контейнер, собирающийся на одной операционной системе, вылетал на другой.

Мы в итоге потратили около 5 часов на борьбу с призраками в машине, в том числе сходили в другой корпус к разработчикам Kotlin и специалистам по Gradle. Кстати, довольно интересный опыт, когда ты сидишь на хакатоне и используешь технологию, разработчики которой сидят в соседнем здании, и ты можешь пойти и спросить их что-нибудь.

Если увеличить фотографию, можно увидеть очень актуальный рекламный блок
Если увеличить фотографию, можно увидеть очень актуальный рекламный блок

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

Сам Kotlin, кстати, оставил скорее приятные впечатления. Если бы не ужасная и перегруженная сущностями система организации проектов от Java, которая ведёт себя непредсказуемо и требует ручной настройки, можно было бы даже взять его, как один из основных языков для различных бэкенд-проектов. Но нет.

Листайте, тут несколько фоток
Как мы НЕ выиграли внутренний хакатон JetBrains, image #6
Как мы НЕ выиграли внутренний хакатон JetBrains, image #7
Как мы НЕ выиграли внутренний хакатон JetBrains, image #8
1 of 4
Листайте, тут несколько фоток

Однако, язык очевидно сделан людьми для людей а не как C++, и очень многие вещи создают удобство из коробки. В целом, язык заимствовал идеи из C#, а некоторые даже развил: секвенции и генераторы, array-хелперы, extension-методы и прочие классные плюшки, которые делают код не только лаконичным, но и визуально изящным.

Организация

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

Несколько фотографий интерьера
Как мы НЕ выиграли внутренний хакатон JetBrains, image #10
Как мы НЕ выиграли внутренний хакатон JetBrains, image #11
1 of 3
Несколько фотографий интерьера

На каждом этаже есть мини-кафе с кофе, чаем, безалкогольными напитками, печеньками и шоколадками, орехами четырёх видов. Помимо этого во всех коридорах есть просто небольшая вставка с кофемашиной, мини-холодильником с соками и всякими снэками.

На последнем этаже выход на крышу и комнаты для сна (!). Правда, на хакатоне спрос на них был так высок, что нам не досталось, но сама идея о том, что можно комфортно поспать на работе, очень хороша.

Ещё есть настольный хоккей, бильярд, пианино, много разных диванов и бинбэгов, комфортные переговорки, большие круглые столы и мягкие кресла.

Ещё немного фоток
Как мы НЕ выиграли внутренний хакатон JetBrains, image #13
Как мы НЕ выиграли внутренний хакатон JetBrains, image #14
1 of 3
Ещё немного фоток

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

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

Угол для выживания, где раздавали даже зубные щётки с пастой
Как мы НЕ выиграли внутренний хакатон JetBrains, image #16
1 of 2
Угол для выживания, где раздавали даже зубные щётки с пастой

Работа и продукт

Обстановка нас расслабила, к тому же один из участников в середине второго (основного по рабочей нагрузке) дня вынужден был улететь в другой город. И ещё мы плохо распределили роли: много задач легко на одного человека, который делал фронтенд. В итоге мы все к нему подключились, но было уже поздно, не успели делать много фич, которые запланировали.

Рабочий процесс
Как мы НЕ выиграли внутренний хакатон JetBrains, image #18
1 of 2
Рабочий процесс

Получилась браузерная игра: на форт основа Котлин нападают враги. Когда таймер достигает нуля, они выпускают торпеды, которые будут снимать с форта жизни. Но у вас есть программируемые орудия, а разведка выяснила, что торпеды будут запущены в определенном порядке (каждая торпеда это какое-то число).

Как мы НЕ выиграли внутренний хакатон JetBrains, image #19

Вам нужно написать программу, которая генерирует такую же последовательность. В область видимости в программу приходит N — общее число торпед, и метод fire(), который позволяет стрелять. Например, если разведка доложила:

1 2 3 4 5 6 7 ...

То вам нужно написать:

for(i in 1..N) {
  fire(i)
}

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

Допустим, вам нужно сгенерировать вот такую последовательность:

1 1 1 1 1 1 ....

N раз, но нельзя пользоваться числами, никакими! Слабо?

Попробовать игру можно по ссылке: https://kotlinforts.justanother.app

Ложка дёгтя и конец

Мы почти дописали ещё две интересные фичи, но уже не успели к дедлайну, поэтому решили их не доделывать. После чего были презентации продуктов, и тут возникла одна из двух моих претензий к организаторам хакатона. Проектов было очень много: всего 55. Люди в зале были очень уставшие после хакатона и быстро расходились. Тем, кто выступал первыми, досталось очень много внимания, а тем, кто последними — очень мало. 55 презентаций по 5 минут подряд это крайне тяжело, особенно после того, как ты двое суток писал код почти без перерыва. Очевидно, нужно было бить демонстрацию на категории и запускать параллельно. Да, не все увидели бы все проекты, но и так большинство не увидело все проекты, и вообще не было способно их воспринимать.

Презентации были одновременно из Петербурга, Мюнхена и Праги, в онлайн-режиме
Презентации были одновременно из Петербурга, Мюнхена и Праги, в онлайн-режиме

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

Выбор проводился коллегией жюри по номинациям, и отдельной категорией шло голосование зрителей. Мы не взяли ни то, ни другое, и тут у меня есть ещё одна претензия к организаторам, но она не такая, как вы могли бы подумать: «Ааа, мы не выиграли, всё обман!». На самом деле я хотел бы почитать отзывы жюри и голосовавших на наш проект, понять, что сделали не так, где не дожали, что можно было бы улучшить. Хочется увидеть, как проводилась оценка, чтобы, например, участвовать в следующем году более релевантно.

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

В голосовании лидерами стали проекты, связанные с JetBrains, корпоративной жизнью, офисом и продуктами компании. А в выборе жюри победили проекты, которые лучше презентовались и были более понятны, к тому же успели сделать некоторый дополнительный пиар по внутренним каналам.

Как мы НЕ выиграли внутренний хакатон JetBrains, image #21

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

В любом случае, было интересно и полезно, дни прошли не зря, а опыт обязательно пригодится в дальнейшем :)

1029 views·7 shares