Программирование для математиков, 35 лет спустя

Мои обобщающие комментарии к докладу А.Г.Кушниренко по преподаванию программирования в детских садах, школе и вузе. Выводы банальны, но реализация этих выводов обычно нетривиальна:-- сам ход на "сначала обучить школьников/детсадовцев базовым навыкам, а затем поднять курс до школьного/вузовского уровня" вместо "опустить вузовский курс куда-то вниз". Навыки эти нужно очень точно определить, и не двигаться дальше, пока в этих навыках не появится беглость.-- понимание, что без минимального времени на прохождение минимального набора задач ("сержантский метод") не обойтись. Если времени мало, то ничего не получится, можно это время на обучение вообще не тратить, результат будет тот же ("ничего не умеют"). Это время нужно узнать, и жёстко возражать предложениям научить за меньшее время.-- без надлежащего моделера (языка!) и набора задач базового уровня с этим моделером (и автоматической проверкой решения) ничего не получится, решать нужно основную задачу, а не задачу по освоению моделера/языка. Ну, и работу учителя автоматизировать можно, работу ученика автоматизировать нельзя -- поэтому работу учителя нужно автоматизировать! Только blended learning, без компьютерной среды нельзя!В посте ссылки на видео-слайды доклада и дополнительную литературу.

Анатолий Георгиевич Кушниренко выступил на Лебедевских чтениях с лекцией "Программирование для математиков, 35 лет спустя" (видео https://vimeo.com/553810189, слайды https://yadi.sk/i/F6e33aVANX3J3g). Лекция начинается с того, что "в школьной информатике мы были неправы" (а его учебника было издано 9.5 млн экземпляров!) и далее он даёт несколько очень ценных методических замечаний, которые интересны отнюдь не только для преподавания информатики.

У команды "Аттик" мехмата МГУ (лидерами там были А.Г.Кушниренко и Г.В.Лебедев, помогали им Эпиктетов, Леонов, Варсанофьев, Дымченко и ещё несколько мехматовских студентов) успешно с 1985 года шёл курс программирования для студентов, для него был написан учебник "Программирование для математиков" 1986 года (выпущен как раз 35 лет назад, https://yadi.sk/i/virGAvARqqtMhQ). Но этот же курс не был слишком успешен в школе по нескольким причинам, причём на выяснение причин ушло несколько десятков лет:
1. В студенческом курсе на базовые операции программирования отводилось 16 часов, в школьном курсе -- существенно меньше. Банально не хватало времени для практики.
2. Средство моделирования предметной области (школьный язык программирования/Ершол) было неадекватно, там был сложный синтаксис для базовых понятий

Когда с этим разобрались, то задача была сформулирована другим образом: не опустить университетский курс в среднюю школу, а поднять курс для дошкольников в начальную школу -- и навыки в объёме ОГЭ по информатике закрыть уже в начальной школе. И этот второй заход оказался успешным!

В лекции говорится, что у людей от 6 до 35 лет основные операции программирования осваиваются за примерно одинаковое время: от 20 часов у первоклассников до 10 часов у имеющих высшее образование. Разброс в зависимости от возраста/жизненного опыта есть, но он крайне невелик. Удивительно, но даже "последовательное выполнение операторов" оказывается тем навыком, которым нужно овладеть для уверенного программирования, люди в этом путаются на начальной стадии! На это нужно время! В школьном курсе информатики сейчас примерно 105 часов, из них примерно 20 часов отводится на всё программирование в целом. И на установку базовых навыков тупо не хватает времени. На мехмате первые 4-5 недель из 14 тратились на освоение азов, это 2 часа лекций и 2 часа семинара в неделю - 16-20 академических часов. В школе столько отводится на все программирование. На мехмате первые 4-6 часов студенты составляли программы из готовых перфокарт (которые нужно было просто набрать в программу в правильном порядке, и дальше эта программа могла быть исполнена компьютером) - в школе сразу начинался КуМир или Паскаль или Бейсик. Поэтому у половины успешно поступивших на мехмат первокурсников (это не любые школьники с улицы!) попытка сформулировать алгоритм нахождения максимального из трёх чисел заканчивается неуспехом. Школьная информатика в части обучения программированию сегодня не работает.

Вот это "достаточно времени на решение задач в базовых навыках" было приведено как общеметодический принцип:

  • если ребёнок сам не напишет 200 строк, то он писать не сможет, даже свою фамилию
  • если нужно научить ребёнка считать в пределах 50, то нужно решить порядка 100 примеров на сложение
  • если нужно научить ребёнка считать в столбик, нужно решить ещё 200 примеров

Для программирования нужно составить 100 программ за 10 уроков, среда моделирования должна это предоставлять, и преподаватель не должен умереть (автоматизация проверки).

Увы, среда моделирования предметной области программирования, то есть IDE на базе алгоритмических языков текстовых (Ершол/КуМир, PascalABC и т.д.) или тайловых (Scratch) не позволяет быстро составить 100 программ:
-- на базовые принципы программирования навешивается знание синтаксиса среды моделирования, и овладение синтаксисом требует дополнительного времени. Поэтому пришлось изобрести ПиктоМир, где синтаксис был минимизирован даже по сравнению с тайловыми языками ("супертайловый язык")
-- банально нужно нажимать много кнопок, соответствующих буковкам. В докладе приведено решение "самой трудной задачи из ОГЭ по информатике" из 7 строк из 20 символов в ПиктоМире, а в КуМире это втрое больше строк и несравнимо больше букв! Они несравнимы просто по числу операций руками, требуемых для записи решения и по компактности оценки самого решения при взгляде на него!

Как стал выглядеть нынешний вузовский курс программирования? В текущем учебном году вузовские студенты группы Аттик получают 405 заданий по составлению программ. Из них:

  • 130 заданий в системе ПиктоМир (упрощённая среда моделирования спецсимволами),
  • 170 заданий в системе ПиктоМир-К (среда моделирования, поддерживающая как спецсимволы, так и Ершол),
  • 105 заданий в системе КуМир (полноценное IDE более-менее традиционного языка программирования).

И навык программирования/алгоритмики у выпускников после этого курса есть!

Что нужно извлечь из этого доклада?
-- сам ход на "сначала обучить школьников/детсадовцев базовым навыкам, а затем поднять курс до школьного/вузовского уровня" вместо "опустить вузовский курс куда-то вниз". Навыки эти нужно очень точно определить, и не двигаться дальше, пока в этих навыках не появится беглость.
-- понимание, что без минимального времени на прохождение минимального набора задач ("сержантский метод") не обойтись. Если времени мало, то ничего не получится, можно это время на обучение вообще не тратить, результат будет тот же ("ничего не умеют"). Это время нужно узнать, и жёстко возражать предложениям научить за меньшее время.
-- без надлежащего моделера (языка!) и набора задач базового уровня с этим моделером (и автоматической проверкой решения) ничего не получится, решать нужно основную задачу, а не задачу по освоению моделера/языка. Ну, и работу учителя автоматизировать можно, работу ученика автоматизировать нельзя -- поэтому работу учителя нужно автоматизировать! Только blended learning, без компьютерной среды нельзя!

Дополнительная литература к докладу:

  • Среда ПиктоМир https://piktomir.ru/ и методические материалы к ней https://piktomir.ru/method
  • Обобщение на другие предметные области: мои посты по тренажёру клуба одиноких мозгов сержанта Солта (развитие беглости мышления с опорой на тренажёры), https://ailev.livejournal.com/1287293.html
  • ещё одно обобщение, но отходящее от базовых операций и спецмоделеров, хотя и очень близкий по тематике материал про "мышление письмом/моделированием" https://ailev.livejournal.com/1513051.html и ход на "мышление кодированием в IDE, мышление письмом в IWE", https://ailev.livejournal.com/1515735.html

UPDATE: Комментарии в фейсбуке -- https://www.facebook.com/ailevenchuk/posts/10221091877540637

UPDATE: Примечание Анатолия Кушниренко. Продолжатели группы Аттик (ныне это отдел учебной информатики НИИСИ РАН, в основном выпускники и студенты мехмата), из года в год ведут вводные курсы программирования на мехмате МГУ и в «Институте детства» МПГУ — лектор и автор курсов — А.Г. Леонов (в МПГУ нас привлек Алексей Семенов, за что ему огромное спасибо, работая одновременно на трех факультетах МПГУ мы многому научились).
Три уточнения к комментарию А. Левенчука. 1) В сообщении А. Кушниренко упоминался годовой вводный курс программирования в «Институте детства» МПГУ (это будущие педагоги начальной шкоды и детского сада). 2) Важнейшее свойство среды ПиктоМир-К это не столько одновременная поддержка двух представлений программы (спецсимволы и Ершол), сколько «тайловость» — пиктограммный ввод программ и отсутствие возможности допустить синтаксическую ошибку. 3) Для зачета студенты должны были по каждой теме сдать не менее 80% задач, то есть решить чуть больше 300 задач из 405 задач, предложенных студентам в течение года.
UPDATE2 от АГК: Перфокарты были не от хорошей жизни. В 1979 году на мехмате никаких терминалов не было, была ЭВМ АСВТ со считывателем перфокарт и АЦПУ. Спустя несколько лет мы заработали на ЗИЛе пару СМ-4, раздобыли а/ц терминалы, и на первых занятиях заменили перфокарты нами же придуманными практикумами, к 1986 появился Фортран-практикум и появилась возможность на экзамене по программированию на втором курсе включить в билет 2 задачи на Фортране, которые нужно было
решить практически, на компьютере, в первые 45 минут экзамена. Тем самым полугодовой курс стал вполне практическим.

Источник: https://www.facebook.com/ailevenchuk/posts/10221091877540637