Технологии Кружкового движения | Журнал Кружковое движение

Игры Национальной киберфизической платформы «Берлога». Часть 2

Артём Сергеев – выпускник мехмата МГУ, ведущий инженер IT-компании КРОК и технический директор игровой платформы «Берлога». Он адаптировал для мобильных игр технологию машин состояний, благодаря чему школьники и другие игроки могут учиться программированию, которое используется в серьёзных научных и промышленных разработках.

В первой части интервью с Артёмом Сергеевым было рассказано про игровой мир платформы «Берлога», а в этой – о программировании в играх «Академия» и «Защита пасеки» и их преимуществах для обучения.
Артём Сергеев
Наталия Саюкина: Какой язык программирования используется в играх «Берлоги»?

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

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

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

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

Эта технология использует особый графический язык, применяя который ты излагаешь разные состояния твоего устройства «квадратиками» и другими фигурками, а стрелочками рисуешь переходы между этими состояниями в ответ на какие-то события. Получается довольно наглядно. При этом это не банальные блок-схемы, а гораздо более мощная концепция.
Рассказ о программировании в «Защите пасеки» на Конвенте Кружкового движения 2023
Но интересно, что такой наглядный и мощный язык почему-то детям не дают. Это удел хардкорных разработчиков промышленных систем. Мой любимый пример его использования – это марсоход «Персеверанс» (с англ. «Настойчивость»), запущенный в 2020 году. Большая часть его управляющих программ, в том числе для передвижения, реализована через механику машин состояний. Когда я об этом узнал, я очень воодушевился. Представляете, мы развиваем метод, который используют в том числе инженеры NASA. Это высокий показатель востребованности языка в серьёзных вещах.

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

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

Другая проблема, которую решает технология машин состояний – размещение архитектуры. Во многих устройствах небольшие процессоры, меньше и слабее, чем в телефонах. Как графическое богатство архитектуры запихать в такие маленькие процессоры? А вот метод машин состояний крайне пригоден для создания высокоархитектурных решений (т.е. спроектированных на уровне, как говорят программисты, высокой абстракции) на маленьких маломощных процессорах.

Таким образом можно создать и устройство, способное принимать решения – это, напоминаю, и есть искусственный интеллект, в него входят не только популярные сейчас нейросети.

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

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

А.С.: Технология машин состояний — это высокоуровневая парадигма мышления и проектирования, в которой мы рассуждаем об устройстве состояний и возможных реакциях. Язык при этом может быть любой. Например, мы использовали язык Python для симуляторов «Орбита», а встроенная микроэлектроника часто написана на С и С++. Технология машин состояний в высшей степени востребована и в построении интерфейсов, например, для сайтов и веб-приложений на JavaScript.

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

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

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

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

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

Мы же открываем все карты. На каждом этапе игрок может заглянуть «под капот» и увидеть, какой там внутри, за картинками, код. Именно этот код игрок потом будет использовать на настоящих роботах. Потому что «под капотом» нашей игры происходят достаточно простые и лёгкие вещи, без непонятной чёрной магии.

То, что на любом этапе игры должно быть возможно проникнуть в процесс и вмешаться в него, изменив код, – наша принципиальная позиция, мы к этому стремимся. Также как и то, что ни в какой момент у игрока нет волшебной палочки или кнопки, которую можно нажать, чтобы всё нужное само в робота записалось. Мы считаем, что это многое даёт и для понимания устройств, и для качества программирования обучающегося. То есть наш метод полезен и с точки зрения педагогики, и с точки зрения опыта работы с техникой.
ТЕХНОЛОГИИ КРУЖКОВОГО ДВИЖЕНИЯ