Всем привет, меня зовут Денис Пешехонов. Я работаю в Росатоме тимлидом на C#, а ещё я участник большого количества соревнований по программированию. Вот уже три года подряд езжу на AtomSkills — наше внутреннее Росатомовское соревнование, которое стало крупнейшим в мире корпоративным чемпионатом — и хочу рассказать подробнее о его атмосфере и особенностях применительно к IT-направлениям.
Немного истории
В 1947 году Испания, как и многие другие страны, восстанавливалась после Второй Мировой. Требовалось буквально отстраивать всё заново, что обнажило не только дефицит рабочих рук, но и недостаток квалификации у представителей рабочих профессий. Нужно было привлекать молодёжь, создавать у неё желание идти в сварщики и строители, а не в блогеры. Так что директор Испанской Молодёжной Организации по имени Хосе Антонио Элола Оласо предложил провести соревнование по профессионально-технической подготовке.
Инициатива зашла, и к 1953 году в этих соревнованиях участвовали, кроме Испании, ещё Португалия, Германия, Великобритания, Франция, Марокко и Швейцария. К 1970-му году чемпионат расширил своё влияние на новую часть света — Токио. Под современным же названием он известен только с 2000-х годов — WorldSkills. Сейчас там принимают участие около 80 стран. Чемпионат вырос не только географически, но и тематически — в настоящее время список профессий включает полсотни наименований: как рядовые рабочие специальности (сварка, работа на станках, электрика), так и экзотику вроде "дизайн одежды", "ювелирное дело", "оформитель витрин" и так далее.
AtomSkills
Росатом строит больше всего атомных станций в мире и тоже нуждается в квалифицированных рабочих кадрах. Сварщик или бетонщик на площадке строительства АЭС должен быть профессионалом высочайшего класса, не уступающим по уровню подготовки какому-нибудь Java-сеньору. Поэтому Госкорпорация запустила у себя подобный же чемпионат 9 лет назад, и развивался он очень схожим образом: если сначала в нём соревновались несколько сотен человек по единичным строительным направлениям, то сейчас это мероприятие с 2000+ участников по 42 компетенциям.
Например, существует компетенция "Сметное дело", потому что расчёт смет — реально сложная и очень важная часть проектов, которыми занимается Росатом (и вообще любая крупная промышленная компания). Вот как вы себе представляете соревнование сметчиков? Кажется, что превратить это в спорт невозможно. Тем не менее, есть задание, регламент, критерии оценки, а профессионалы в своём деле съезжаются со всей страны, чтобы завоевать медаль.
"Мехатроника", "Квантовые технологии", "Неразрушающий контроль"... — на площадке уйма интересного. Специалисты по "Охране труда" должны среагировать в искусственно созданной сцене аварии и, например, найти пострадавшего в запертом автомобиле. Специалисты по "Строительному контролю" пробиваются через вахтёршу. "Геодезия" ходит по полям и делает замеры, даже при сильнейшем ливне.
Площадка и атмосфера
Соревнование проводится раз в год в Екатеринбурге — поближе к геометрическому центру нашей страны. На самом деле из года в год фактическое количество стран-участников увеличивается, и в этот раз их было уже десять: в основном это страны-партнёры России по атомным стройкам.
Да и сам по себе Росатом это огромный конгломерат различных организаций, заводов, НИИ, промышленных компаний и так далее. Так что съезжаются действительно отовсюду. В этом отношении Екатеринбург — хороший выбор. А площадкой выступает местный экспоцентр недалеко от аэропорта, не уступающий своими размерами и уровнем павильонам столиц.
На месте разворачивается застройка: под каждую компетенцию огорожена зона со своими правилами и внутренним оборудованием. Где-то нужно разместить станки, где-то достаточно поставить компьютеры, а куда-то должна въехать бетономешалка и залить бетон в оснастку прямо внутри павильона. Разумеется, соблюдается строжайшая техника безопасности, иначе за столько лет проведения чемпионата Экспо бы уже сожгли.
У мероприятия своя айдентика, иконография, фирменный мерч. Люди на чемпионате различаются по цвету штанов цвету формы: участники носят голубое, эксперты зелёное, главные эксперты красное, а тимлидеры жёлтое (здесь тимлидерами зовутся организаторы от дивизионов — люди с поистине фантастическим терпением, выслушивающие ежедневное нытьё пары сотен взрослых, которых они сюда привезли).
Программные решения для бизнеса
Но перейдём к IT. В изначальном WorldSkills есть направление, которое называется Software Solutions for Business. По смыслу это должна быть энтерпрайз-разработка, но по слухам оригинальный регламент соревнования представляет собой создание форм на скорость на каком-нибудь WPF. На AtomSkills несколько лет назад сначала скопировали компетенцию один к одному, но позже поняли, что получается не только не похоже на настоящую работу энтерпрайз-программиста, но и довольно скучно. Поэтому переписали регламент с нуля.
Вообще, айтишных компетенций несколько: есть и это ваше ML, и кибербезопасность по двум направлениям, и системное администрирование, а с недавнего времени RPA. Но самая близкая к классическому энтерпрайзу компетенция — "Программные решения для бизнеса", включающая весь цикл создания энтерпрайз-продукта:
Бизнес- и системная аналитика по требованиям заказчика;
Проектирование архитектуры и дизайна;
Собственно, программирование;
Создание технической документации и руководства пользователя;
Создание и документирование средств развёртывания;
Тестирование готового продукта;
Презентация заказчику.
На всё вышеперечисленное у команды из трёх человек есть три дня по 8 часов. Но давайте по порядку.
Подготовка и старт
Подготовка начинается заранее, её сроки зависят от компетенции. Ходят слухи, что сварщики, например, начинают готовиться к следующему году чуть ли не сразу после завершения текущих соревнований. Что касается айтишников, то обычно за пару месяцев до поездки дивизионы запускают внутренний отбор: проводят мини-хакатон или что-то похожее, чтобы определить команды, которые примут участие в чемпионате. Комиссия по конкурсному заданию (членом которой являюсь и я) начинает создавать задание за 4-5 месяцев и постепенно делает это практически до самого дня икс.
На площадке, помимо участников, есть команда жюри, главный эксперт, его заместитель и технический эксперт. В отличие от рядового хакатона, здесь всё подчинено расписанию и регламенту. Задача не выдаётся заранее, только общее описание в духе "Вы будете делать что-то про обучение". Так что в первый день участники просто занимаются настройкой рабочих мест, ставят нужный себе софт, настраивают виртуалки. Да, работа и деплой идут на виртуалках по выбору из нескольких, а компьютер просто является окном доступа к ним через удалённый рабочий стол.
А есть интернет? Участники могут скачать готовые куски решения?
На WorldSkills есть понятие toolbox: тот инструмент, который участник может взять с собой. Для сварщика это маска, аппарат, спецодежда, болгарка. Для монтажника плоскогубцы, ножи, отвёртки. Для программиста IDE, опенсорсные библиотеки и заготовки. Например, можно написать дома и принести на конкурс готовый модуль авторизации, потому что в заданиях часто бывает ролевая модель.
Вопрос размера, проверки и влияния заготовок на результат очень сложный, и решается в компетенции по сей день. Де-факто пока что выгодно приносить с собой как можно больше готового всех мастей и видов, и это проблема, которую мы — жюри — пытаемся исправить.
Задание и первый день
На обычных хакатонах описывают задачу, которую нужно решить, но в остальном участники вольны делать, что хотят, могут подходить сколь угодно творчески. Это хорошо тем, что работа, обычно, интереснее. Но плохо тем, что я много раз видел, как хакатоны выигрывались одной презентацией без наличия работающего решения. Или, скажем, решение целиком на моках и эмулирует бизнес-процесс вместо его настоящей реализации. Кто-то может сказать, что это нормально, но на мой личный взгляд хакатоны должны оставаться соревнованиями разработчиков, а не маркетологов.
На AtomSkills техзадание подробное: описаны все сценарии, которые должны быть доступны пользователю. Это документ с десятком-другим страниц, похожий на те, что приносит вам заказчик в энтерпрайзе после первичного общения с аналитиками.
Получив задание, команды могут позадавать экспертам вопросы, после чего садятся за рабочие станции и начинают делать. По регламенту работать можно только на площадке и только в отведённое время. Для этого запускают большой таймер. Когда он по любой причине остановлен, работу нужно прекратить и, например, уйти на обед или сделать другой перерыв. Всего выделено три рабочих днях, и в каждый из них суммарное рабочее время 8 часов, разбитое на интервалы.
Пока в соседних цехах варят трубы и точат детали, наши участники создают схемы, пишут бэкенд, верстают интерфейсы и так далее.
Что мешает команде дорабатывать решение ночью в отеле?
Ещё один вопрос, который не имеет однозначного ответа. В позапрошлом году работу ночью запрещали и пытались даже как-то это проверять. В прошлом году, наоборот, разрешили, и увеличили объём задания с учётом этого. Пока что единственным рабочим способом является разбиение задания на модули и проверка каждого модуля в конце дня. Так делают на некоторых компетенциях, но не на всех. В нашей не делают.
Сдача работ
По окончании третьего дня каждая команда должна сдать:
Исходный код решения;
Руководство пользователя;
Инструкцию по сборке развёртыванию;
Техническую документацию;
Презентацию.
После этого все работы презентуются виртуальному заказчику. Есть описание того, что комиссия хочет увидеть в презентации: например, технический стек, на котором решение было сделано, возможные способы масштабирования, требуемые ресурсы для развёртывания.
За каждую презентацию выставляются баллы, которые идут в общий зачёт. Вообще в оценке несколько категорий критериев: функциональные требования, презентация, UI/UX, деплой и документация, качество кода. В сумме команда может получить 100 баллов, из них около половины приходится на функциональные требования и около 20 на презентацию.
Параллельно идёт деплой, и это, на мой личный взгляд, самое ценное отличие AtomSkills от обычных хакатонов. Технический эксперт берёт твою же инструкцию по деплою, пробует из твоих же исходников развернуть и запустить решение. Если решения нет — ноль баллов. Если решение не развернулось — ноль баллов. Забыл прописать в документации какой-нибудь ENV? Сам виноват, ноль баллов. Твой софт кривой, косой, и запускается только на машине разработчика? Ты не энтерпрайз-программист, ноль баллов. Здесь нельзя принести одну только презентацию, нельзя сделать красивую пустышку и так далее. То есть, ты за презентацию баллы получишь, конечно, но функциональные требования всё равно составляют основную долю от общей суммы баллов, и выше середины в списке результатов ты не поднимешься никак.
Хотя, был в прошлом году случай, когда команда, у которой решение запустилось, набрала меньше баллов, чем команда, у которой не запустилось. Последние набрали на очень хорошей презентации и документации. У первой запустилось, но сценарии не прошли.
Проверка
У комиссии есть сценарий, он одинаковый для всех и написан прямо по тексту техзадания. Сценарий выглядит примерно так:
Зайти в раздел с пользователями, если не получилось, не засчитать критерий 1.1
Попытаться создать пользователя, если не получилось, не засчитать критерий 1.2.
...
Если комиссия не понимает, как что-то сделать, она, представьте себе, идёт в руководство пользователя, которое подготовила команда. Самой команде нельзя ничего говорить и вообще каким-то образом влезать в проверку. Сделали непонятно и в инструкции не описали — ноль баллов. Хотя, в этом году мы разрешили участникам дать до двух устных пояснений к деплою и загрузке входных данных, иначе бы отлетела половина всех решений.
Команда не может влиять на проверку, но проверка всегда публична. Картинка с монитора членов жюри дублируется на внешний экран, который видят все: и та команда, которую проверяют сейчас, и остальные участники. Конкурс подчинён правилам и объективности, насколько это возможно. Критерии тоже формулируются не "Насколько удобно что-то сделано", а "Позволяет ли программа выполнить действие X".
Впрочем, оценка удобства, красоты, качества тоже есть. Но её доля в баллах сравнительно невелика относительно объективных пунктов. Вполне работающая стратегия: сделать тяп-ляп, зато формально успеть запрограммировать все бизнес-сценарии. С таким жюри тоже пытаются бороться, но без ухода во вкусовщину это довольно сложно. На практике могу сказать, что команды, которые умеют делать красиво и аккуратно — делают красиво и аккуратно даже ценой не полной готовности продукта. Человеку с чувством вкуса и тягой к старанию обычно трудно заставить себя "тяп-ляпить".
Финал
По результатам проверки всем командам начисляются баллы от 0 до 100, которые идут в общую таблицу. Есть десятые и сотые доли баллов, и иногда это определяет разницу между первым и вторым местом, либо, скажем, между попаданием и непопаданием на пьедестал. Всего в каждой компетенции, за редким исключением, три возможных медали: золото, серебро и бронза.
Участники не знают свой результат до самого момента вызова (или не вызова) на сцену. И разглашать им это запрещено. Создаётся эмоциональный накал: например, в 22-м году, когда я был участником, мы с командой взяли золото, но думали, что вообще не попали в тройку. Объявили бронзу — не мы. Объявили серебро — опять не мы. Уже сидели все поникшие, пока со сцены не объявили золото.
Закрытие это всегда очень масштабное действо с приглашёнными ведущими, хореографией, световым шоу и так далее. Победителям вручают медали, чествуют их, а позже все медалисты получают денежные премии (порядки: от десятков тысяч рублей на человека за бронзу до сотен тысяч за золото). Выигрывать очень престижно. Да и на беседах с начальством о повышении медаль AtomSkills это хороший козырь.
Фактически сражаются между собой дивизионы. Поэтому даже по тем компетенциям, в которых ты не участвовал, следишь за результатами и радуешься за своих. В этом году первый раз была отдельная студенческая лига и отдельно профессиональная. В "Программных решениях для бизнеса" студентам и профи давали одинаковое задание и одинаковое время. Надо сказать, что по сумме баллов некоторые студенты справились лучше, чем некоторые профи.
Конкретно мой Инжиниринговый дивизион в студенческой лиге взял серебро в "Программных решениях для бизнеса" и золото в "Программной роботизации" (RPA). В профессиональной лиге в этом году без медалей, хотя ребята из нашей формально строительной организации обошли многие команды из чисто айтишных блоков, что я считаю отличным результатом.
Подводя итог, хочу сказать, что очень люблю такую активность в компаниях. С моей личной точки зрения профессионализм всегда идёт бок о бок со спортивным интересом, и поэтому настоящему мастеру своего дела интересно испытывать себя, выходить за рамки привычного, показывать свой навык и сравнивать его с другими. Встречается мнение, что на хакатонах и подобных конкурсах люди делают игрушечные поделки, никак не связанные с реальной практикой. По своему опыту могу сказать, что именно через хакатоны я начал освоение приличной доли своего багажа знаний, и в реальности пригодилось очень многое. Не конкретная работа, которую делаешь на конкурс, а именно те связи в голове, которые у тебя при этом создаются.
Для компании польза тоже очевидна, иначе бы не тратились огромные суммы на организацию каждый год вот уже девять лет подряд. Про этот чемпионат можно рассказывать очень многое, поэтому я надеюсь, что статья вдохновит коллег из других компетенций приоткрыть и их внутреннюю кухню тоже. В конце-концов, даже со стороны наблюдать за всем этим безумно интересно.