Здравствуйте. Меня зовут Михаил Капелько. Занимаюсь профессиональной разработкой ПО более 10 лет. Из них последние годы связаны с iOS. В свободное время разрабатываю игры и средства для их создания. Обзор Сегодня хочу рассказать о своём опыте обучения детей программированию, в частности мы рассмотрим: Организация процесса обучения Обучение проходит в рамках социальной ответственности бизнеса: компания предоставляет помещение с оборудованием, а также объединяет сотрудников, желающих попробовать себя в роли преподавателей, с сотрудниками, желающими обучить своих детей. Всё это исключительно на добровольной основе. Потенциальных преподавателей разбивают по группам таким образом, чтобы группа из трёх преподавателей состояла из одного опытного и двух новичков. Одна группа преподавателей ведёт одну группу учеников. Учеников разбивают по возрасту и навыкам. В 2018-м я второй раз участвовал в программе обучения детей в возрасте примерно десяти лет. Наша группа работала с октября по декабрь 2018-го по субботам с 10:00 до 12:00. Пользуясь служебным положением, я также затащил на курсы и свою жену. Программа обучения Когда я участвовал первый раз, наша группа обучала детей программированию довольно бесцельно: мы придумывали простейшие задания на урок для объяснения операторов. В результате в конце обучения у нас не было ничего конкретного, что можно было бы оценить, чем похвастаться и что проанализировать. В этот второй раз я решил, что мы с детьми реализуем так называемую игру на память. Критерием успешности обучения я определил следующее условие: каждый ученик к концу курса самостоятельно создаёт простейшую игру на память с нуля за 1 час. Для достижения этого критерия я решил проверить утверждение "Повторение — мать учения", поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере. Игра на память Давайте рассмотрим, что представляет собой игра на память. 1) В простейшем случае у нас есть 16 карт, причём уникальных лишь 8, остальные 8 являются их парами.  В представленном изображении у нас есть лишь две карты с котом, собакой и т.д.. 2) В начале игры мы перемешиваем карты и раскладываем их рубашкой вверх.  3) Первый из участников игры открывает две карты.  4) Если карты различаются, возвращаем их в исходное положение: кладём рубашкой вверх.  5) Следующий участник игры открывает другую пару карт.  6) Если карты совпадают, убираем их с игрового поля.  Цель игры в том, чтобы убрать все карты с поля. Игра в данном виде не включает соревнование, поэтому играть можно одному человеку. С одной стороны, игра на память довольно проста, с другой стороны, реализация игры затрагивает основную функциональность, необходимую для создания любой более-менее сложной игры: Инструмент программирования В качестве инструмента мы использовали среду Scratch. Она рассчитана на обучение детей программированию, поэтому каждое действие, каждый оператор в ней представлен графически. Например, следующим скриптом можно повернуть кота на 360 градусов за секунду:  Вот так выглядит результат:  Замечу, что это довольно успешное решение для представления кода графически. Например, платное решение, продвигаемое нынче компанией SAP, предполагает использование так называемых кубиков для программирования:  Тут можно лишь ввести в нужные поля нужные значения. Если потребуется что-то нестандартное, то поможет лишь скрипт, который представлен опять же кубиком. По личному опыту скажу, что решение Scratch не тормозит от слова совсем, чего не скажешь о решении SAP. Первый урок Первый урок являлся вводным, поэтому компьютеры мы не использовали. План был следующим: 1) Знакомство Преподаватели с учениками встают в круг. Это уравнивает всех и делает каждого участником команды. Первый участник называет своё имя и рассказывает о том, почему он решил посетить этот курс. Второй и последующие участники сначала повторяют имя и рассказ каждого предыдущего участника, после чего называют своё имя и рассказывают. Примерно так это выглядит: Данный формат знакомства преследует следующие цели: 2) Игра на память в карты Ученикам очень нравится играть в настольные игры. В ходе игры преподаватели проговаривают то, что происходит. После пары партий переходим к изучению понятия алгоритма. 3) Понятие алгоритма Ученикам очень нравится подходить к доске и писать на ней, поэтому по очереди вызываем каждого ученика, чтобы он писал по одному пункту алгоритма. Самого активного ученика используем в качестве исполнителя алгоритма. 4) Алгоритм игры Предлагаем написать алгоритм игры, опять вызываем каждого добавлять по одному пункту на доске. После завершения описания алгоритма ещё раз играем с картами, но на этот раз каждый ученик должен проговаривать шаг алгоритма. Выглядит это примерно так: 5) Анализ урока На этом первый урок заканчивается, и у преподавателей появляется возможность обсудить как свои впечатления об уроке, так и об учениках, выработать подходы к тихоням и активистам, договориться о дальнейших планах на следующие уроки. У нас были следующие решения: Второй и третий уроки Последующие уроки мы опять же начинали с разминки: вставали в круг, называли имя и рассказывали, кто что сделал. А если не сделал, то почему. Как и прежде, каждый участник сначала повторял сказанное предыдущими и лишь затем говорил о себе. На втором уроке мы создавали требования для элемента игрового поля и пытались создать этот элемент в Scratch. Это вполне удалось. На третьем уроке мы пытались создать 16 элементов и расположить их в сетке 4x4. Тут мы застопорились, т.к. ученики не смогли понять систему координат, чтобы расположить 16 элементов в сетке. Стало очевидно, что планы уроков являются лишь планами, а действительность вносит свои изменения. У нас было два пути решения проблемы с системой координат: Мы решили пойти вторым путём, т.к. мы всё-таки не школа и цель у нас была научить создавать игру, т.е. применять знания на практике, а не в теории. Поэтому сетку элементов 4 x 4 мы решили заменить кругом из 16 элементов. Данное решение привело меня к следующим выводам: Четвёртый и последующие уроки С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы "сверху". Но всё равно их никто не читал. Четвёртый и пятый уроки мы потратили на создание 16 элементов в виде круга, выделение пары элементов и проверку на их совпадение. С шестого урока и до девятого включительно мы каждый раз воссоздавали игру с нуля. С каждым разом это происходило всё быстрее и быстрее, поэтому с восьмого урока мы ввели турнирную таблицу, где записывали этапы создания игры и время каждого ученика. Последний урок К последнему уроку все справлялись с созданием игры с нуля более-менее самостоятельно за час-два. Такова турнирная таблица последнего урока (имена скрыты):  А ниже можно посмотреть на создание игры на память в Scratch ученика, который создал игру быстрее всех: за 30 минут. Результаты и планы Результат обучения превзошёл мои ожидания: В этом году я планирую провести обучение не с помощью Scratch, а с использованием инструментария Opensource Game Studio: ученики будут работать с Lua, Git и GitHub Pages.  PS English version is available here ОБНОВЛЕНИЕ: Статья про обучение в 2019-м году Разработчик