Рост популярности компьютерных игр ведёт к тому, что они проникают в сферу образования не только для обучения людей, но и взрослых. В этой статье исследуются программы для обучения пользователей программированию. Методом изучения информации и анализа были выявлены наилучшие из рассмотренных варианты, подходящие для изучения формальных языков.
Ключевые слова: язык, программный код, игра, программный продукт, язык программирования, формальный язык
Существует множество языков программирования и для решения конкретной задачи применяется тот язык, который подходит наилучшим образом. Следует отметить, что разные языки программирования могут обладать разным синтаксисом и при переходе с одного языка на другой, могут возникнуть некоторые сложности. Изучив формальный язык, обучающийся сможет значительно легче перейти с одного языка на другой.
Формальный язык — это математическая модель реального языка, записанная в виде множеств терминальных и нетерминальных символов, а также стартового символа и правил. [1]
Компьютерные игры прочно вошли в жизнь людей и являются одним из способов провождения свободного времени. Их популярность обусловлена тем, что игры позволяют «отвлечься от реальности», снять стресс и напряжение. Компьютерные игры могут применяться и для обучения, по аналогии с играми, при помощи которых обучают детей. На рынке игр сейчас представлено несколько продуктов, позволяющих писать программный код, некоторые из которых рассматриваются в данной статье.
- TIS-100. Цель данной игры состоит в том, чтобы починить компьютер модели TIS-100, который не может выполнить даже простейший тест диагностики. Пользователю необходимо написать программный код в специально отведённых сегментах памяти (некоторые сегменты не доступны для записи), на языке, представляющем собой некий аналог ассемблера. Важно отметить, что язык программирования в этой игре минималистичен (из-за чего порой неудобен) и многопоточен (код в блоках, отображающийся на экране, выполняется одновременно). После успешного решения любого задания показываются его характеристики и статистика друзей, которые уже играли в эту игру. [2] Это позволяет оценить качество решения и посоревноваться с друзьями в поисках наилучшего решения по следующим характеристикам: количество затрагиваемых сегментов, количество циклов прохождения и количество инструкций(строк) программного кода. Данный продукт позволяет весело провести время, но не подходит для изучения формальных языков, поскольку заточена больше под ассемблер, а команды языка сильно ограничены, что не отображая набор конструкций формального языка.
- while True: learn(). Цель в данной игры состоит в написании переводчика с кошачьего, т. к. в один прекрасный день главный герой игры обнаруживает, что кот справляется с написанием кода лучше его. Но есть одна маленькая проблема — кот не умеет разговаривать. Пользователю необходимо решать головоломки, и изучать принципы машинного обучения. [3] В основе игры лежат реальные принципы, применяемые в машинном обучения, в частности, нейросетей, а задания основываются на реальных проблемах, решаемые при помощи машинного обучения. Программный продукт позволяет почувствовать себя в роли специалиста по большим данным, но совершенно не подходит для изучения формальных языков.
- CodeCombat. Представляет собой многопользовательскую браузерную игру, цель которой писать программный код для захватывания земель и победы над врагами. Команды программного кода — это «заклиния» или «действие» игрока. Команды пишутся на одном из следующих языков: как JavaScript, Lua, Pythoon, есть возможность язык программирования в ходе игры. [4] Важно отметить, что в бесплатной версии доступен только основной путь игрока, а за все ответвления придётся платить дополнительно. Игровой процесс посмотрен от простого к сложному, позволяя играть в неё пользователю, который до этого никогда не занимался программированием. Данный продукт может использоваться для изучения формальных языков, т. к. несмотря на то, что выбирается конкретный язык программирования, пользователь может сменить его и посмотреть, как можно пройти уровень на другом языке.
- Human Resource Machine. Цель данной игры — программировать действия офисного работникам по заданиям, которые даёт босс. Сам офис представляет собой компьютер, где во время решения заданий необходимо взять числа(а иногда и буквы) с входа, а решения заданий отправить на выход. Пол офиса имитирует собой оперативную память, где можно сохранять входные данные и результаты, полученные в ходе вычислений. Пользователь начинает всего с 2 команд,но в процессе прохождения игры ему становится доступно всего 11 команд, однако, по утверждению создателей, их достаточно для моделирования практически любого алгоритма в мире. [5] Язык написания программы в данном случае так же представляет собой упрощенную версию ассемблера, а задания с каждым уровнем становятся сложнее. Данный программный продукт может частично использоваться для изучения формальных языков, т. к. даёт некоторое представление о конструкциях формальных языков. Однако, прототипом языка программирования здесь является ассемблер, что не позволяет получить полного представления о формальных конструкциях языков высокого уровня.
- 7 Billion Humans. Игра, от создателей Human Resource Machine. В отличии от предыдущего продукта, целью данной игры является программирование действий толп работников. Модель офиса остаётся прежней, однако в основе программирования уже лежит другой язык, не ассемблер. В игре появились подсказки и пропуск уровней, что может быть полезно при прохождении. Данный программный продукт больше подходит для изучения формальных языков, чем предыдущий, поскольку в псевдоязыке появились конструкции, больше похожие на те, что используются в формальных языках.
- Code Hunt. Это приложение, предназначение для обучения Java и C#, где пользователю самому нужно понять, что необходимо исправить в коде программы, чтобы уровень считался пройдённым. Игрок видит на входе несколько тестов, одни пройдены успешно, другие — нет. Написав программный код, пользователю необходимо сделать так, чтобы все тесты проходили. [6] Данный программный продукт, не совсем подходит для изучения формальных языков, т. к. не предоставляет чёткой информации о формальных конструкциях.
- Robocode. Цель данной игры заключается в создании боевых роботов -танков, написанных на Java или.NET. Основной движущий элемент в обучении это конкуренция. Цель игрока после создания робота — уничтожить абсолютно все другие танки на игровом поле. Танки обладают большим набором возможностей: движение по игровому полю, стрельба, они могут врезаться в стены или роботов, узнавать местоположение друг друга. Игра является кроссплатформенной и играть в неё можно на любых операционных системах. В игру встроенная собственная среда для разработки — Robot Editor. Данные продукт так же не подходит для изучения формальных языков, поскольку заточен под конкретные языки и не предоставляет чёткой информации о формальных конструкциях.
Таким образом, проанализировав всю собранную информацию, можно сделать вывод, что компьютерные игры могут применяться при изучении формальных языков. В ходе исследования были найдены программные продукты, наилучшим образом подходящие для выполнения данной цели, такими продуктами являются CodeCombat и 7 Billion Humans. При выборе игры для понимания конструкций формальных языков самостоятельно следует помнить, что большинство игр заточены под конкретный язык и не позволяют увидеть общие конструкции, лежащие в основе всех языков программирования.
Литература:
- Formal language // Wikipedia. URL: https://en.wikipedia.org/wiki/Formal_language
- TIS-100 — паззл про многопоточный ассемблер, который никто не ждал // Хабр. URL: https://habr.com/ru/post/263445
- Создатель игры while True: learn() о программировании в геймдеве, проблемах с VR и симуляции ML // Хабр. URL: https://habr.com/ru/post/417107
- О нас // CodeCombat. URL: https://codecombat.com/about
- Human Resource Machine // Tomorrowcorporation. URL: https://tomorrowcorporation.com/humanresourcemachine
- Обучайтесь С# и Java вместе с Code Hunt // my-gamezone. URL: https://my-gamezone.ru/igry-dlja-programmistov/code-hunt-igrat-onlajn