You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2019-02-04_teaching-kids-to-program.md 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. Title: Обучение детей программированию
  2. Date: 2019-02-04 00:00
  3. Category: News
  4. Slug: teaching-kids-to-program
  5. Lang: ru
  6. ![Ученики и учителя][screenshot]
  7. В этой статье Михаил делится своим опытом обучения детей программированию.
  8. Он расскажет о следующем:
  9. - организация процесса обучения
  10. - программа обучения
  11. - игра на память
  12. - инструмент программирования
  13. - уроки
  14. - результаты и планы
  15. **Организация процесса обучения**
  16. Обучение проходит в рамках социальной ответственности бизнеса: компания предоставляет помещение с оборудованием, а также объединяет сотрудников, желающих попробовать себя в роли преподавателей, с сотрудниками, желающими обучить своих детей. Всё это исключительно на добровольной основе.
  17. Потенциальных преподавателей разбивают по группам таким образом, чтобы группа из трёх преподавателей состояла из одного опытного и двух новичков. Одна группа преподавателей ведёт одну группу учеников. Учеников разбивают по возрасту и навыкам.
  18. В 2018-м я второй раз участвовал в программе обучения детей в возрасте примерно десяти лет. Наша группа работала с октября по декабрь 2018-го по субботам с 10:00 до 12:00. Пользуясь служебным положением, я также затащил на курсы и свою жену.
  19. **Программа обучения**
  20. Когда я участвовал первый раз, наша группа обучала детей программированию довольно бесцельно: мы придумывали простейшие задания на урок для объяснения операторов. В результате в конце обучения у нас не было ничего конкретного, что можно было бы оценить, чем похвастаться и что проанализировать.
  21. В этот второй раз я решил, что мы с детьми реализуем так называемую игру на память. Критерием успешности обучения я определил следующее условие: каждый ученик к концу курса самостоятельно создаёт простейшую игру на память с нуля за 1 час.
  22. Для достижения этого критерия я решил проверить утверждение "Повторение - мать учения", поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере.
  23. **Игра на память**
  24. Давайте рассмотрим, что представляет собой игра на память.
  25. **1)** В простейшем случае у нас есть 16 карт, причём уникальных лишь 8, остальные 8 являются их парами.
  26. ![Карты лицом вверх][all-cards-face-up]
  27. В представленном изображении у нас есть лишь две карты с котом, собакой и т.д..
  28. **2)** В начале игры мы перемешиваем карты и раскладываем их **рубашкой** вверх.
  29. ![Карты лицом вниз][all-cards-face-down]
  30. **3)** Первый из участников игры открывает две карты.
  31. ![Пара карт][first-pair]
  32. **4)** Если карты различаются, возвращаем их в исходное положение: кладём **рубашкой** вверх.
  33. ![Карты лицом вниз][all-cards-face-down]
  34. **5)** Следующий участник игры открывает другую пару карт.
  35. ![Вторая пара карт][second-pair]
  36. **6)** Если карты совпадают, убираем их с игрового поля.
  37. ![Пара совпадающих карт убрана][remove-pair]
  38. Цель игры в том, чтобы убрать все карты с поля. Игра в данном виде не включает соревнование, поэтому играть можно одному человеку.
  39. С одной стороны, игра на память довольно проста, с другой стороны, реализация игры затрагивает основную функциональность, необходимую для создания любой более-менее сложной игры:
  40. - создание элементов
  41. - их расстановка на поле
  42. - выбор элементов
  43. - сравнение выбранных элементов
  44. - скрытие совпадающих элементов
  45. **Инструмент программирования**
  46. В качестве инструмента мы использовали среду [Scratch][scratch]. Она рассчитана на обучение детей программированию, поэтому каждое действие, каждый оператор в ней представлен графически.
  47. Например, следующим скриптом можно повернуть кота на 360 градусов за секунду:
  48. ![Скрипт][cat-script]
  49. Вот так выглядит результат:
  50. ![Анимация][cat-animation]
  51. Замечу, что это довольно успешное решение для представления кода графически. Например, платное решение, продвигаемое нынче компанией SAP, предполагает использование так называемых кубиков для программирования:
  52. ![SAP UI][sap-ui]
  53. Тут можно лишь ввести в нужные поля нужные значения. Если потребуется что-то нестандартное, то поможет лишь скрипт, который представлен опять же кубиком.
  54. По личному опыту скажу, что решение Scratch не тормозит от слова совсем, чего не скажешь о решении SAP.
  55. **Первый урок**
  56. Первый урок являлся вводным, поэтому компьютеры мы не использовали.
  57. План был следующим:
  58. 1. Познакомиться
  59. 2. Сыграть в игру на память
  60. 3. Изучить понятие алгоритма
  61. 4. Написать алгоритм игры
  62. 5. Проанализировать урок
  63. **1)** Знакомство
  64. Преподаватели с учениками встают в круг. Это уравнивает всех и делает каждого участником команды.
  65. Первый участник называет своё имя и рассказывает о том, почему он решил посетить этот курс. Второй и последующие участники сначала повторяют имя и рассказ каждого предыдущего участника, после чего называют своё имя и рассказывают.
  66. Примерно так это выглядит:
  67. 1. Вася: "Меня зовут Вася, я хочу изучить Scratch, потому что меня заставил папа"
  68. 2. Дима: "Это Вася, заниматься Scratch'ем его заставляет папа. Меня зовут Дима, и это мой четвёртый год Scratch'а"
  69. 3. Оля: "Это Вася, его заставляют родители. Это Дима, он практически ветеран Scratch'а. Меня зовут Оля, я первый год преподаю, буду учиться вместе со всеми"
  70. Данный формат знакомства преследует следующие цели:
  71. - Знакомство
  72. - Каждый участник команды должен знать по имени остальных участников команды
  73. - Общее пространство
  74. - Все участники в круге, а не за рабочими местами, что уменьшает отвлечение на игры в компьютере
  75. - Равенство
  76. - И преподаватели, и ученики в одном круге, что уравновешивает всех в качестве участников команды без иерархии
  77. - Внимание
  78. - Каждый участник команды должен внимательно слушать остальных участников, чтобы правильно повторить сказанное ими
  79. - Обратная связь
  80. - Каждый участник команды должен максимально чётко излагать свою мысль, иначе остальные просто не смогут её повторить
  81. - Веселье
  82. - Проблемы с запоминанием имён всех веселят
  83. **2)** Игра на память в карты
  84. 1. Берём две колоды карт и выбираем из них по 8 одинаковых
  85. 2. Раскладываем карты в сетку 4 x 4 рубашкой вверх на столе
  86. 3. Ученики встают вокруг стола
  87. 4. Каждый ученик по очереди переворачивает пару карт
  88. * Если карты совпали, то убираем их с поля
  89. * Если карты различаются, то переворачиваем их рубашкой вверх
  90. Ученикам очень нравится играть в настольные игры. В ходе игры преподаватели проговаривают то, что происходит.
  91. После пары партий переходим к изучению понятия алгоритма.
  92. **3)** Понятие алгоритма
  93. 1. Спрашиваем сначала учеников, даём возможность высказаться, узнаём уровень каждого ученика
  94. 2. При необходимости поправляем высказывания, если они близки к ожидаемому ответу
  95. 3. Предлагаем написать алгоритм перевода человека из состояния "стоит за дверью кабинета" в состояние "работает за компьютером в кабинете"
  96. Ученикам очень нравится подходить к доске и писать на ней, поэтому по очереди вызываем каждого ученика, чтобы он писал по одному пункту алгоритма. Самого активного ученика используем в качестве исполнителя алгоритма.
  97. **4)** Алгоритм игры
  98. Предлагаем написать алгоритм игры, опять вызываем каждого добавлять по одному пункту на доске. После завершения описания алгоритма ещё раз играем с картами, но на этот раз каждый ученик должен проговаривать шаг алгоритма.
  99. Выглядит это примерно так:
  100. 1. Вася: "Раскладываем 16 карт рубашкой вверх"
  101. 2. Дима: "Переворачиваем пару карт"
  102. 3. Паша: "Если две карты различаются, переворачиваем их рубашкой вверх"
  103. 4. Филипп: "Переворачиваем пару карт"
  104. 5. Миша: "Если две карты совпадают, убираем их с поля"
  105. **5)** Анализ урока
  106. На этом первый урок заканчивается, и у преподавателей появляется возможность обсудить как свои впечатления об уроке, так и об учениках, выработать подходы к тихоням и активистам, договориться о дальнейших планах на следующие уроки.
  107. У нас были следующие решения:
  108. 1. Рассаживать тихонь и активистов через одного, чтобы соблюсти баланс шума и тишины. Иначе группа активистов создаёт очаг бури, а группа тихонь - очаг пустыни, что замедляет процесс обучения.
  109. 2. Требовать от учеников точности, т.к. активисты любят кривляться, что плохо влияет на дисциплину.
  110. **Второй и третий уроки**
  111. Последующие уроки мы опять же начинали с разминки: вставали в круг, называли имя и рассказывали, кто что сделал. А если не сделал, то почему. Как и прежде, каждый участник сначала повторял сказанное предыдущими и лишь затем говорил о себе.
  112. На втором уроке мы создавали требования для элемента игрового поля и пытались создать этот элемент в Scratch. Это вполне удалось.
  113. На третьем уроке мы пытались создать 16 элементов и расположить их в сетке 4x4. Тут мы застопорились, т.к. ученики не смогли понять систему координат, чтобы расположить 16 элементов в сетке. Стало очевидно, что планы уроков являются лишь планами, а действительность вносит свои изменения.
  114. У нас было два пути решения проблемы с системой координат:
  115. 1. Продолжать обучать системе координат с риском не успеть создать игру до конца курса
  116. 2. Изменить требования к игре таким образом, чтобы система координат была не нужна
  117. Мы решили пойти вторым путём, т.к. мы всё-таки не школа и цель у нас была научить создавать игру, т.е. применять знания на практике, а не в теории. Поэтому сетку элементов 4x4 мы решили заменить кругом из 16 элементов.
  118. Данное решение привело меня к следующим выводам:
  119. 1. Для решения задачи часто можно найти более простой путь
  120. 2. Этот путь легче для понимания, хоть и менее гибкий
  121. 3. Перейти на сложный путь для увеличения гибкости можно позже, когда это будет действительно необходимо
  122. 4. Упрощение приближает к конечной цели, усложнение отдаляет от неё
  123. **Четвёртый и последующие уроки**
  124. С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы "сверху". Но всё равно их никто не читал.
  125. Четвёртый и пятый уроки мы потратили на создание 16 элементов в виде круга, выделение пары элементов и проверку на их совпадение.
  126. С шестого урока и до девятого включительно мы каждый раз воссоздавали игру с нуля. С каждым разом это происходило всё быстрее и быстрее, поэтому с восьмого урока мы ввели турнирную таблицу, где записывали этапы создания игры и время каждого ученика.
  127. **Последний урок**
  128. К последнему уроку все справлялись с созданием игры с нуля более-менее самостоятельно за час-два.
  129. Такова турнирная таблица последнего урока (имена скрыты):
  130. ![Турнирная таблица][leaderboard]
  131. А ниже можно посмотреть на создание игры на память в Scratch ученика, который создал игру быстрее всех: за 30 минут.
  132. <iframe width="560" height="315" src="https://www.youtube.com/embed/WlA193S3SPY" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
  133. <br/>
  134. **Результаты и планы**
  135. Результат обучения превзошёл мои ожидания:
  136. - трое учеников успели примерно за час или быстрее
  137. - двое примерно за полтора часа или быстрее
  138. В этом году я планирую провести обучение не с помощью Scratch, а с использованием инструментария Opensource Game Studio: ученики будут работать с Lua, Git и GitHub Pages.
  139. На этом мы заканчиваем статью об опыте Михаила по обучению детей программированию.
  140. [screenshot]: ../../images/2019-02-04_teaching-kids-to-program-team.png
  141. [all-cards-face-up]: ../../images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png
  142. [all-cards-face-down]: ../../images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png
  143. [first-pair]: ../../images/2019-02-04_teaching-kids-to-program-first-pair.png
  144. [second-pair]: ../../images/2019-02-04_teaching-kids-to-program-second-pair.png
  145. [remove-pair]: ../../images/2019-02-04_teaching-kids-to-program-remove-pair.png
  146. [scratch]: https://scratch.mit.edu/
  147. [cat-script]: ../../images/2019-02-04_teaching-kids-to-program-cat-script-ru.png
  148. [cat-animation]: ../../images/2019-02-04_teaching-kids-to-program-cat-animation.gif
  149. [sap-ui]: ../../images/2019-02-04_teaching-kids-to-program-sap-ui.png
  150. [leaderboard]: ../../images/2019-02-04_teaching-kids-to-program-leaderboard.png