1. Что это и зачем

2. Как это: подходы, инструменты, последовательность целей

3. Детское программирование на английском языке

4. Дополнительно к программированию: что полезно

0. Введение. Почему меня интересует эта тема

У меня подрастает двое детей. Старший вот-вот пойдет в школу, младшая пойдет в школу через два года. Я считаю бесспорным, что детям требуется дополнительное развитие - т.е. дополнительное к тому, что предлагает им школьная программа (которая, при всех её огромных недостатках, к тому же и реализуется в школе совершенно убого, другими словами, даже свою же программу школа дать совершенно не в состоянии) - и следующий вопрос, в каком же именно направлении делать дополнительные образовательные усилия.

Великолепная (на мой взгляд) статья, хорошо отвечающая на этот вопрос - вот тут http://wiseparents.ru/algoritm-uspexa-intervyu-s-a-g-kushnirenko/ Это интервью с Анатолием Кушниренко, заведующим отделом учебной информатики НИИСИ РАН. Мое ощущение практически полностью совпадает с тем, что он говорит о нескольких различных грамотностях, и о владении ими как о необходимом условии функционирования в сегодняшнем взрослом мире.

В моей статье ниже я фокусируюсь на алгоритмической грамотности. Мы будем, разумеется, заниматься с нашими детьми и другими грамотностями, но на данный момент именно эту грамотность мы видим как самую сложную и в методическом плане, и организационно.

Методическая сложность связана с тем, что ранняя информатика является очень молодой областью, и находится еще на той стадии, когда отдельные учителя, методисты и педагоги пытаются убедить всех остальных своих коллег, что введение в жизнь ребенка ранней информатики/программирования полезно (более того, многих еще надо вначале убедить, что оно не вредно!). Естественно, в таких условиях, ответ на вопрос, "а чему именно учить ребенка" находится на еще более ранней и неуверенной стадии. Разных ответов немало, и я их обсуждаю ниже в этой статье.

Кроме того, для организации качественных занятий важно, чтобы у детей была компания для взаимного стимулирования, для "роста в игре", чтобы вокруг них были сверстники, занимающиеся тем же самым, чтобы им было с кем из своего круга друзей обсудить свои трудности и открытия, и чтобы они могли учиться друг у друга. Если мы - родители - окажемся их единственной опорой и компанией в этой теме, то всё будет совсем не так хорошо, как могло бы быть. Тот факт, что идея ранней информатики еще только проникает в жизнь (в отличие, например, от "раннего английского"), означает, что такую компанию найти для детей совсем не просто, а в поселке, где мы живем, единственный способ её заполучить - создать её самим. При всех сложностях, в результате у нас будет и выигрыш в виде того, что методически построить занятия в ней мы сможем именно так, как мы считаем правильным (т.е. руководствуясь лучшими подходами и наработками успешных пионеров и первопроходцев этого дела).

Вести занятия я буду сам: в свое время я много лет проработал в области IT, в том числе программировал и создавал электронные учебные пособия для подготовки администраторов компьютерных сетей (причем на английском, для Boson Inc., США), и у меня даже сохранилось несколько профессиональных сертификатов от Microsoft тех далеких времен. Ну и для комплекта, специально ради этих занятий, я прошел полноценный курс повышения квалификации по преподаванию дошкольной алгоритмики. Так что с детским программированием я справлюсь. :)

Ниже - подробности.

1. Ранняя информатика/программирование для малышей, что это и зачем оно нужно малышам

Информатика/программирование воспринимается, как "изучение компьютеров", и вполне уместен вопрос, зачем, собственно, маленьким детям это нужно. В мире взрослых, компьютеры нужны в конечном итоге для того, чтобы делать работу - либо делать ее быстрее, чем без компьютера, либо может быть, что вообще без компьютера эту работу не сделать. Какой же смысл в том, чтобы обучать использованию компьютера детей, которые сейчас никакой работы, тем более на компьютере, делать не будут? Есть ли в этом смысл?

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

Во-первых, это освоение особого способа/метода мышления (никак, к сожалению, не тренируемого обычной жизнью ребенка), называемого алгоритмическим. Программирование даже очень простого робота (бегающего по полу, или по экрану - детали не столь существенны), требует предвидения различных будущих сценариев и составление строгих планов поведения робота сообразно с этими будущими сценариями. Именно эта ориентация на сложное будущее и его образ в голове (в отличие от всего, что можно наблюдать физически здесь и сейчас) и отличает этот метод мышления от всего, что обыкновенно происходит в жизни и в голове ребенка. Ребенок живет в настоящем, и составление и удержание в голове последовательности будущих действий, особенно если они еще и должны быть разными в зависимости от неких условий - для него весьма сложная задача. Тренировка в составлении таких программ и тестирование результата производятся на игрушечных роботах (физических и на экране компьютера/планшета), но по мере роста навыков - появляется возможность переносить эти умения и на себя и собственную жизнь. Происходит переход от вопроса "Какая цель у робота, какие там есть препятствия, и какую программу я должен создать, чтобы успешно привести робота к цели", к вопросу "Какая у меня цель и что я должен сделать для её достижения, в какой последовательности, какие трудности мне могут встретиться, и какие будут мои действия в каждом случае" - а это уже очень взрослые вопросы, и нет нужды, мне кажется, говорить о том, насколько важно уметь их формулировать и находить на них ответы. Обучение алгоритмическому мышлению позволяет вывести и на эти вопросы, и на навыки их решения, уже дошкольника.

Итак, тренировочная цель номер 1 - Составление планов на будущее, развлетвлённых на различные сценарии.

Тренировочная цель номер 2 состоит в том, чтобы научиться систематически воспринимать свои ошибки как учебный ресурс, а не расстраиваться, воспринимая их как провал. Эта цель требует пояснений. Всем известна поговорка "На ошибках учатся", и тем не менее, даже очень многие взрослые огорчаются, делая ошибки, вместо того, чтобы видеть их пользу и активно их изучать. У детей же, особенно маленьких, любые их ошибки и неудачи тем более часто вызывают скорее горе, чем энтузиазм. Однако очевидно, что при освоении любого навыка, ошибки неизбежны, и более того, чем сложнее навык, тем больше будет этих ошибок! Так как же натренировать ребенка рассматривать любую ошибку, как ступеньку к мастерству, а не как разочарование? Один из побочных эффектов от обучения программированию - это как раз освоение взгляда на ошибки, как на информацию, полезный ресурс. Ибо, программу (за исключением, возможно, самой примитивной) не только невозможно сразу написать без ошибок - самое главное, что это и не нужно, этого никто никогда ни от кого не ждет и никто никогда не пытается достичь! Ошибки в программах (и их выявление и исправление) - это не просто неизбежная, а полноценная, признанная и неотъемлемая часть процесса программирования. Точно так же, как происходит с алгоритмическим мышлением - тренировка навыка происходит в искусственной среде игрушечного робота, а по мере роста мастерства, новый навык распространяется на собственную жизнь. Происходит переход от разочарования "У меня не получилось!" к активному вопросу "Что же именно у меня в этот раз не получилось?"

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

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

2. Подходы, инструменты, последовательность целей

"Детская дорога" к развитым навыкам программирования состоит из последовательных "ступенек", или "этапов", можно их называть как угодно, но они все необходимы и попытки "перепрыгивать" через них вполне может привести к полному ступору и непониманию не только того, как решить очередную задачу - но и даже непониманию того, в чем же собственно задача состоит и вообще, о чем идет речь. Двигаясь же по "ступенькам", 8-летний ребенок, например, вполне естественно осваивает материал, который раньше, когда не было придумано предварительных ступенек, предназначался 14-15-летним, а еще раньше, предполагался к изучению только в ВУЗе (см., например, А. Левенчук "Второклассный программист" и другие его статьи). Изобретение этих тренировочных "ступенек" произвело (и продолжает производить) революцию, которой пока никто не заметил, но которой мы намерены воспользоваться.

2.1. Начальный этап.

На начальном этапе (от 5 до 7-8 лет) - это робот по имени Робопчёлка (оригинальное название Bee-Bot, произв. Terrapin, США), похожий на игрушку, бегающую по полу, и понимающий всего несколько команд. Он программируется нажатием кнопок у него на спинке и доставляет детям много радости - они и не догадаются, что программируют что-то, если им не сказать. Пространство, по которому перемещается робот, может быть создано самими детьми, а может быть использована красивая карта его "мира": например, с цветами, на которые надо попасть, чтобы собрать нектар, и ядовитыми грибами, которых надо избегать при составлении маршрута. Или карта мира, и пчелки летают от континента к континенту, навещая своих подружек. Это может быть и огород, где прячется кролик Питер Пуш, а пчёлки помогают ему убежать обратно в лес. Таких картин-миров у меня много, так что занятия будут очень разнообразными. И кроме того, общение непосредственно с роботом комбинируется с другими играми и упражнениями. В качестве домашнего задания можно с помощью родителей придумать историю, в которой рассказать, куда и почему надо лететь робопчёлке, и нарисовать соответствующий маршрут; или придумать альтернативную концовку для какой-нибудь известной сказки (может быть, робопчёлка попадает туда и спасает принцессу? Давай-ка нарисуем на бумаге маршрут, по которому она улетала с принцессой, а потом на занятии выложим его из палочек и запрограммируем робопчёлку его пролететь!).

Этот этап актуален для начинающих знакомство с программированием детей от 5 до 7-8 лет. Для пятилетних детей - это основной курс, и многим эти занятия будут интересны и полезны достаточно долгое время - дети любят Робопчелок, с радостью путешествуют с ними по красочным "мирам", и помимо прочего, эти занятия развивают пространственное мышление и воображение.

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

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

2.2. Второй этап.

Следующий этап - программирование более сложных роботов, которые двигаются в мире, нарисованном на экране компьютера или планшета. Основное приложение на этом этапе - российская разработка Пиктомир (Научно-Исследовательский Институт Системных Исследований РАН), специально созданный для тренировки алгоритмического мышления у старших дошкольников и младших школьников. Его робота дети программируют, складывая последовательность картинок-команд с помощью мышки или сенсорного экрана. Здесь тоже многое напоминает игру, хотя задачи значительно сложнее, и более продвинутые из них позволяют освоить уже все фундаментальные принципы программирования - такие как циклы, подпрограммы и условное выполнение.

На этом этапе я использую и другие приложения, помимо Пиктомира. Вначале, до знакомства с Пиктомиром - это та же самая Робопчёлка, что и на этапе 1, только в виде приложения на планшете. Это идеально подходит для малышей, чтобы перейти от полностью физического робота на полу, к виртуальному на экране - при этом сохраняется его внешний вид, и все команды точно такие же. Их двоих можно программировать одновременно и сравнить, как роботы-близнецы пробегут свои маршруты на полу и на экране.

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

Переход от Робопчёлки этапа 1 к "виртуальной" Робопчёлке на планшете на этапе 2, и затем знакомство с первыми задачами Пиктомира и других приложений - полностью доступно детям от 5 лет. Дальнейшее обучение, т.е. полный объем этого этапа, более уместен для детей от 6 лет. Верхней границы возраста на этом этапе нет - его задачи будут интересны и более старшим детям, и подросткам, и даже взрослым, желающим освоить начальный курс алгоритмического мышления.

Видео ниже показывает, как выглядит Робопчёлка и Пиктомир. Реальные занятия, конечно, гораздо разнообразнее, чем эти кадры.

2.3. Третий этап.

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

Здесь уже много разных вариантов, но самый лучший - это программирование веселых историй, мультиков и игр в учебной системе программирования Scratch (создана в Массачусетском Технологическом Институте, США). Эта система программирования специально создана для обучения детей, и также основана на визуальном выкладывании программы из графических элементов. Детям она очень нравится, и они занимаются с удовольствием.

Переход на этот этап - совершенно безболезненный после этапа 2, для детей 7-8 лет и старше. Верхней возрастной границы нет: система программирования Scratch очень мощная и привлекательна визуально, и программировать в ней нравится и детям, и подросткам, и взрослым. Хотя дети постарше в принципе могут начать обучаться Scratch и с нуля, не проходя предыдущие этапы, тем не менее, для начинающих (даже взрослых!) всегда есть смысл сначала быстренько пройти этап 2.

2.4. Четвертый этап.

Путь для дальнейшего роста - использование не-визуального учебного языка программирования, где команды для исполнителя-робота набираются на клавиатуре в виде текста (соответственно, ребенок должен уметь, или научиться, печатать на клавиатуре). Этот путь открывается после этапа 2, и начать идти по нему можно в том же возрасте, что и начинать этап 3 (Scratch), либо вместо него, либо параллельно с ним. Преимуществом этого подхода является наличие очень хороших последовательных курсов "от простого к сложному", протестированных методически и направленных на систематическую тренировку программистского мастерства. Результаты на этом пути могут быть очень хорошими, однако процесс очень сильно похож на серьезную учебу (собственно, он таковой и является!) и, в отличие от Scratch, совсем не похож на веселую игру. Соответственно, требуется уверенность родителей, усидчивость и энтузиазм ребенка, и готовность всех преодолевать технические трудности - такие, например, как освоение редактора текста, постепенное освоение слепого десятипальцевого метода печати на клавиатуре и т.д. Я не намерен, по крайней мере пока, предлагать занятия по этому направлению; однако, как родителя, меня чрезвычайно интересует эта тема и скорее всего, своих детей я постараюсь в нее вовлечь. Так что, если вам интересны конкретные реализации этого направления, буду рад рассказать все, что знаю.

2.5. Пятый этап.

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

3. Детское программирование на английском языке

Для желающих потренировать свой английский, я предлагаю группы этапа 1 (Робопчёлки) и этапа 3 (Scratch) на английском языке. Группа Робопчёлки на английском подходит в первую очередь для детей (скорее всего, не раньше 8-9 лет), а группа Scratch на английском подходит и для взрослых, и для более старших детей (английский должен быть более продвинут, так что скорее всего, не раньше 9-10 лет).

В этих группах все общение происходит только на английском языке с момента, когда вы входите в класс. Это, разумеется, не значит, что английский участников должен быть свободным или безупречным - это просто значит, что нельзя переходить на русский, а нужно находить способ объясниться на английском, как бы неудобно это поначалу ни казалось. Скорее всего, это окажется совсем непросто еще и психологически - и надо быть к этому готовым - но именно в такой тренировке и состоит основная польза занятий в таких группах.

4. Дополнительно к программированию: что полезно

4.1. Математика
4.2. Логика

.