алг Найти закрашенную клетку
. дано | Робот в левом нижнем углу прямоугольного поля, одна клетка которого закрашена
. надо | Робот в закрашенной клетке
нач
. нц пока не клетка закрашена
. . нц пока не справа стена и не клетка закрашена
. . . вправо
. . кц
. . если не сверху стена и не клетка закрашена
. . . то
. . . . вверх
. . . . нц пока не слева стена
. . . . . влево
. . . . кц
. . все
. кц
кон
Я в тихом изумлении, ибо он написал уже штуки четыре подобных программы (то есть свободно работает с вложенными циклами и сложными условиями), что для моего разумения является безусловным достижением учебной методологии -- дитятке-то исполнилось девять буквально пару месяцев назад, третий класс у него еще впереди. Вот мои заметки по тому, как это получилось:
1. Главный трюк: использование сначала Lightbot и Пиктомира (http://ailev.livejournal.com/922715.html, в комментах ссылка на лайтбот, но заодно прошли несколько первых задач lightbot 2 --http://armorgames.com/play/6061/light-bot-20) как подготовительных упражнений. Без них второкласснику одолеть школьный алгоритмический язык бы не получилось -- одновременно разобраться с синтаксисом и семантикой было бы запредельно сложно. А так это оказался на первых уроках просто чуть-чуть более сложный синтаксис управления уже привычным роботом (хотя команды робота другие, но это оказалось непринципиальным).
2. Наличествующий навык работы с компьютером (печать текстов, включая владение cut/paste, перетаскивание мышкой окон и т.д.). Как я понимаю, отсутствие этого вполне могло бы быть запретительным при переходе от графического интерфейса к набору текста программы. А так это оказался опять же "просто очередной редактор текстов".
3. Использование "сержантского метода" (это слова академика А.П.Ершова, объясняющие принципы образования на мехмате МГУ, много лет дававшие отличные результаты). Если кратенько -- то выполнение большого числа упражнений, упор не на "понять", а на "набить руку". Я писал об этом немного тут: http://ailev.livejournal.com/907435.html
Дитенка проходил Lifebot уж насколько мог, и все детские уровни Пиктомира, а затем пошёл выполнять все подряд задачи из http://server.179.ru/wiki/?page=DenisKirienko/Kumir. Эти задачи гениальны тем, что проверяются на наборе тестов (восемь тестов на одну задачу -- это, скорее норма, а четыре теста -- это минимум). Тесты составлены так, что адресуют основные ошибки (например, корректность работы на поле в одну клеточку, или с целевой позицией в углу поля, или при разных поисках нахождение робота и справа и слева от цели и т.д.).
Собственно, на сегодня дошли до упражнения H из восьмого урока этой серии -- без пропусков задач. "Решать все доступные задачи без пропусков" -- это есть главный метод обучения. Успешность обучения определяется не тем, что ребенок сказал по какому-то объясняемому моменту "я понял!" и продемонстрировал понимание на одной задаче. Нет, успешность обучения определяется тем, что это "понял" закрепляется на уровне рефлексов мозга: решается много специализированных задач (не путать с "решается одна большая комплексная задача").
Если решать одну большую комплексную задачу, то тренируется совсем другое, нежели во множестве специализированных мелких задач. В сотне комплексных задач какой-то навык будет протренирован 100 раз, а какой-то встретится лишь в пяти задачах. Поэтому речь идет не просто о длительном напряжении мозгов на решении задач данной предметной области, а именно о тренировке отдельных действий (даже не тренировке комбинирования этих действий). Я понимаю, что по описанию это весьма походит на нелюбимые всеми "тесты", но уж поверьте -- это я про другое.
Хорошо это описывается в книжке по обучению игре на пианино: при разучивании произведения совершенно бесполезно пытаться его играть много раз подряд. Нужно играть много раз подряд только те фрагменты, на которых реально заплетаются пальцы (а их обычно не так много). Но эти фрагменты реально нужно играть много раз, это ведь тренировка. Так и тут: комбинировать навыки в сложных задачах хорошо только тогда, когда каждый из этих навыков натренирован так, что его использование проходит незаметно.
4. Жена тем же сержантским методом учила дитятку математике (это требует отдельного рассмотрения, и я никак не раскручу ее на запись метода -- но она существенно использует то, что до сих пор помнит, как ей "ставили мозги" после перехода в физматшколу). Дитятка сейчас решает задачи примерно на середину третьего класса по методам всех основных курсов, т.е. и Гейдмана, и Петерсон, и Истоминой, и Моро -- это только те фамилии, которые я запомнил. Но по факту там фамилий авторов больше, ибо под разные умственные затыки использовались специальные наборы задач под эти затыки, которые были доступны только в более-менее редких книжках. Так, затык на "косвенную форму" (например, дети не могут прорваться через слово "это" в понимании смысла фразы “в вазе 6 леденцов, это на 2 больше, чем шоколадок”) адресуется специально только в задачнике какой-то одной тётеньки, а в основных задачниках это размазано по "комплексным задачам", так что при встрече каждого такого затыка происходит его распознавание, а затем дитятке даётся дополнительно специализированная серия задач. Плюс в силу "многокурсовости" каждая задача решается разными методами (разные курсы подразумевают еще и составление разных схем решения -- так что идёт тренировка еще и на разнообразие способов решения).
Как эта матподготовка сказалась на программировании?
а) было полное понимание сержантского метода со стороны дитенки: что от решения всех задач подряд увильнуть не удастся, задачи могут только добавляться, но не отменяться.
б) сложные условия (те самые "справа стена и не клетка закрашена") практически не пришлось объяснять, и число ошибок в них было практически нулевым. А ведь я хорошо знаю, что составные условия начинающим программистам даются особо трудно.