Самое трудное в образовательной практике -- это предложить какую-то связанную последовательность курсов. Так, курс алгоритмики в ПиктоМире -- это всего две недели, а курс алгоритмики с роботом на КуМире -- это ещё полгода, на уровне начальной школы. Что делать после этого?! Бросать информатику на пять следующих лет, потом добавить еще полгода какого-нибудь программирования на уровне средней школы, и опять бросать? Ниже -- мои соображения сегодняшнего дня, и более прагматичные: я постарался быть максимально приближенным к нынешним софтовым реалиям, а не изобретать новые обучающие среды и новые языки программирования. Прошлый раз я много более радикально фантазировал на эти темы примерно год назад --
http://ailev.livejournal.com/955671.html.
Главная мысль -- что нет никаких "одиноких курсов, сферических в вакууме". Это всё короткие (по сравнению с общим временем образования) ступеньки каких-то учебных многоуровневых лесенок, и нужно чётко понимать: что перед, и что после каждой ступеньки, и исходить из удивительной скоротечности каждой отдельной ступеньки.
Основной принцип этой "ступенчатости": решение множества задач для каждой "ступеньки", при росте как выразительных средств (от игрушечных языков до настоящих), так и сложности решаемых задач (по мере роста "настоящести"). Искусство тут -- как не застревать на отдельных ступеньках, так и не пытаться скакнуть через ступеньки (типа начинать обучать малолеток сразу Ершолу в КуМире без пиктографического языка из ПиктоМира, и Питону без Ершола).
1. Алгоритмика -- ПиктоМир.Это две недели, но без этой махонькой ступеньки малолеткам очень трудно прорваться к настоящей алгоритмике с использование текстового языка. Подробности --
http://ailev.livejournal.com/922715.html (и парочка видео с семинаров:
http://ailev.livejournal.com/966698.html,
http://ailev.livejournal.com/973947.html).
Это должен быть пиктографический язык, минимизирующий собственно "язык программирования". Исполнитель почти ничего не умеет делать, мир/обстановка крайне бедна. И это хорошо, это всего на пару недель поиграться, бедность тут не порок, а тщательно разработанное достоинство.
Дитёнка после этого соображает про последовательность команд, исполнителя, алгоритм и вспомогательный алгоритм, повторения и условия.
2. Алгоритмика -- нарисованный робот в КуМире.Это примерно полгода, никаких структур данных, и почти никакой численной математики (за исключением нескольких задач в самом конце курса -- на "радиацию").
Подробности --
http://ailev.livejournal.com/948015.html, а про особенности перехода от ПиктоМира к КуМиру я рассказал в
http://ailev.livejournal.com/1013690.html. Почему не страшно этому учить малолеток (ибо некоторые волнуются, что "у обученного этим страшным вещам дитёнка не будет детства") --
http://ailev.livejournal.com/966480.htmlДитенка после этого может писать простейшие программы на императивном языке со "структурным программированием", но ничего не понимает в структурах данных. Это должен быть Ершол, а не "настоящий язык программирования" -- т.е. сам язык программирования должен быть беден и минимален (зато русскоязычен, плюс крайне конкретизированная диагностика ошибок).
3. Алгоритмика -- embedded systems, настоящий робот LEGO.Правильно было бы оставить язык Ершол и среду КуМира, но нарисованного робота заменить на колёсного из LEGO. Я бы намеренно ограничился датчиком освещения, датчиками пульта управления (в качестве которого мог бы выступать смартфон с тачскрином, например), видеокамерой (тоже от смартфона) и двумя колёсами как эффекторами. Это я так учитываю свою неудавшуюся попытку сразу скакнуть через несколько ступенек (
http://ailev.livejournal.com/983196.html).
Примерная последовательность серий задач курса:
-- расчёты скорости передвижения при параллельной работе колёс по прямой (при этом колёса будут разных диаметров – маленькие, большие и очень большие)
-- расчёты скорости передвижения при поворотах разного радиуса (змейки), также при разных колёсах.
-- калибровки невязки между колёсами и прохождения сложных маршрутов
-- алгоритм ПИД и прохождение по нарисованной кривой. Калибровка алгоритма (разные кривые). Это традиционное первое соревнование роботов.
-- пульт дистанционного управления (там много особенностей, ибо управление должно быть пропорциональным)
-- подключение телефона с видеокамерой, прохождение по нарисованной пунктирной линии – это традиционное второе соревнование роботов.
-- повторение всего предыдущего набора задач для Python (меняем язык, но оставляем предметную область: просто повторяем все задачи, формулируя их на "настоящем языке программирования" -- понятно, что этот Python практически не будет использоваться в части его структур данных, это пока алгоритмика).
Тренируется:
-- плавающая арифметика (хинт: в начальной школе этого нет)
-- математика обороты-диаметры-пути-скорости, коэффициенты (ага, понятие "коэффициента" в начальной школе -- это не так просто)
-- освоение разных исполнителей (датчики освещенности, пульта управления, видеокамера; эффекторы – колёса и дисплей робота)
-- пропорциональность (ПИД и работа с пультом), реальное время
-- разборки с пикселями при работе с видео
В итоге -- понимание, как программируются современные механизмы (embedded systems), а также переход к относительно современному языку/среде программирования (Python). Но это только алгоритмика, ибо ни о каких структурах данных речи ещё не идёт.
4. Информатика = алгоритмика + структуры данных.Берётся какая-то оффлайновая игра, и к ней пишутся скрипты на Python -- моды, NPC и т.д.. Мир опять становится "нарисованным", но уже 3D, и отнюдь не "простым": богатые структуры данных нужны именно для представления сложного мира -- это совсем по-другому "интересно", нежели какие-то бедные "нарисованные миры" в курсе алгоритмики, что я отмечал при выборе робототехники на третьей ступеньке в
http://ailev.livejournal.com/967480.html. Интерфейс скриптования игр содержит большое количество развесистых структур данных, и дитятко учится с этими структурами данных работать. За идею спасибо
justy_tylor. Другим кандидатом в языки выступал Lua, но целью данного "семестра" является уже не "алгоритмика", а разбирательство со структурами данных -- поэтому Python, в нём это побогаче будет. Но недостаточно богато, чтобы вляпаться в "перескок через ступеньку сложности" и попасть в какой-нибудь материал, доступный только для студентов (не забываем, что мы учим деток, это даже не старшая школа!).
Далее -- можно повторить всё то же самое для какой-то из MMORPG (программирование-в-большом!), и даже можно поменять язык программирования (ибо к этому моменту будет опыт как смены языка, так и смены "мира/исполнителей", хотя и по отдельности -- и речь идёт о таком же скачке, только "комбинированном").
5. Информатика как таковая -- с выходом на программную инженерию.И только теперь можно думать о лингвистике, компиляторах, базах знаний/онтологиях и прочих специфических задачах. Ну, и об инженерии (требованиях, архитектурах и т.д.) тоже позже (см. последовательность, которую я предложил в постинге "верхнее образование инженеров-программистов"
http://ailev.livejournal.com/937201.html).
Увы, учебный софт и наборы задач существуют пока только для первых двух ступеней, а вот для третьей и четвертой -- придётся изобретать по ходу дела, и срочно (см.
http://ailev.livejournal.com/1020631.html). Для пятой -- пока даже не обсуждаем.