Использование геймификации при обучении школьников основам программирования
Борисов Николай Анатольевич доцент, к.т.н., доцент кафедры Программной инженерии, Нижегородский государственный университет им. Н.И. Лобачевского, Пр. Гагарина, 23, г. Нижний Новгород, 603950, +7 (831) 462-33-20 nborisov.itmm@vandex.ru
Харюнин Александр Сергеевич аспирант института Информационных технологий, математики и механики, Нижегородский государственный университет им. Н.И. Лобачевского, Пр. Гагарина, 23, г. Нижний Новгород, 603950, +7 (831) 462-33-20 sharvunin@mail.ru
Аннотация
Обучение программированию в высших учебных заведениях часто затруднено вследствие недостаточной подготовки выпускников средней школы в области информатики. Необходимо использовать новые способы повышения интереса школьников к информатике и программированию, в том числе с использованием игровой мотивации. Рассматриваются популярные онлайн-ресурсы для изучения алгоритмизации и программирования и опыт работы со школьниками в одной из самых распространенных сред для быстрой разработки игровых программ - системе Scratch. Learning programming in higher education is often difficult due to the insufficient preparation of high school graduates in the field of Informatics. We must use new ways to increase the interest of students to computer science and programming, including use of gambling motivation. Some popular online resources for learning algorithms and programming are considered and experience with students in one of the most common environments for rapid development of game programs system Scratch is discussed.
Ключевые слова
программирование, языки, обучение, школьники, онлайн-ресурсы programming, languages, learning, schoolchildren, online resources
Введение
В соответствии с современными направлениями разработки и реализации учебных программ по направлению «Информационно-коммуникативные технологии» одним из основных разделов современного курса информатики являются разделы, связанные с формированием у обучаемых алгоритмического мышления, программированием на универсальных языках высокого уровня и овладением современными инструментальными средствами [1, 2].
При этом необходимо помнить, что программирование обычно начинает изучаться уже на младших курсах, то есть преподаватель сталкивается непосредственно со вчерашними школьниками. В этих условиях крайне важно, чтобы выпускники средней школы уже владели какими-то основами программирования на любом языке (в школах до сих пор преимущественно используются Pascal и Basic). Однако в различных школах программы изучения курса «Информатика и ИКТ»
существенно различаются. Опыт ведения занятий по программированию на первом курсе показывает, что в любой академической группе можно найти несколько человек, которые в школе вообще не программировали.
В настоящее время на первом курсе Нижегородского государственного университета для обучения программированию студентов направления «Фундаментальная информатика и информационные технологии» используется язык С, а в дальнейшем обучении - языки С++, C# и Java [3]. При изучении этих языков отсутствие школьной практики программирования приводит ко многим проблемам. Поэтому необходимо создание дополнительных возможностей приобщения учащихся старших и даже младших классов школы к изучению программирования в интересной и увлекательной для них форме.
Одной их таких форм являются занятия со школьниками робототехникой [4], где наряду с графическими языками программирования одним из самых востребованных является язык RobotC, фактически представляющий собой диалект языка С для управления роботами. Другой способ - использование современных онлайн-ресурсов, которые в игровой форме (что особенно важно для младших школьников) позволяют освоить азы алгоритмизации и программирования, а в некоторых случаях - получить практику программирования на реальных языках высокого уровня.
Онлайн-ресурсы для обучения школьников программированию
В настоящее время существует множество онлайн-ресурсов и еще большее количество игр для персональных компьютеров и мобильных устройств, в которые встроены элементы обучения программированию или это обучение является основной целью. Они сильно различаются как по возрастной ориентации, так и по применяемым языкам и технологиям программирования. Множество ресурсов и игр являются англоязычными, но достаточно большое количество уже русифицированы и могут использоваться как на уроках информатики, так и во внеклассной работе с учащимися.
В ресурсах, предлагаемым учащимся младших классов, основной используемой технологией является блочное программирование, где программа «собирается» из блоков - команд, соответствующих основным инструкциям встроенного языка программирования. Как правило, реально существующие языки на этом уровне не используются. Рассмотрим несколько онлайн-ресурсов этого уровня.
Заслуженной популярностью пользуется Code.org (рис. 1), предлагающий учащимся младших классов множество заданий и головоломок, решаемых средствами программирования [5]. Используемые в нем блоки похожи на блоки Scratch (о нем речь ниже), задания регулируются по уровням сложности, прогресс обучаемого постоянно отслеживается. Типичным примером является задание на перемещение героя к заданной цели. При этом школьникам приходится использовать как последовательные алгоритмы, так и ветвления с циклами. Интерфейс программы прост и доступен, не случайно он послужил основой для создания ресурса «Час кода» (рис. 2), на котором ежегодно устраиваются Всероссийские акции по формированию и поддержке интереса молодежи к изучению информатики в образовательных учреждениях РФ [6]:
Рис. 1. Пример задания в Code.org
</>
j © Ь«р://часкода.рф
час.кода
4-10 ДЕКАБРЯ
90% © Ф | Оч ПоиСК_|
ШКОЛЬНИКАМ ПРЕПОДАВАТЕЛЯМ ПАРТНЕРЫ ПОЛЕЗНЫЕ РЕСУРСЫ ОБ АКЦИИ ПРОШЕДШИЕ АКЦИИ
О О О О
Необычный урок программирования!
4 §@ #Д
I ¡gjto
п цяф ЯШ
mLätF
Узнай больше о «Часе кода»
Посмотри видеоурок
Пройди тренажер
Рис. 2. Официальный сайт Час.Кода
Одной из веток сайта Code.Org, разработанной в сотрудничестве с Microsoft, стал проект Майнкрафт [7], выполненный по мотивам популярной игры. Школьники решают задачи по добыче необходимых полезных ископаемых, пользуясь той же блочной технологией программирования.
Более серьезный уровень программирования предлагается освоить в проекте Blockly (рис. 3) [8]. Здесь для построения программы используются не только блоки, но и параллельно создается и демонстрируется текст на языке программирования JavaScript, который учащийся может редактировать:
Игры Blockly : Пруд Tutor
Документация
► Запустить Программу
while(true){ 2- while (scan(45) > 45) swim(45);
>
cannon(45, scan(45));
Рис. 3. Код на JavaScript в Blockly
Более того, на последнем уровне в Blockly учащемуся не дается никакого задания, но предлагается написать программу, играющую одновременно против трех противников. Единственным средством программирования этого является JavaScript.
Несколько особняком в описываемом множестве ресурсов находится среда разработки Scratch (рис. 4) по двум причинам.
Рис. 4. Официальный сайт Scratch
Во-первых, это не только средство обучения программированию, но и мощная среда разработки программных проектов, использующих анимацию, ставшая стандартом де-факто в ряду систем, использующих технологию блочного программирования [9]. Во-вторых, она не содержит встроенных элементов для
обучения программированию, но содержит примеры заработки различных проектов, и с ее помощью разработка игровых программ становится настолько несложным и увлекательным делом, что популярность ее в школьной среде очень высока.
Из прочих достоинств среды Scratch можно отметить, что кроме онлайн-версии существует еще и бесплатное автономное приложение для ПК. Кроме этого, в данной среде абсолютно естественно и ненавязчиво вводятся в употребление основные приемы параллельного программирования и синхронизации параллельных процессов! В следующем разделе описан опыт использования системы Scratch во внеклассной работе с учащимися одного из лицеев, входящего в университетский образовательный кластер ННГУ им. Н.И. Лобачевского.
В заключении этой части можно упомянуть о ресурсах, использующих реально существующие текстовые языки или близкие к ним собственные языки программирования.
Проект ColoBot [10] (вместе с отдельным образовательным ресурсом CeeBot [11]) предлагает разрабатывать дополнение к уже существующей компьютерной игре с использованием языка CBOT, чей синтаксис очень сильно напоминает C++ и Java. Образовательный ресурс CeeBot русифицирован и имеет подробное описание используемого языка и требований к разрабатываемым миссиям.
Проект MS Imagine [12] предлагает целый спектр заданий для разработки, в том числе множество игр, причем для выполнения разработанных программ могут использоваться как мобильные устройства (в качестве разработки предлагается простой скриптовый язык, средства обучения встроены в первые задания), так и ПК (для выполнения проектов используется реально существующий язык C# и платформа для разработки игр UNITY).
Проект JavaRush [13] предлагает изучить очень популярный кроссплат-форменный язык Java, причем это изучение организовано в виде онлайн-игры. Каждому уровню соответствует отдельная солнечная система на звездной карте. Лекциям внутри уровня — планеты солнечной системы. Каждая открытая лекция - это перелёт на очередную планету. Когда все лекции открыты, корабль перелетает к следующей звездной системе.
И, наконец, проект CodeCombat [14] предлагает очень симпатичную графическую оболочку для решения задач в виде набора небольших квестов, причем для программирования можно использовать один из четырех языков: Python, JavaScript, CoffeeScript или Lua.
Таким образом, если школьнику привить интерес к программированию (и чем раньше, тем лучше), то в старших классах он обязательно сможет найти для себя ресурс для изучения одного из текстовых языков высокого уровня, которые изучаются в высшей школе.
Опыт работы со школьниками в среде программирования Scratch
Одной из самых распространённых программ, ориентированных на обучение детей и подростков основам программирования, является Scratch, которую разрабатывают специалисты одного из самых престижных технических учебных заведений США - Массачусетского технологического института.
Основное предназначение данной программы - обучение детей программированию в игровой форме, где вместо сложных синтаксических конструкций языка программирования ребятам приходится работать с графическими объектами, которые называются Спрайтами. Им не надо беспокоиться о создании этих спрайтов при помощи специального класса, использовать атрибуты объектно -ориентированного программирования, чтобы прописать свойства, присущие всем спрайтам. Основная задача этой программы - помочь ребятам понять, что такое
алгоритм, какие виды алгоритмов могут встречаться, возможность широко смотреть на поставленную задачу (необходимо учесть и запрограммировать все сценарии развития события), понять, что математика - это не просто предмет, изучаемый в школе, но и хорошее средство, с помощью которого можно заставить бездушные по началу объекты работать именно так, как хочешь ты.
Всегда интересует вопрос, а с чего же можно начать обучение? В отличие от обычного программирования, первым проектом в котором является вывод надписи «Hello, world», здесь надо сделать нечто такое, чтобы сразу заинтересовать ребёнка, потому что если интерес пропадёт, то обучать сразу станет сложнее.
Моим ученикам, в качестве первого проекта на Scratch предлагалось заставить кота (спрайт, появляющийся при запуске программы) пройти по квадрату экрана, первоначально объяснив, как и какими способами можно это сделать. Через некоторое время становится понятно, у кого хорошо развито воображение и кто пошёл нестандартным путём, кто просто хорошо и быстро выполнил задание, рассмотрев все случаи, а кому пришлось объяснить заново.
После выполнения первого тренажёрного задания, становится понятен приблизительный уровень обучающихся и им предлагается написать на выбор одну из стандартных игр, с правилами которой ребёнок знаком уже давно. Всегда находятся ребята, жаждущие написать свою игру. В таком случае, мы вместе разбираем игровой процесс, рассматриваем все возможные сценарии, взаимодействие объектов внутри игры и так далее. Остальная часть обучения состоит в написании и постепенном улучшении написанной игры.
После изложения игрового процесса, необходимо заострить внимание на взаимодействии объектов между собой, ответить на вопрос «что будет, если..». Язык Scratch устроен таким образом, что отладчик представляет из себя сцену, на которой впоследствии и будет запускаться игра. Тестировать её можно на любом этапе - и это несомненный плюс. В любой момент можно понять, что пошло не так, и как можно быстрее исправить это.
В программе Scratch можно управлять объектами с помощью клавиатуры, но тут есть один изъян: программа не может распознать две и более клавиш, нажатых одновременно, ровно как не может распознать клавишу, которую долго удерживают.
Далее, для игрового процесса желательно использовать переменные, которые в этой программе тоже реализованы. Их значения, при необходимости или отладке, можно тоже выводить на сцену. В любой игре в переменных можно держать текущий счёт игры, лучший результат и всё прочее.
После реализации игрового процесса, необходимо контролировать начало игры, возможные сценарии для победы и поражения. На этом этапе надо выбрать кнопку, при нажатии на которую текущая игра остановится, а все объекты займут начальное положение, все переменные примут некоторое начальное значение. Для этого необходимо для каждого объекта установить начальное положение, остановить при необходимости. Вызов этих функций должен как раз осуществляться с помощью клавиши начала игры.
Аналогично стоит прописать все сценарии побед и поражений, а для этого нам необходимо:
остановить все объекты при необходимости, когда игра будет закончена; придумать и реализовать критерий для победы (большее количество очков, меньшее время для выполнения задания и т.д.);
продемонстрировать победу одного из игроков, например, сменой фона. Обычно большая часть времени тратится непосредственно на совершенствование игрового процесса и интерфейса пользователя. Здесь допустимы несколько путей развития вашего проекта:
возможность мультиплеера (необходимо помнить, что одновременное нажатие клавиш не распознаётся программой);
создание стратегии игры для компьютера (хотя бы самой простой); создание уровней сложности.
Первый пункт достигается с точки зрения алгоритмизации очень легко: мы должны поставить ещё один спрайт, прописать на него все те же функции, но запрограммировать их на другие клавиши. В программе Scratch это легко реализовать, так как спрайты можно копировать вместе со всем их кодом. Второй и третий пункты идут рядом друг с другом. Понятно, что во многих играх при желании можно создать такую стратегию, что наш игрок проиграет компьютеру. Аналогично можно создать стратегию, при которой проигрывать будет всегда компьютер. Нам надо найти некоторый баланс, ту золотую середину, при которой интерес к игре будет сохраняться. Достигнуть этого можно, если подключить математический аппарат, а именно, генерацию случайных величин с необходимым законом распределения.
Детям постарше необходимо рассказывать, что в большинстве игр нужно применять физические законы, например, для описания движения спрайтов. Таким образом, физика тоже перестанет быть сухим предметом и найдёт игровое применение.
Одним из последних этапов написания игрового проекта - его оформление. Здесь необходимо прописать динамику всех сцен, желательно придумать специальную сцену для начала игры, в которой будет небольшое меню, где можно как раз будет выбрать одиночную игру или мультиплеер, выбрать уровень сложности (для одиночной игры). Всё это можно реализовать с помощью управляющих переменных.
Для игр посложнее, (а, следовательно, для детей постарше), в программе Scratch реализовано хранение и обработка множества данных с помощью структуры данных «список». Аналогичные структуры данных применяются уже в вузе, при изучении таких языков программирования, как C++, Python и т.д., т.е. закладывается фундамент для работы со сложными структурами данных
Таким образом, если рассматривать проект написания игр с точки зрения совершенствования навыков программирования, то за время обучения ученик знакомится с такими важными понятиями, как алгоритм, его виды (линейный, ветвящийся и циклический), имеет представление о операторе присваивания (например, для моделирования ускорения объекта необходимо поставить блок «изменить координату по X на Accelerate», а ниже изменить значение этой переменной на заданное число). Кроме того, ребята получают важные знания о переменных и способах и 4 этапах жизни переменной (декларация, инициализация, динамика переменной, вывод при необходимости) и активно применяют эти знания, например, чтобы отслеживать счёт игры или количество жизней. Также в Scratch имеется возможность создавать свои блоки, которые являются аналогами функций и процедур в стандартных языках программирования. Эти структуры помогают будущим программистам организовать свои мысли таким образом, чтобы код был интуитивно понятным.
Заключение
Использование описанных средств программирования позволяет не только пробудить в школьнике интерес к программированию, но и научить его создавать свои первые программы в виде, понятном и интересном его одноклассникам - в виде компьютерной игры. И если это помогает изучению реальных языков программирования в старших классах, а затем - в высшем учебном заведении, то положительный эффект такого подхода очевиден.
Литература
1. Петрова И.Ю., Зарипова В.М., Ишкина Е.Г., Маликов А.В., Варфоломеев В.А., Захарова И.В., Кузенков О.А., Курмышев Н.В., Милицкая С.К. Ключевые ориентиры для разработки и реализации образовательных программ в предметной области «Информационно-коммуникационные технологии». Бильбао, 2013.
2. Захарова И.В., Кузенков О.А. Опыт реализаций требований образовательных и профессиональных стандартов в области ИКТ в российском образовании // Современные информационные технологии и ИТ-образование. 2016. Т. 12. № 3-1. С. 17-31.
3. Гергель В.П., Гугина Е.В., Кузенков О.А. Разработка образовательного стандарта Нижегородского госуниверситета по направлению "Фундаментальная информатика и информационные технологии" // Современные информационные технологии и ИТ-образование. 2010. Т. 1. № 6. С. 51-60.
4. Борисов Н. А. С информатикой, через робототехнику - в университет! // XII Всероссийская конференция «Преподавание информационных технологий в Российской Федерации» (дата публикации 15.05.2014) [Электронный ресурс] URL: http://mining.evnts.pw/materials/131/17013/ (дата обращения 03.12.2017)
5. Час кода для каждого ученика [Электронный ресурс] URL:https://code.org / (дата обращения 03.12.2017)
6. Час.Кода [Электронный ресурс] URL: М1р://часкода.рф/ / (дата обращения 03.12.2017)
7. MneCraft - Education Edition [Электронный ресурс] URL https://education. minecraft. net / (дата обращения 03.12.2017)
8. Программирование на Bloclly [Электронный ресурс] URL: http://blockly.ru / (дата обращения 12.12.2017)
9. Scratch - Создавайте истории, игры и анимацию [Электронный ресурс] URL: https://scratch.mit.edu / (дата обращения 12.12.2017)
10. ColoBot - COLONIZE WITH BOTS [Электронный ресурс] URL: http://www.ceebot.com/colobot/index-e.php / (дата обращения 12.12.2017)
11. Learn and teach programming with Ceebot.org [Электронный ресурс] URL: http://www.ceebot.org / (дата обращения 12.12.2017)
12. MS Imagine - Проекты по программированию [Электронный ресурс] URL: https://imagine. microsoft. com/ru-ru/code / (дата обращения 12.12.2017)
13. JavaRush - ЧТОБЫ СТАТЬ ПРОГРАММИСТОМ, НУЖНО ПРОГРАММИРОВАТЬ [Электронный ресурс] URL: https://javarush.ru / (дата обращения 12.12.2017)
14. CodeCombat - Самая захватывающая игра для обучения программированию [Электронный ресурс] URL: https://codecombat.com / (дата обращения 12.12.2017)