Олег Макаренко (olegmakarenko.ru) wrote,
Олег Макаренко
olegmakarenko.ru

Categories:

Почему игровое обучение программированию не работает



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

Типичный рецепт создания сайта для «игрового» обучения таков.

1. Создаём примитивную недоигру: что-нибудь про орков или про космос. Качеством исполнения не заморачиваемся, делаем такую халтуру, за которую было бы стыдно даже создателям волны игрового хлама из семидесятых годов.

2. Говорим ученику: ты управляешь вот этим рыцарем или вот этим космическим кораблём. Твоя задача — создать код, чтобы найти ближайшего врага и ударить его мечом/лазером.

3. Показываем ученику кусок непонятного кода, в середину которого ученик должен засунуть свою часть.

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

5. За успешное выполнение заданий назначаем игроку очки и позволяем ему покупать игровые предметы — опять-таки, даже на 5 минут не задумываясь ни о балансе, ни о дизайне, ни о разнообразии веток прокачки, то есть принципиально не пытаясь сделать нашу игру играбельной.

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

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

«Значочки пробельчика и табуляшечки, начинающие условненькую строчечку, используются для вычисления уровенька отступчика строчечки, который, в свою очередь, определяет группировочку операторчиков».

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

То же самое верно и для геймификации. Когда мы делаем геймифицированные курсы по обучению программированию, нам следует соблюдать следующие важные правила:

1. Курсы должны начинаться с самого нуля, может, даже и ещё ниже, чем ноль.

2. Кривая обучения должна быть пологой, как пандус в доме ветеранов пилонного танца.

3. Ученик должен иметь достаточный уровень свободы, мир обучения должен быть открытым.

4. Прокачка персонажа должна быть не только понятной, но и управляемой.

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

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

В каждом языке программирования есть официальная нулевая точка, так называемый хелловорлд. Это команда, которая выдаёт на монитор сообщение «Hello World», «Привет, мир». В языке 1С, к примеру, хелловорлд выглядит так:

Сообщить("Hello Wold");

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

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

# game loop
while 1:
    enemy_1 = input() # name of enemy 1
    dist_1 = int(input()) # distance to enemy 1
    enemy_2 = input() # name of enemy 2
    dist_2 = int(input()) # distance to enemy 2

    # Write an action using print

    # Enter the code here


Как видите, тут у нас сразу и бесконечный цикл, и логический тип данных, и приведения строк к числам, и оператор присваивания, и комментарии… И как думаете, что предлагают сделать новичку? Ему предлагают взять непонятный кусок кода из второго окна и скопировать туда, куда укажет система.

Замечательный старт! Мало что убивает желание учиться сильнее, чем осознание своей неспособности разобраться даже в самом первом упражнении.

В программировании есть понятие «бойлерплейт-код». Буквально это слово можно перевести как «кухонная утварь»: им обозначают стандартные ритуальные куски кода, которые нужно писать, чтобы программа запустилась. Так, например, когда вас останавливает гаишник, он прикладывает руку к голове и произносит что-то типа «Инспектор Иванов, ваши документы, пожалуйста». Это типичный бойлерплейт-код.

Бойлерплейт-код — главная проблема для новичков, которые пытаются учить язык онлайн, без учителя. «Так, мне дали задание проверить документы у водителя. Это я понимаю. Почему же он на меня не реагирует? Может, надо требовать громче? Постучать жезлом по крыше? Подпрыгнуть? Нет, ничего не помогает… Ах, надо было сказать в самом начале "Инспектор Иванов"! Почему меня заставили потратить полчаса жизни на попытки выяснить эту чушь?».

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

Юмор тут в том, что настоящие, опытные программисты имеют в своём распоряжении массу способов узнать, что же конкретно пошло не так. Система сообщает им и тип ошибки, и конкретную строчку, где произошёл сбой, и ещё массу сопутствующих улик. Студент находится в несравненно худшем положении. «Что-то пошло не так», — и сиди, гадай, где же именно ты ошибся, и как тебе свою ошибку исправить.

Не лучше обстоят дела и с ростом уровня. Когда мы прокачиваем, допустим, свои конечности в реальном мире, мы можем каждую неделю наблюдать новые рекорды. Было три отжимания, стало четыре. Поднимал штангу в 20 килограмм, теперь справился уже с 25 килограммами. Мы можем выбирать, какие упражнения делать и в каком порядке.

В общеобразовательных школах система прокачки кастрирована до формата прямой рельсы. Есть одиннадцать уровней, и раз в год всему стаду школьников присваивают следующий уровень: одновременно по всей стране. Школьник не может составлять себе программу обучения, как меню в ресторане — он должен есть, что ему дают, блюдо за блюдом, при этом ровно в том порядке, который утвердило Министерство образования.

Казалось бы, на курсах есть все возможности сделать красивое дерево прокачки — как в «Цивилизации» или даже как в «Ив Онлайн». Но нет, нам раз за разом снова предлагают проверенные рецепты из поваренной книги для зануд: «пройдите 20 упражнений, чтобы получить следующий уровень. Пройдите 50 уровней, чтобы закончить курс».

Пожалуй, если бы я делал обучающие курсы, я бы тратил ресурсы примерно в таком порядке.

1. Нанял бы по-настоящему талантливого автора, чтобы он преобразовал страницы справочника в чёткие и простые объяснения всех основных понятий языка.

2. Создал бы систему проверки ошибок, чтобы та вместо стандартного «вы ошиблись» выдавала ученику нормальные объяснения: «вы забыли поставить кавычки вокруг цифры три», «у вас получился бесконечный цикл, так как вы прибавляете единицу к "i" вместо того, чтобы отнимать». Эту систему ошибок я бы обновлял еженедельно — на основе новых ошибок учеников, которые я бы собирал специальным роботом.

3. Разработал бы хорошее, ветвистое и сбалансированное «дерево умений», причём не поленился бы найти ещё и опытного дизайнера, чтобы тот представил это дерево в наглядном, понятном с первого взгляда виде.

4. Создал бы продуманную систему ачивок, чтобы дать ученикам выбор между «расслабленно плыть по течению» и «ставить рекорды». После первых месяцев работы изучил бы статистику и переработал ачивки в соответствии с реальными достижениями игроков.

5. Если бы у меня остались деньги, я бы нанял профессионального писателя, чтобы тот разработал полноценную игровую вселенную: с историей, персонажами и так далее.

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

Вместе с тем, увы, пока что я не видел ни одной «игровой» системы обучения программированию, в которой были бы реализованы хотя бы абсолютно необходимые пункты один и два, — пункты, до выполнения которых даже и слово «геймификация» произносить не имеет смысла.

Впрочем, есть в этой печальной ситуации и один плюс. Наши отечественные разработчики, — сайт «Учи.ру», например, — прогрессируют невероятно быстро. Таким образом, есть шанс, что первые полноценные геймифицированные курсы по программированию создадут именно в России.

Обновление. Важная поправка от читателя.

"На самом деле, bilerplate -- это никакая не кухонная утварь, а табличка (plate) на паровом котле (boiler) паровой машины (будь то паровоз, пароход или что-то другое подобное). Выглядит вот так:



Таблички эти ставились в обязательном порядке."

Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 107 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →