Как создавался тренажер для акции «Час кода 2017»
В 2017 году Кодвардс стал официальным партнером «Часа кода» и вместе с «Лабораторией Касперского», Майкрософт и ZeptoLab участвовал в разработке тренажера, который за время акции должны были увидеть почти 10 млн. школьников со всей страны.
Сказать, что при разработке тренажера 2017 года мы не изучали опыт предыдущих лет, значит соврать. Разумеется, изучали, и не только ЧасКода.рф, но и зарубежных акций. С одной стороны, чужой опыт сильно помогал. Какие-то механики и подходы можно было подсмотреть и позаимствовать, в отношении других — убедиться, что мы всё делаем верно. С другой стороны, он же сильно мешал — повторяться не хотелось, нужно было сделать что-то новое, на качественно более высоком уровне. Да ещё и за весьма ограниченное время — разработка стартовала в конце сентября, а 4го декабря акция уже должна официально стартовать. Итого на всё про всё чуть больше двух месяцев!
Очень амбициозно, правда? Так и есть. Создать тренажер, на котором будут заниматься до 10 млн. детей со всех уголков России, это вам не блокчейн к е-мейл рассылке прикрутить. Самое пристальное внимание нужно уделить каждому аспекту: геймплею, методике, интерфейсу, нагрузке и безопасности.
Геймплей
Одной из целей акции «Час кода» была и остается популяризация программирования и отрасли информационных технологий в целом. Важно не просто дать детям «покодить», но и показать, что разобраться в основах не только возможно, но и полезно, и что порог входа в эту область не такой уж высокий, при желании справятся и мальчики и девочки практически любого возраста. Сделать это можно только через что-то интересное.
Тренажер должен быть увлекательным и точка. Разворачивать фреймворк, подключать библиотеки, писать форматированный код (подглядывая в StackOverflow), компилировать программу и тестировать в эмуляторе — это пусть взрослые ребята так развлекаются. Они за это деньги получают. Дети от этого сбегут в ужасе.
Поэтому вполне логично, что в качестве формата была выбрана игра, в которой дети смогут и научиться базовым концепциям программирования, и увидеть результаты своих действий в яркой и увлекательной форме.
«Оболочкой» для игрового мира в этом году была выбрана игра C.A.T.S. от традиционного партнера российской акции — компании ZeptoLab, создателей ненасытного сладкоежки Ам Няма. В оригинальной игре для мобильных устройств главными героями являются коты, которые управляют боевыми роботами, собирают детали и улучшают оборудование, чтобы сражаться с другими игроками на аренах.

Первоисточник задавал основу сеттинга, но некоторые элементы не вписывались в формат. Например, от концепции состязания между игроками. Во-первых, в «Часе кода» не может быть победителей и проигравших. Во-вторых, просто по техническим причинам разрабатывать «мультиплеер» во много раз сложнее, чем одиночную игру. Поэтому возникла идея Олимпиады роботов, в которой каждый ребенок выступает сам за себя и может гордиться любым достижением, независимо от того, сколько и каких заданий он смог выполнить. Принцип Кубертена жив и поныне!
Сюжетно сначала была идея сделать псевдо-приквел к C.A.T.S., и отправить героев на остров, где есть три основные зоны с разными погодными условиями, декорациями, препятствиями и задачами. Однако быстро стало понятно, что глубоко прорабатывать мир просто бессмысленно — погрузиться в него у детей толком не выйдет, а для нас это был определенные трудозатраты.
Зато сокращение бэкграунда позволило сосредоточится на героях. Главной героиней «Часа кода 2017» стала кошечка-механик Элси, которая решила победить в Олимпиаде роботов за счет того, что ее робот-конструктор будет управляться живым пилотом, который поможет быстрее обучить искусственный интеллект. Помочь ей в этом вызвались двое котят, роль одного из которых предстоит взять на себя ребенку, чтобы научиться управлять роботом с помощью программ. Для этого героям нужно из собранных деталей собрать оборудование, установить его на заводе и протестировать на полигоне.
Простой, но понтяный сюжет вкупе с яркой, сочной, детализированной картинкой, на которую просто приятно любоваться — это первые кирпичики к вниманию ребенка.
Методика
Как ни странно, но вопрос, чему учить в тренажере (а если выражаться точнее, то с какими понятиями программирования знакомить), практически не стоял. У «Кодвардса» есть опыт обучения детей младшего школьного возраста программированию и сформированная методология преподавания с устоявшимся порядком изучаемых тем. Поэтому выбор очень быстро сузился до самого важного: движение и ориентация в пространстве, циклы, последовательные и вложенные циклы, if/else (условия).
Само название акции, «Час кода», подразумевает, что у детей будет примерно час на то, чтобы что-то изучить и начать применять на практике. При этом какое-то время займет вводная часть с просмотром видеороликов и объяснениями учителя, и получается, что на общение с тренажером остается хорошо если полчаса. На помощь опять пришли игры с их короткими игровыми сессиями. Заявленные темы разложили на 14 уровней примерно по 2 минуты на прохождение. Каждому понятию при этом отводилось примерно по 3 уровня, зато обучающая программа приобрела стройность и логичность.
Другой повод крепко призадуматься — это возрастное разделение школьников на младшую, среднюю и старшую школу. Разумно, что то, что интересно ребенку семи лет, покажется слишком банальным для 16-летнего, и наоборот. От идеи делать 3 разных тренажера для разных возрастных групп, каждый со своими заданиями, отказались сразу. Нужно было как-то так сгруппировать имеющиеся задания, чтобы соблюсти необходимый баланс между сложностью и доступностью.

Малыши получили самые простые задачки с командами на движение и циклы. 5-7 классы получили всё то же, плюс вложенные циклы. А 8-11 увидели самый сложный «спектр» задач, где больше времени уделяется циклам и конструкциям с условиями. При этом было бы нечестно отобрать у детей какую-то из локаций, поэтому в итоге все увидели всё, но в разном объеме и разной сложности. Кроме того, единое игровое пространство для всех возрастов оставляет возможность ребенку, которого увлекли задачки, вернуться и пройти более сложный уровень.
А еще мы гордимся тем, что в тренажере этого года уровни нелинейны, и достичь нужного результата можно несколькими путями. Всё как в жизни!
Интерфейс
Еще одна непростая задача при разработке, это сделать прохождение понятным и удобным. Сегодняшние дети больше привыкли к тач-интерфейсам, и не всегда умеют пользоваться клавиатурой и мышкой, а в школьных классах их ждали именно такие испытания.
Первым номером в списке работ было создание интерфейса, в котором было бы максимально понятно не только что нажимать, но и когда и как.
Команды в редакторе кода набираются построчно по формуле «объект (кто/что должен делать?) — метод (что именно делать?) — аргумент (как делать?)» и в интерфейсе для каждого из слагаемых формулы предусмотрена соответствующая кнопка, связанная с другими составляющими формулы. То есть можно написать неправильную команду неправильно (с помощью этой команды полученный результат не будет правильным), но нельзя написать команду неправильно, например, указав 2 объекта или применить сразу 2 метода. С точки зрения настоящего программирования это очень важно: если сразу заложить в ребенка правильную модель поведения, то позже банальных ошибок у него возникать не будет.

На уровне движения, поворотов, выполнения простых действий эта схема работает отлично. Но стоит коснуться темы циклов или условий, и вся простота испаряется.
Loop (цикл) подразумевает, во-первых, наличие обязательной команды завершения цикла (end), а во-вторых, работу с объектом внутри вложенной конструкции — в теле цикла. Написание программы с циклом превращается в сложную последовательность физических и умственных действий:
- Подумать, что нужно положить в цикл;
- Установить команду цикла и аргумент для нее;
- Перейти в тело цикла с помощью мышки или клавиатуры;
- Написать набор команд для объекта;
- Закрыть тело цикла обязательным оператором end.
Непросто даже для взрослого человека, что уж говорить про ребенка! Автоматизация — наше всё, сказали мы, и часть физической работы переложили на интерфейс. Так end стал появляться автоматически, одновременно с loop, а переход в тело цикла осуществляется сразу после указания аргумента для loop. Главное, не стереть нужное (кстати, отдельная кнопка для стирания всей строки в редакторе тоже есть).
Вторым по важности элементом шли подсказки, которые должны помочь освоиться с интерфейсом в тренажере. Предполагалось, что всё ограничится гидом по кнопкам и их назначению, а также короткими вводными объяснениями по проходимым темам, но первые внутренние тестирования показали, что часто даже зная суть задания, мало кто может выполнить его сходу без подсматриваний в концепт-документ. Проблемы делились на 3 основные категории: интерфейсные, геймплейные, предметные.
С интерфейсными боролись просто: смотрели, чего не хватает, что непонятно и что можно сделать удобнее, и искали лучшее решение. В какой-то момент даже осознали, что кнопки запуска и пошагового исполнения программы лучше перенести из-под редактора на экран с игровым полем. Так получилось даже логичнее: справа ничто не отвлекает тебя от написания кода, а когда готов проверить результат, переходишь в игру, запускаешь и наблюдаешь за действиями героя.
С геймплейными было сложнее. Некоторые уровни пришлось даже перепридумывать заново, чтобы упростить задание. При этом руководствовались принципом «меньше текста». Читать длинное описание задачи никто не любит, поэтому уровень должен быть максимально очевидным уже на уровне карты и расположения игровых объектов на ней.
Очень много идей, как улучшить тот или иной элемент геймплея, возникали прямо в процессе тестирования. Прохождение уровня по многу раз прерывалось на то, чтобы записать идею в письмо, которое потом отправится на команду разработки.

Предметные проблемы стали главным камнем преткновения. Когда даже геймдизайн не помогает понять задачу, пора прибегнуть к тяжелой артиллерии — помощи Элси. У неё всегда заготовлена пара-тройка советов, как пройти тот или иной уровень, и к ней всегда можно обратиться, кликнув на её аватарку.
Но так было не всегда. Сперва Элси выдавала простые ободряющие реплики перед стартом уровня и объясняла задачу. И этого было явно недостаточно. Если по ходу уровня что-то было непонятным, искать помощи было просто негде. Поэтому Элси получила расширенные полномочия, новое место в интерфейсе над редактором кода и библиотеку подсказок по каждому уровню.
Нагрузка и безопасность
В 2016 году в акции приняли участие около 9 млн. детей. В этом году ожидается не меньше. Это внушительные цифры по меркам любых ИТ-систем. К такой высокой нагрузке нужно соответствующим образом подготовиться.
Архитектура тренажера и основного сайта акции часкода.рф рассчитана таким образом, чтобы выдерживать большое количество одновременных обращений к системе (так в нашу жизни вошла и плотно закрепилась аббревиатура RPS — request per second).
Предусмотрели и балансировку нагрузки. Вместе с партнерами из Майкрософт и «Лаборатории Касперского» была запущена система, в которой вся входящая нагрузка распределяется между серверами равномерно, чтобы обеспечить нормальную работу тренажера. Есть и возможность подключения дополнительных серверных мощностей, если основных не будет хватать.
Также предусмотрена защита от DDoS-атак. Чтобы злоумышленники не сорвали проведение акции, защита отключает подозрительные источники и не позволяет им мешать нормальной работе тренажера.
Конечно, не все шероховатости устранены и не все проблемы выловлены. На случай, если понадобится внести изменения в тренажер, предусмотрено технологическое окно, когда обновление не должно помешать прохождению. Но можем выразить общее мнение всех организаторов акции, что мы делали и делаем все возможное, чтобы «Час кода 2017» прошел гладко и запомнился школьникам как минимум до следующего года.
Обязательно поучаствуйте в акции на сайте часкода.рф и поделитесь своим мнением с нами.
К комментариям