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


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

( Collapse )

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

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) паровой машины (будь то паровоз, пароход или что-то другое подобное). Выглядит вот так:


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


Вадим и 2 пользователям это нравится

Чтобы упомянуть другого пользователя в комментарии, введите знак @

Упомянуть можно тех, на кого Вы подписаны или тех, кто принимал участие в дискуссии


Чтобы упомянуть ценную бумагу в комментарии, введите ее тикер после знака ^

Последние комментарии в блогах

Silver Surfer

Уже 10 лет наши управляющие успешно ведут портфель трендовой стратении SilverSurfer по российскому рынку акций.

Правила поведения в блогах и ограничение ответственности

Цель социальной сети TRADERNET – общение и дискуссии на тему финансовых рынков и экономики в широком ее спектре. Участие в общении может принимать любой желающий, придерживающийся настоящих правил.

ПРАВИЛА ИСПОЛЬЗОВАНИЯ САЙТА TRADERNET

1. Регистрация

1.1 Факт вашей регистрации означает, что вы согласны соблюдать настоящие правила.

1.2 Ник (имя профиля) выбирается индивидуально самим пользователем, старайтесь избегать ников, совпадающих с уже ранее существующими.

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

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

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

2. Общение в блогах

2.1 Каждый пользователь имеет право вести свой блог.

2.2 Каждый пользователь имеет право оставлять комментарии к любому посту в сообществе.

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

2.4 Использование тегов, при публикации поста, приветствуется. Это позволит увеличить число ваших подписчиков и читаемость блога.

3. Запрещается на ресурсе

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

3.2 Запрещено публично вести споры и перебранки, а также цитировать личную переписку с администрацией сайта и модераторами. Для разрешения спорных вопросов достаточно написать Личное сообщение модератору!

3.3 Обилие грамматических ошибок является основанием для удаления вашего поста из общей ленты.

3.4 Нарушение правил карается БАНом на 7 дней. Последующие нарушения могут вынудить администрацию продлить этот срок до бесконечности.

4. Администрация ресурса

4.1 Администрация предлагает строить отношения между самими пользователями и, пользователями и администрацией на дружественной и уважительной основе. Здоровое чувство юмора приветствуется.

4.2 Администрация готова рассмотреть любые предложения по улучшению работы ресурса. Свои идеи публикуйте в общей ленте с тегом «Инновация».

4.3 Администрация сайта оставляет за собой исключительное право в некоторых ситуациях, действовать во благо ресурса, не руководствуясь установленными Правилами.

5. Отношения в сфере распространения информации:

5.1 Администрация сайта:

5.1.1 не осуществляет обязательную проверку размещаемых пользователями на Сайте материалов.

5.1.2 не несет ответственности за содержание материалов, за негативные последствия их использования.

5.1.3 вправе удалять любые публикации пользователей, не соответствующие политике Администрации Сайта.

5.2 Размещая материалы на настоящем сайте, пользователь сайта:

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

5.2.2 несет полную ответственность за соответствие применимому законодательству размещаемых материалов.

5.2.3 обязуется возместить любой ущерб, возникший у TRADERNET, вследствие нарушений Пользователем законодательства или прав третьих лиц.

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

5.2.5 по требованию Администрации сайта обязуется предоставить копии своих удостоверяющих личность документов.