ailev.ru

4 сентября 2012 · Запись

Образовательные ступеньки в информатике для малолеток

Самое трудное в образовательной практике -- это предложить какую-то связанную последовательность курсов. Так, курс алгоритмики в ПиктоМире -- это всего две недели, а курс алгоритмики с роботом на КуМире -- это ещё полгода, на уровне начальной школы. Что делать после этого?! Бросать информатику на пять следующих лет, потом добавить еще полгода какого-нибудь программирования на уровне средней школы, и опять бросать? Ниже -- мои соображения сегодняшнего дня, и более прагматичные: я постарался быть максимально приближенным к нынешним софтовым реалиям, а не изобретать новые обучающие среды и новые языки программирования. Прошлый раз я много более радикально фантазировал на эти темы примерно год назад -- 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). Для пятой -- пока даже не обсуждаем.

Читать обсуждение →