-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathteaching-kids-to-program-ru.html
300 lines (298 loc) · 24 KB
/
teaching-kids-to-program-ru.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<style>
body
{
background: #FAFAFA;
}
code, pre
{
font-family: monospace, serif;
font-size: 1em;
color: #7f0a0c;
}
figure
{
margin: 0px;
padding: 0px;
}
img
{
width: 720px;
}
html
{
font-family: sans-serif;
}
#header
{
background: #2BA6E3;
padding: 0.7em;
text-align: left;
}
#header a
{
color: white;
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
}
a
{
color: #3A91CB;
text-decoration: none;
}
.news_item
{
background: #FFFFFF;
width: 720px;
padding: 1em;
margin-top: 2em;
margin-bottom: 2em;
border: 1px solid #E0E0E0;
text-align: left;
}
.news_item_contents
{
color: #444;
line-height: 1.5em;
}
.news_item_date
{
margin-bottom: 50px;
color: #aaa;
}
#lang
{
float: right;
}
</style>
</head>
<body>
<center>
<div id="header">
<a href="index-ru.html">Новости</a>
<a href="games-ru.html">Игры</a>
<a href="tools-ru.html">Инструменты</a>
<a href="about-ru.html">О нас</a>
<div id="lang">
<a href="teaching-kids-to-program.html">EN</a>
<a href="teaching-kids-to-program-ru.html">RU</a>
</div>
</div>
<h1>В новостях</h1>
<div class="news_item">
<h2 class="news_item_title">
<a href="
2019-02-04_teaching-kids-to-program-ru.html
">
Обучение детей программированию
</a>
</h2>
<p class="news_item_date">
2019-02-04 00:00
</p>
<div class="news_item_contents">
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-team.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p>В этой статье Михаил делится своим опытом обучения детей программированию.</p>
<p>Он расскажет о следующем:</p>
<ul>
<li>организация процесса обучения</li>
<li>программа обучения</li>
<li>игра на память</li>
<li>инструмент программирования</li>
<li>уроки</li>
<li>результаты и планы</li>
</ul>
<p><strong>Организация процесса обучения</strong></p>
<p>Обучение проходит в рамках социальной ответственности бизнеса: компания предоставляет помещение с оборудованием, а также объединяет сотрудников, желающих попробовать себя в роли преподавателей, с сотрудниками, желающими обучить своих детей. Всё это исключительно на добровольной основе.</p>
<p>Потенциальных преподавателей разбивают по группам таким образом, чтобы группа из трёх преподавателей состояла из одного опытного и двух новичков. Одна группа преподавателей ведёт одну группу учеников. Учеников разбивают по возрасту и навыкам.</p>
<p>В 2018-м я второй раз участвовал в программе обучения детей в возрасте примерно десяти лет. Наша группа работала с октября по декабрь 2018-го по субботам с 10:00 до 12:00. Пользуясь служебным положением, я также затащил на курсы и свою жену.</p>
<p><strong>Программа обучения</strong></p>
<p>Когда я участвовал первый раз, наша группа обучала детей программированию довольно бесцельно: мы придумывали простейшие задания на урок для объяснения операторов. В результате в конце обучения у нас не было ничего конкретного, что можно было бы оценить, чем похвастаться и что проанализировать.</p>
<p>В этот второй раз я решил, что мы с детьми реализуем так называемую игру на память. Критерием успешности обучения я определил следующее условие: каждый ученик к концу курса самостоятельно создаёт простейшую игру на память с нуля за 1 час.</p>
<p>Для достижения этого критерия я решил проверить утверждение “Повторение - мать учения”, поэтому каждый урок мы создавали всё с нуля. Подчеркну, что мы ничего не сохраняли в учётной записи учеников. Задача была в сохранении навыка создания игры в голове, не в компьютере.</p>
<p><strong>Игра на память</strong></p>
<p>Давайте рассмотрим, что представляет собой игра на память.</p>
<p><strong>1)</strong> В простейшем случае у нас есть 16 карт, причём уникальных лишь 8, остальные 8 являются их парами.</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-all-cards-face-up.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p>В представленном изображении у нас есть лишь две карты с котом, собакой и т.д..</p>
<p><strong>2)</strong> В начале игры мы перемешиваем карты и раскладываем их <strong>рубашкой</strong> вверх.</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p><strong>3)</strong> Первый из участников игры открывает две карты.</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-first-pair.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p><strong>4)</strong> Если карты различаются, возвращаем их в исходное положение: кладём <strong>рубашкой</strong> вверх.</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-all-cards-face-down.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p><strong>5)</strong> Следующий участник игры открывает другую пару карт.</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-second-pair.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p><strong>6)</strong> Если карты совпадают, убираем их с игрового поля.</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-remove-pair.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p>Цель игры в том, чтобы убрать все карты с поля. Игра в данном виде не включает соревнование, поэтому играть можно одному человеку.</p>
<p>С одной стороны, игра на память довольно проста, с другой стороны, реализация игры затрагивает основную функциональность, необходимую для создания любой более-менее сложной игры:</p>
<ul>
<li>создание элементов</li>
<li>их расстановка на поле</li>
<li>выбор элементов</li>
<li>сравнение выбранных элементов</li>
<li>скрытие совпадающих элементов</li>
</ul>
<p><strong>Инструмент программирования</strong></p>
<p>В качестве инструмента мы использовали среду <a href="https://scratch.mit.edu/">Scratch</a>. Она рассчитана на обучение детей программированию, поэтому каждое действие, каждый оператор в ней представлен графически.</p>
<p>Например, следующим скриптом можно повернуть кота на 360 градусов за секунду:</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-cat-script-ru.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p>Вот так выглядит результат:</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-cat-animation.gif" alt="Animation" /><figcaption>Animation</figcaption>
</figure>
<p>Замечу, что это довольно успешное решение для представления кода графически. Например, платное решение, продвигаемое нынче компанией SAP, предполагает использование так называемых кубиков для программирования:</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-sap-ui.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p>Тут можно лишь ввести в нужные поля нужные значения. Если потребуется что-то нестандартное, то поможет лишь скрипт, который представлен опять же кубиком.</p>
<p>По личному опыту скажу, что решение Scratch не тормозит от слова совсем, чего не скажешь о решении SAP.</p>
<p><strong>Первый урок</strong></p>
<p>Первый урок являлся вводным, поэтому компьютеры мы не использовали.</p>
<p>План был следующим:</p>
<ol type="1">
<li>Познакомиться</li>
<li>Сыграть в игру на память</li>
<li>Изучить понятие алгоритма</li>
<li>Написать алгоритм игры</li>
<li>Проанализировать урок</li>
</ol>
<p><strong>1)</strong> Знакомство</p>
<p>Преподаватели с учениками встают в круг. Это уравнивает всех и делает каждого участником команды.</p>
<p>Первый участник называет своё имя и рассказывает о том, почему он решил посетить этот курс. Второй и последующие участники сначала повторяют имя и рассказ каждого предыдущего участника, после чего называют своё имя и рассказывают.</p>
<p>Примерно так это выглядит:</p>
<ol type="1">
<li>Вася: “Меня зовут Вася, я хочу изучить Scratch, потому что меня заставил папа”</li>
<li>Дима: “Это Вася, заниматься Scratch’ем его заставляет папа. Меня зовут Дима, и это мой четвёртый год Scratch’а”</li>
<li>Оля: “Это Вася, его заставляют родители. Это Дима, он практически ветеран Scratch’а. Меня зовут Оля, я первый год преподаю, буду учиться вместе со всеми”</li>
</ol>
<p>Данный формат знакомства преследует следующие цели:</p>
<ul>
<li>Знакомство
<ul>
<li>Каждый участник команды должен знать по имени остальных участников команды</li>
</ul></li>
<li>Общее пространство
<ul>
<li>Все участники в круге, а не за рабочими местами, что уменьшает отвлечение на игры в компьютере</li>
</ul></li>
<li>Равенство
<ul>
<li>И преподаватели, и ученики в одном круге, что уравновешивает всех в качестве участников команды без иерархии</li>
</ul></li>
<li>Внимание
<ul>
<li>Каждый участник команды должен внимательно слушать остальных участников, чтобы правильно повторить сказанное ими</li>
</ul></li>
<li>Обратная связь
<ul>
<li>Каждый участник команды должен максимально чётко излагать свою мысль, иначе остальные просто не смогут её повторить</li>
</ul></li>
<li>Веселье
<ul>
<li>Проблемы с запоминанием имён всех веселят</li>
</ul></li>
</ul>
<p><strong>2)</strong> Игра на память в карты</p>
<ol type="1">
<li>Берём две колоды карт и выбираем из них по 8 одинаковых</li>
<li>Раскладываем карты в сетку 4 x 4 рубашкой вверх на столе</li>
<li>Ученики встают вокруг стола</li>
<li>Каждый ученик по очереди переворачивает пару карт
<ul>
<li>Если карты совпали, то убираем их с поля</li>
<li>Если карты различаются, то переворачиваем их рубашкой вверх</li>
</ul></li>
</ol>
<p>Ученикам очень нравится играть в настольные игры. В ходе игры преподаватели проговаривают то, что происходит.</p>
<p>После пары партий переходим к изучению понятия алгоритма.</p>
<p><strong>3)</strong> Понятие алгоритма</p>
<ol type="1">
<li>Спрашиваем сначала учеников, даём возможность высказаться, узнаём уровень каждого ученика</li>
<li>При необходимости поправляем высказывания, если они близки к ожидаемому ответу</li>
<li>Предлагаем написать алгоритм перевода человека из состояния “стоит за дверью кабинета” в состояние “работает за компьютером в кабинете”</li>
</ol>
<p>Ученикам очень нравится подходить к доске и писать на ней, поэтому по очереди вызываем каждого ученика, чтобы он писал по одному пункту алгоритма. Самого активного ученика используем в качестве исполнителя алгоритма.</p>
<p><strong>4)</strong> Алгоритм игры</p>
<p>Предлагаем написать алгоритм игры, опять вызываем каждого добавлять по одному пункту на доске. После завершения описания алгоритма ещё раз играем с картами, но на этот раз каждый ученик должен проговаривать шаг алгоритма.</p>
<p>Выглядит это примерно так:</p>
<ol type="1">
<li>Вася: “Раскладываем 16 карт рубашкой вверх”</li>
<li>Дима: “Переворачиваем пару карт”</li>
<li>Паша: “Если две карты различаются, переворачиваем их рубашкой вверх”</li>
<li>Филипп: “Переворачиваем пару карт”</li>
<li>Миша: “Если две карты совпадают, убираем их с поля”</li>
</ol>
<p><strong>5)</strong> Анализ урока</p>
<p>На этом первый урок заканчивается, и у преподавателей появляется возможность обсудить как свои впечатления об уроке, так и об учениках, выработать подходы к тихоням и активистам, договориться о дальнейших планах на следующие уроки.</p>
<p>У нас были следующие решения:</p>
<ol type="1">
<li>Рассаживать тихонь и активистов через одного, чтобы соблюсти баланс шума и тишины. Иначе группа активистов создаёт очаг бури, а группа тихонь - очаг пустыни, что замедляет процесс обучения.</li>
<li>Требовать от учеников точности, т.к. активисты любят кривляться, что плохо влияет на дисциплину.</li>
</ol>
<p><strong>Второй и третий уроки</strong></p>
<p>Последующие уроки мы опять же начинали с разминки: вставали в круг, называли имя и рассказывали, кто что сделал. А если не сделал, то почему. Как и прежде, каждый участник сначала повторял сказанное предыдущими и лишь затем говорил о себе.</p>
<p>На втором уроке мы создавали требования для элемента игрового поля и пытались создать этот элемент в Scratch. Это вполне удалось.</p>
<p>На третьем уроке мы пытались создать 16 элементов и расположить их в сетке 4x4. Тут мы застопорились, т.к. ученики не смогли понять систему координат, чтобы расположить 16 элементов в сетке. Стало очевидно, что планы уроков являются лишь планами, а действительность вносит свои изменения.</p>
<p>У нас было два пути решения проблемы с системой координат:</p>
<ol type="1">
<li>Продолжать обучать системе координат с риском не успеть создать игру до конца курса</li>
<li>Изменить требования к игре таким образом, чтобы система координат была не нужна</li>
</ol>
<p>Мы решили пойти вторым путём, т.к. мы всё-таки не школа и цель у нас была научить создавать игру, т.е. применять знания на практике, а не в теории. Поэтому сетку элементов 4x4 мы решили заменить кругом из 16 элементов.</p>
<p>Данное решение привело меня к следующим выводам:</p>
<ol type="1">
<li>Для решения задачи часто можно найти более простой путь</li>
<li>Этот путь легче для понимания, хоть и менее гибкий</li>
<li>Перейти на сложный путь для увеличения гибкости можно позже, когда это будет действительно необходимо</li>
<li>Упрощение приближает к конечной цели, усложнение отдаляет от неё</li>
</ol>
<p><strong>Четвёртый и последующие уроки</strong></p>
<p>С четвёртого урока мы отменили стадию написания требований, т.к. она начала занимать бОльшую часть урока: мы снова сделали уклон на практику, а не теорию, чтобы уложиться в сроки. На этот раз все требования были написаны заранее и выданы “сверху”. Но всё равно их никто не читал.</p>
<p>Четвёртый и пятый уроки мы потратили на создание 16 элементов в виде круга, выделение пары элементов и проверку на их совпадение.</p>
<p>С шестого урока и до девятого включительно мы каждый раз воссоздавали игру с нуля. С каждым разом это происходило всё быстрее и быстрее, поэтому с восьмого урока мы ввели турнирную таблицу, где записывали этапы создания игры и время каждого ученика.</p>
<p><strong>Последний урок</strong></p>
<p>К последнему уроку все справлялись с созданием игры с нуля более-менее самостоятельно за час-два.</p>
<p>Такова турнирная таблица последнего урока (имена скрыты):</p>
<figure>
<img src="images/2019-02-04_teaching-kids-to-program-leaderboard.png" alt="Screenshot" /><figcaption>Screenshot</figcaption>
</figure>
<p>А ниже можно посмотреть на создание игры на память в Scratch ученика, который создал игру быстрее всех: за 30 минут.</p>
<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>
<p><br/></p>
<p><strong>Результаты и планы</strong></p>
<p>Результат обучения превзошёл мои ожидания:</p>
<ul>
<li>трое учеников успели примерно за час или быстрее</li>
<li>двое примерно за полтора часа или быстрее</li>
</ul>
<p>В этом году я планирую провести обучение не с помощью Scratch, а с использованием инструментария Opensource Game Studio: ученики будут работать с Lua, Git и GitHub Pages.</p>
<p>На этом мы заканчиваем статью об опыте Михаила по обучению детей программированию.</p>
</div>
</div>
</center>
<script type="text/javascript">
</script>
</body>
</html>