Хакатон. Как не перестать улыбаться за 24 часа

Разберёмся с тем что такое хакатон, откуда растут его ноги, как готовиться, что делать за неделю, за день, сразу по приходу и вообще что делать

Оглавление

Что же такое хакатон?

Термин «хакатон» является словослиянием двух слов: хак (hack) и марафон (marathon).

Впервые это слово появляется в 1999 году независимо друг от друга на двух событиях: встреча разработчиков OpenBSD и конференция JavaOne. В первом случае 10 человек в течении дня разрабатывали криптографические программы, которые бы обходили ограничения США на экспорт криптографических систем, а во втором случае всем желающим было предложено в течении конференции разработать программу на Java для Palm V с использованием ИК-порта. И там и там слово «хакатон» применяется как имя собственное. Однако в сообществе разработчиков OpenBSD это событие становится регулярным и повторяется по несколько раз в год.

Начиная с 2000 года слово «хакатон» становится именем нарицательным и получает более расширительное значение. Но давайте вдумаемся в этимологию этого слова.

Хакинг и хакеры

Первые зарегистрированные упоминания слов «хакинг» и «хакер» относятся к 1960-м годам. При этом это слово не носило отрицательного оттенка. Мне больше всего нравится следующее определение слова «хакер»:

A person who delights in having an intimate understanding of the internal workings of a system, computers and computer networks in particular

Хакер это человек, который получает удовольствие от глубокого понимания систем, компьютеров и компьютерных сетей в частности. Думаю каждый из нас сталкивался с чувством могущества и эйфории в моменты понимания какой-то сложной системы. Это могла быть не только компьютерная система, может быть математическая, механическая, физическая или биологическая. Просто в какой-то момент сложная абстракция вдруг понимается мозгом и сразу в ней всё становится логично и очевидно. Если вы испытывали подобное и это приносило вам удовольствие, то вы самый что ни на есть хакер!

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

Марафон

Итак, как мы выяснили, что каждый из нас хакер. А, если приделать к этому марафон, то есть длительный забег, то получится хакатон. Забавно, что когда мы говорим «длительный забег», то подразумеваем длинную дистанцию, 40 км как никак. Однако, когда мы слышим «длительный забег» мы слышим долгий во временном смысле. Ведь это 4 часа, а то и больше! А это значит, что необходимо будет не только пить во время этого забега, но и чем-то питаться, отдыхать, практически жить во время бега. Это важно понимать и при подготовке к хакатону.

Хакатон vs. Работа

Но кто-то спросит: «Так что же, получается, что у нас хакатон каждый релиз?» Возможно. Давайте разбираться что же отличает хакатон от повседневной работы.

Длительность

Во первых, хакатон подразумевает значительный промежуток времени. Например, марафон занимает от 2 до 4 с лишним часов, что подразумевает питьё и еду на бегу. Это совершенно другой вид нагрузки, даже в сравнении с 10–15 км. Для этого надо знать своё тело и чувствовать своё состояние. Это не должно превращаться в гонку на выживание, а наоборот быть распланированным действием.

Работа в команде

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

Самоорганизация

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

Эксперименты

На хакатоне можно всё: взять альфа версию библиотеки, написать проект на хаскеле, заиспользовать RethinkDB, обучить нейросетку на Бахе или использовать шейдеры для обработки фотографий котиков.

Удовольствие

Вы должны получать удовольствие от программирования на хакатоне. Бывают такие дни, когда на работе мы программируем либо через силу, либо задней левой. Не идите на хакатон, если у вас нет настроения программировать. Всё что вы делаете на хакатоне должно приносить кайф. Если вы не получаете удовольствия во время хакатона, то стоит задуматься, возможно вам не интересна на самом деле задача, которую вы поставили целью своего проекта. Старайтесь избавляться от рутины. Максимально используйте библиотеки и сниппеты. Старайтесь оставить себе только те задачи, которые действительно интересно решать.

Виды и задачи хакатона

Обучение

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

Продвижение определённой технологии: API / библиотеки / языка

С продвижением технологии тоже всё просто. В зависимости от открытости этой технологии сильно зависит и атмосфера на таких мероприятиях. Из интересных событий такого рода — встречи по программированию ПЛИС и вообще хардварные вечеринки, проходящие под эгидой 2600. А также AI Cap, проводимый компанией mail.ru ежегодно с 2012 года. Или Global Games Jam.

Шторминг идей вокруг определённой отрасли

Третий тип хакатонов больше направлен не на технические задачи, а скорее на проверку гипотез, придумывания новых подходов и прочее. В таких мероприятиях лучше брать хорошо известные технологии и инструменты, ведь полем для экспериментов здесь являются идеи, UI/UX решения, переосмысление и смешивание существующих подходов. Интересным примером такого рода хакатона является ЖКХак, хакатон посвящённый инновациям и автоматизациям в сфере ЖКХ. NASA: Space apps challenge

Шторминг идей внутри компании

Это идеи вокруг продуктов компании или возможно новые стартапы внутри компании. Стоит отметить, что знаменитая кнопка «Like» появилась на хакатоне внутри фейсбука. Разрабатывая какой-то продукт в голову приходят разные идеи по его улучшению или идеи по оптимизации работы и взаимодействия внутри компании. Часто такие идеи откладываются в долгий ящик, потому что есть более приоритетные задачи. Однако хакатон это то самое место, где можно реализовать свои идеи и продвинуть их развитие в планы компании.

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

Подготовка

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

Бизнес-идея

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

1 (одна!) идея

Приходить нужно ровно с одной идеей. Если есть конкурирующие идеи, то заранее выберите одну. Броском монетки, камень-ножницы-бумага, долгие обсуждения, не важно. Идея должна быть одна. Очень рекомендую провести пару сессий брейн-шторминга. Самое важное здесь помнить про то, что любой брейн-шторм состоит из двух фаз: накидывание идей, обсуждение. Никогда не высказывайте критику во время генерации идей. Это убьёт всю сессию напрочь. Проще извиниться и разойтись, чем неловко улыбаться ещё полчаса. Такие сессии помимо придумывания идеи помогут вам научиться лучше чувствовать команду, что будет большим плюсом во время самого хакатона.

Конечный результат

Можно рассказывать про SMART задачи и вот это всё. Нет, не заморачивайтесь. Самое главное это понимать конечный результат, к которому вы хотите прийти. Этот результат должен быть чётко сформулирован, лучше записан и быть синхронизирован среди всех участников команды.

План минимум

Вы также должны понимать, что случаются различные форс-мажоры: кто-то заболел и не смог прийти, у кого-то посреди работы сломался комп или ОС решила поставить обновление. Есть куча вещей, которые могут сломать любые оценки. Поэтому всегда надо иметь план минимум. План минимум должен быть рассчитан на хорошую работу двух членов команды в течении половины времени хакатона. Например, у вас есть 24 часа и 5 человек в команде. И вы решили сделать портал для шаринга вещей. Планом минимума здесь может стать сайт, на котором можно залогиниться через контакт, разместить объявление и посмотреть доступные предложения. Без заливки фотографии, без платёжных систем, без встроенного чата, рейтинга, комментариев, блокчейна и прочего. Просто зайти, разместить объявление и посмотреть список. Это можно налячкать на бутстрапе и любом бэкенде двум людям за 12 часов. Если вы не можете выделить такой минимум, посоветуйтесь с менторами.

Свистелки и бибикалки

Всю оставшуюся часть проекта разделите на маленькие фишки, то, что можно делать параллельно. Сделали план минимум? Огонь! Каждый берёт по таске и пошли делать. Вообще хорошо в этом смысле заранее завести организацию на github, создать репозиторий, описать в readme бизнес-идею и конечный результат, а на свистелки и бибикалки открыть тикеты. Ни строчки кода, просто хороший план. Никто вам это не запретит.

Образы, слоган, структура презентации

Тут всё сильно зависит от правил хакатона. Длительные хакатоны часто предполагают две презентации: в начале презентация идеи, в конце — продукта. Конечно, на такие предприятия необходимо приходить с готовой презентацией идеи, а презентация продукта строится по мере реализации. На других мероприятиях эти презентации сливаются в одну. Но, если у вас есть идея, почему бы не подготовить слайды, рассказывающие про неё?

Инструментарий

Отдельно необходимо упомянуть о подготовке инструментов, ибо нет повести печальнее на свете, чем установка ноды на рассвете.

Настроенное окружение

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

Пробуйте библиотеки заранее

Пройдите хотя бы начальные туториалы по библиотекам и фреймворкам, которые собираетесь использовать. Проверьте их работоспособность именно в том сетапе, в котором будете работать, Например, на одном из хакатонов некоторые команды столкнулись с тем, что сервис expo не очень хорошо работает через NAT и требует дополнительной настройки. Если мероприятие не подписано как обучающее, готовьтесь сами и заранее.

Бутстрап проекта

Отличным подспорьем будет бутстрап проекта. Обратите внимание на такие инструменты как yeoman, angular-cli и прочие. Бутстрап может содержать в себе даже какой-то код, например, базовые модельки пользователя, с авторизацией через auth0 или другие социальные сервисы. Подключённые логгеры, шаблонизаторы, настроенные ORM и так далее. Вся обвязка, на которую не хватает времени. Всё, что не относится к вашей бизнес-задаче напрямую. Соберитесь заранее и создайте скелет проекта и сохраните его в репозитории. Эту часть можно считать библиотечной и организаторы обычно её не запрещают.

Хостинг, доменные имена, репозиторий

Купите виртуалку для хостинга заранее, заранее купите доменное имя и назначьте его на эту машину. Дополнительный день на современных хостингах стоит копейки, зато в итоге вы не ждёте 4 часа пока DNS подхватит правильный IP. Проверьте, что у всех есть доступы к хостингу и настройке DNS. Лучше даже завести отдельный аккаунт на команду, получив по промо-кодам дополнительные кредиты.

Бумага или доска

Сделайте всё, чтоб вам было удобно общаться во время мероприятия. Общий чатик, сервис для быстрого прототипирования, шаринг файлов. Всё должно быть быстро и доступно. Во время встреч по штормингу идей заодно определитесь с тем как вам удобнее обмениваться этими идеями. Кому-то проще рисовать на бумаге, кому-то писать в редакторе кода, а кто-то предпочитает коллаборативные документы. А может быть вам будет удобнее вообще работать в облачной IDE.

Сервисы

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

Итого

Пробуйте и экспериментируйте. Выделяйте то, что вас заводит, что делает вас счастливыми и делайте это. Общайтесь и развивайтесь. Да, конечно, обо всём смело спрашивайте менторов, они ведь для этого и есть.