Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Второклассный программист

Итак, можно подвести некоторые итоги. Сегодня дитенка сам написал вот такую программу:

алг Найти закрашенную клетку
. дано | Робот в левом нижнем углу прямоугольного поля, одна клетка которого закрашена
. надо | Робот в закрашенной клетке
нач
. нц пока не клетка закрашена
. . нц пока не справа стена и не клетка закрашена
. . . вправо
. . кц
. . если не сверху стена и не клетка закрашена
. . . то
. . . . вверх
. . . . нц пока не слева стена
. . . . . влево
. . . . кц
. . все
. кц
кон

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

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 больше, чем шоколадок”) адресуется специально только в задачнике какой-то одной тётеньки, а в основных задачниках это размазано по "комплексным задачам", так что при встрече каждого такого затыка происходит его распознавание, а затем дитятке даётся дополнительно специализированная серия задач. Плюс в силу "многокурсовости" каждая задача решается разными методами (разные курсы подразумевают еще и составление разных схем решения -- так что идёт тренировка еще и на разнообразие способов решения).

Как эта матподготовка сказалась на программировании?
а) было полное понимание сержантского метода со стороны дитенки: что от решения всех задач подряд увильнуть не удастся, задачи могут только добавляться, но не отменяться.
б) сложные условия (те самые "справа стена и не клетка закрашена") практически не пришлось объяснять, и число ошибок в них было практически нулевым. А ведь я хорошо знаю, что составные условия начинающим программистам даются особо трудно.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 44 comments
А после просмотра пути робота из приведённого примера его ничего не смущает?
А что его должно смущать? Робот обегает всё поле, находит в нём закрашенную клетку, в том числе обнаруживает ее во всех углах поля, при этом не разбивается.

vvagr

7 years ago

ailev

7 years ago

"Если у меня много кц есть, я имею право носить малиновые штаны"

Зачем сокращения "нач", "кон". Почему нельзя написать по-человечески "начало", "конец" ?
Лет двадцать назад по поводу Ершола задавали много больше вопросов, ибо язык был тогда очень свежим и его много обсуждали. За ответами вам нужно сходить в дискуссии тех лет, ответы ведь есть.
Я давно уже хочу найти какой-нибудь аналог Демидовича для программирования. Чтобы такой один сборник с огромным количеством задач. Именно для «набивания руки».
У меня эта проблема поиска нового задачника будет у меня буквально этой осенью: когда кончатся все 20 уроков из найденной мной школьной подборки -- ибо сейчас идет уже восьмой урок...

При этом вопрос в моём случае очень хитрый. Так, десятичные дроби дитятке будут рассказывать только через год -- в этом все учебные планы разных авторов единодушны. Так что никаких real. Ну и таких странных для взрослых студентов ограничений набирается неожиданно много...

otstavnov.com

7 years ago

ailev

7 years ago

otstavnov.com

7 years ago

ailev

7 years ago

otstavnov.com

7 years ago

ailev

7 years ago

otstavnov.com

7 years ago

vvagr

7 years ago

ailev

7 years ago

otstavnov.com

7 years ago

Deleted comment

ailev

7 years ago

Deleted comment

ailev

7 years ago

_blib

7 years ago

ailev

7 years ago

Deleted comment

ailev

7 years ago

Видели?

kmmbvnr

7 years ago

Re: Видели?

otmenych

7 years ago

Re: Видели?

ailev

7 years ago

Почти двадцать лет назад, в начальной школе, я подобные штуки писал на отцовском калькуляторе Б3-34. (-: (Мне даже потом подарили МК-52, видя мою увлечённость.) Опираясь исключительно на статьи в разных журналах, половину которых нашёл на помойке во дворе недалеко от школы. HEX-представления некоторых команд, к сожалению, помню до сих пор. (-:
В третьем классе я переключился на Си, записавшись в кружок во Дворце Пионеров. Но никаких особенных талантов в программировании я за собой никогда не замечал. Да и сейчас программирую только по нужде, но из-за лени больше стараюсь связывать между собой разные готовые решения, поэтому и большими достижениями похвастаться не могу.
(А пятый и шестой класс вообще, страшно сказать, провёл в школе с очень сильным и суровым гуманитарным уклоном. Это была одна из новомодных "классических гимназий", появившихся в начале 90-ых.)

Так что, на мой взгляд, здесь всё упирается только в заинтересованность. Ничего сложного для понимания в этом возрасте -- нету. Во всяком случае, поделиться опытом и обсудить нюансы насилования калькуляторов (типа знаменитых игр со "ЗГГОГ"ами) со сверстниками во дворе было вполне себе можно.
Соглашусь. Я в 6 лет резво писал на BASIC'е довольно сложные программы, и пытался изучить Assembler, но видимо для шести лет он был весьма сложен :) Других языков на моем "Апогей БК-01Ц" не было. А в 12 лет уже перелез на PC и лет в 14 занялся разработкой разношерстного софта на заказ.
С процедурным программированием в раннем возрасте сложностей не припоминаю. Было очень интересно.

ailev

7 years ago

asocialpsihopat

7 years ago

Deleted comment

asocialpsihopat

7 years ago

Deleted comment

asocialpsihopat

7 years ago

Deleted comment

ailev

7 years ago

Среда для изучения объектно-ориентированного программирования. http://www.alice.org/
Это по традиции позиционируется для студентов, а не школьников. Для студентов разных сред много. Та ж Схема когда-то именно для студентов позиционировалась, тот же Сквик.

Меня тут больше наборы задач для школьника, а также ненапряжный IDE интересует, а не вообще любые учебные среды. Вон, Скретч доступен и популярен: ну, и что с ним делать?! Тоже ведь объектный, и для школьников. Но внятного курса с пониманием, чему учим, для скретча я не знаю (хотя, может, где-то и есть).

dborisog

7 years ago

ailev

7 years ago

ailev

7 years ago

А PascalABC.NET не смотрели? Он идет с задачником, часть задач построена на исполнителях. В том числе есть и Робот, аналогичный КуМировскому.
Все задачи, в том числе основанные на исполнителях - проверяются автоматически.
Я со своим детишкой пытаюсь заниматься, но он старше намного, в седьмой класс пошел.
Погляжу, конечно. Но, если честно, никакой принципиальной ментальной разницы между Паскалем и Школьным алгоритмическим языком я не усматриваю. Проблема с проверками в КуМире тоже более-менее решена (хотя до удобной автоматизации еще есть куда двигаться).
> дитятке-то исполнилось девять буквально пару месяцев назад

Это нормально, я в 10 лет уже наяривал на МК-61. Главное, чтобы желание учиться у ребёнка было. А если у родителей есть ещё желание учить, то это вдвойне прекрасно.
Вот желания учиться у ребенка нет, это только у родителей желание учить. Вместо МК-61 из гаджетов есть PSP (как и у всех) -- и считать ли это счастьем и прогрессом, или несчастьем и регрессом, я даже не знаю. Я вот вырос во времена, когда даже калькуляторов еще не изобрели, а писали исключительно перьевой ручкой, которую нужно было макать в чернильницу. МК-61 это ой-ой какой прогресс с тех пор был...
я чето не въеду зачем это нада учить ?
вернее, я понимаю зачем, но вы вроде в Москве где есть куча профессиональных учителей, физмат школы, кружки программирования и т.д., зачем вы занимаетесь этим сами ?
Кто сказал, что только сам? Со мной работают лучшие профессиональные учителя из лучших физматшкол, а также лучшие методисты из всех имеющихся. У меня давние связи в этих кругах, и долгая история работы со школьной информатикой. Просто раньше у меня не было сына, которому всё это можно было бы предъявить, а чужие дети меня мало интересовали для личного их обучения. А теперь сын есть, я им и занимаюсь.