Уроки заочных школ программирования
Новосибирская школа программирования. Перекличка времен.

Уроки заочных школ программирования

В 1979–1982 гг. в журнале «Квант» в разделе «Искусство программирования» публиковались уроки Заочной школы юных программистов (ЗШП) и статьи по компьютерной тематике. Эта школа прошла успешно несмотря на значительные организационные и издательские сложности, выпустила множество квалифицированных специалистов и дала основу для всесоюзного школьного предмета «Основы информатики и вычислительной техники». Были организованы филиалы ЗШП в нескольких крупных центрах (Ленинград, пр.), проводились Летние школы юных программистов (ЛШ). Были выпущены методические и справочные пособия, учебники информатики. Однако ЗШП преподала множество уроков не только школьникам, но и ее организаторам. Автор, ученик ЗШП 1979–1982 гг., рассказывает о процессе, результатах, подводит некоторые итоги, как они видятся именно со стороны ученика и, впоследствии, преподавателя школы.

Однажды, в один из самых обычных дней сентября 1979 года, на самый обычный урок вошёл наш учитель математики, Михаил Сергеевич Маховер. В руках у него был свежий номер журнала «Квант». «В этом журнале появился новый раздел, — сказал он, — Я не очень в этом разбираюсь, но кажется, что это интересно, это может стать вашей будущей специальностью». И вместе с несколькими одноклассниками, а я тогда был в пятом классе, я стал изучать уроки Заочной школы, писать ответы в Новосибирский ВЦ СО АН. Этот день определил мою профессию и, в немалой степени, всю мою жизнь. И я благодарен Михаилу Сергеевичу за это. Равно как и моим родителям, поддержавшим это начинание и помогавшим в освоении учебного материала; я тогда был «чистым математиком» — занимался в пяти математических кружках сразу, а вот ЭВМ я впервые увидел и потрогал на работе у мамы, заведующей группой ИВЦ СЗРП. Одновременно со мной стали отвечать на задания ЗШП несколько одноклассников; однако до конца Школы добрались, увы, немногие.

В следующем (1980) году появились филиалы ЗШП, в том числе и в Ленинграде, в Институте авиационного приборостроения (ЛИАП, позже СПбГААП (Академия), а ныне СПбГУАП, Государственный университет аэрокосмического приборостроения). А ещё через год в ЛИАПе открылась очная школа. Впоследствии я поступил в тот же институт, чему школа программирования была непосредственной причиной. Основными ведущими в теперь уже очной школе стали энтузиасты школьной информатики Николай Николаевич и Галина Николаевна Бровины, под покровительством зав. кафедрой 44 (ЭВМ, ныне кафедра Вычислительных систем) М.Б. Игнатьева.

Но вернёмся к ЗШП. Её уроки публиковались почти в каждом номере журнала «Квант». Если не было уроков (декабрьские и летние номера), обычно были какие-либо обзорные статьи по разным темам, а в 12-х номерах — рассказы о Летних школах юных программистов в г. Новосибирске. Полный список материалов ЗШП приведён в приложении к этой статье.

Сейчас понятно, с каким трудом давались эти уроки. Сложность набора, нетипичного для физико-математического журнала, попытки вместить довольно-таки большой учебный материал, более удобный для полноформатных учебников, в несколько журнальных страниц — всё это давало не самый удачный результат. Было множество опечаток, причём в том числе и в правилах, и в примерах, что сильно мешало пониманию материалов. Я, например, иногда списывал конструкции своих программ с правил в журнале, подставляя нужные значения и переменные (собственно, так и предполагалось на первых порах), и однажды получил такой ответ от преподавателя: «Ответы этого урока не проверяются из-за ошибок в тексте урока в журнале». Таким образом сами учителя видели, что в учебном материале много неточностей, которые не дают возможности правильно понимать тему.

Впоследствии «Квант» больше не смог повторить такую Школу. Более того, ни один журнал, в том числе «Информатика и образование», не подняли проект такого масштаба. Представляется, что сейчас это невозможно: программирование стало слишком большим и сложным, а ограниченный объём журнальных публикаций, длительные периоды между отдельными выпусками журнала (типичный срок — месяц — слишком долог для поддержания постоянного обучения, теоретического и практического, для обеспечения активного роста ученика и его взаимодействия с учителем) не давали возможности правильно его преподать. Другие современные методы, например, веб-сайты, рассылки, тоже не решают проблему обучения. По-видимому, наиболее продуктивный на сегодня метод — дистанционное обучение через Интернет с помощью специальных программных средств. Однако тогда таких средств не было. Как и, практически, самого Интернета в России.

Тем не менее, было множество оригинальных и правильных находок. Прежде всего, весьма обоснованным, педагогически правильным, был подбор материала, его последовательность, выбор примеров. Многие уроки и примеры давались в игровой, весёлой форме, что облегчало освоение необычного материала. «Позовите, пожалуйста, кота Матроскина к телефону. — Кот Матроскин подойти к телефону не может, он очень занят, он на печи лежит...» — примеры предписаний и утверждений. «Если слово “караул” хорошенько подредактировать, получится “ура”» — эпиграф к обработке строк и т.п. При явной бедности графических устройств того времени графики и рисунки появились у нас с первых же уроков. А наглядность работы, вид результата для школьников очень важны. Принципиален тот момент, когда программист, особенно юный, видит: «Вот я написал, и вот оно ожило, оно работает».

Важно, что первая же статья А.П. Ершова и Г.А. Звенигородского посвящалась обоснованию, мотивированию программирования: «Зачем надо уметь программировать?» Таким образом, с самого начала мы жили с сознанием того, что занимаемся чрезвычайно полезным делом.

Удачным был выбор синтаксических диаграмм для объяснения синтаксиса изучаемого языка (поначалу — Робика и Рапиры, затем — Паскаля). Более того, в отличие от Н. Вирта, преподаватели ЗШП использовали овальные очертания для изображения переменных элементов и прямоугольные — для постоянных. Это просто и наглядно, лучше соответствует смыслу понятия.

Выбор языков программирования также был, безусловно, очень удачным. У нас не пошли по стандартным западным вариантам, а, тщательно проанализировав положение с языками, доработали их или разработали свои. Свои оказались даже лучше иностранных.

Вначале — краткое введение на небольшом учебном языке Робик. На нём дано общее понимание понятий программирования, первые конструкции. К моменту, когда ученик начинал испытывать нехватку выразительных средств, уже через четыре месяца, ему давался более мощный инструмент — «учебно-производственный язык Рапира».

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

Сама Рапира развивалась и менялась. То, что было описано в «Кванте», отличалось от предварительных версий, а реализации на различных компьютерах в разное время — тем более. Не все обозначения были удобными. Например, «!» для операции возведения в степень выглядит нелогично. Введённые в язык записи были неудобны в работе. Ограничение имён шестью символами является слишком сильным и мешает методически (и технологически) правильно разрабатывать программы. Ограничение длины чисел 12-ю цифрами не обосновано. Педагогически верным представляется использование различных символов для сравнения на равенство и присваивания, запрет использования ключевых слов языка в качестве имён переменных. По операторам Рапиры тоже есть замечания. Прежде всего, специальный знак «::» в операторе цикла смотрится весьма непонятно. В Рапире того времени было два способа вызова параметров — классический, со скобками (пустыми при отсутствии параметров), и дополнительный, в форме «.СБРОС» или «5.КРУГ», для процедур, имеющих не более одного параметра; представляется, что вторая форма была избыточной и только вносила путаницу в юные умы. Сокращения слов типа «КНЦ» для «КОНЕЦ» также не помогали: много букв на этом всё равно не сэкономить, а понимание страдает; поскольку человек воспринимает текстовую информацию не буквами, а словами, правильнее использовать привычные взгляду конструкции, распознаваемые целиком, как единое целое. Мощные структуры данных, кортежи и множества, делали язык весьма сильным. Помнится, даже были обсуждения, нужны ли в учебных языках мощные конструкции, отсутствующие в «реальных» языках, поскольку привыкший к такой роскоши выпускник может столкнуться с трудностями в последующей учёбе и работе.

Общий план изучения всех языков был примерно одинаковым: от простого к сложному. В то же время не хватало справочников, где вместе сводились бы правила языка. Фразы типа: «Сообщаем шестиклассникам эту формулу...» (например, для корней квадратного уравнения) создавали впечатление сложности используемого неизученного материала, особенно с учётом того, что на уроки ЗШП отвечали и более младшие школьники. От номера к номеру несколько менялся стиль записи программ, текстов уроков, заданий: они оформлялись по-разному, до курса по Паскалю практически никогда не использовалась структурированная запись «лесенкой», а иногда в текстах программ допускались переносы ключевых слов со строки на строку, что совершенно недопустимо. Хорошо, что при изучении геометрии давались и декартова, и полярная система координат, при рассмотрении хранения информации — и адресный, и ассоциативный поиск. Рассматривались приближённое решение уравнений (метод половинного деления, метод перебора с возвратом), работа с графами (простые, нагруженные графы, представление их в памяти ЭВМ; хотя изучение их было существенно неполным, но некоторое представление о теме давало).

После Рапиры был Паскаль — уже не просто как учебный язык, а как серьёзное средство для изучения важнейших концепций и конструкций программирования. На нём обучение шло до конца ЗШП и далее — во втором, дополнительном, курсе «Фразеология программирования (стандартные приёмы программирования)», который вёл замечательный преподаватель, интереснейший человек — Леонид Штернберг. Полезными оказались не только разбираемые в уроках примеры, но и чётко сформулированные правила программирования и организации работы.

Выбор Паскаля был сознательным, оправданным, чётко проработанным. Вообще, отношение к выбору методов и средств обучения в ЗШП и, в дальнейшем, в ЛШ было принципиальным, многократно серьёзно изученным теоретически и практически. В работах Г.А. Звенигородского и коллег рассматривались имеющиеся и требуемые характеристики языков, предназначенных для обучения и дальнейшей профессиональной деятельности, и по множеству критериев были созданы или доработаны несколько языков. Для них были разработаны соответствующие программы изучения и преподавания с должной методической и технической поддержкой.

Программы на Паскале публиковались более корректно, хотя были ошибки и в самом материале, например, при описании распечатки значений перечислимого типа (урок 16, «Квант» 11/1983, с. 43). В целом, качество и интенсивность уроков повысились, но меньше стало адаптированности к школьному уровню, всё изложение стало несколько более формальным и перечислительным. Опечатки остались; порой они описывались на той же странице урока, что и сама опечатка (например, «Квант» 1/1982, с. 52). Файлы вводились весьма сложно, использовали авторский «буферный элемент», и, насколько я видел, с использованием их у новичков было много проблем. То же относится и к динамическим структурам: типы указателей и примеры их использования давались с трудом. Параметры-процедуры и параметры-функции вводились без должного предварительного объяснения, а ведь сам факт возможности передачи программного элемента в качестве параметра в другой программный элемент — достаточно сложный для понимания момент. Здесь причина, по-видимому, в том, что писал это опытный программист, для которого такие конструкции были давно понятны, и не учитывался малый опыт учеников.

Понятие об отладке программ было введено в одном из начальных уроков. Речь шла в то время только о ручной прокрутке. Например, в пятом уроке (язык Рапира) использовались «таблицы имён», куда вписывались значения, присваиваемые переменным, при этом зачёркивались прежние значения. Этот момент, отличающий работу с именами в математике и программировании, был дан сразу и корректно. А вот методов и средств организации и автоматизации более полного тестирования, а тем более — доказательства правильности программ в базовом курсе не было совсем.

После цикла уроков по языкам в «Кванте» были выпущены методические пособия с более подробным и проработанным курсом, в частности, языка Рапира. Были и методические разработки, и статьи в других журналах, и книги — в частности, учебники программирования, основывавшиеся, к сожалению, не на Рапире, фактически реализованной на многих программно-аппаратных платформах (в том числе на ПЭВМ Агат и Ямаха, на ЕС ЭВМ и БЭСМ-6, и пр.), а на «алгоритмическом языке» (прозванном «Ершолом»), который так и не получил серьёзной практической поддержки.

Важнейшей характеристической особенностью Школ, как очных, так и, фактически, заочных, было привлечение самих школьников к проработке и разработке программных средств и, после прохождения первоначального обучения, к преподаванию. Школьники были и программистами, и консультантами.

Ещё один успешный результат ЗШП: надъязыковый подход. Мы практически с самого начала стали работать на нескольких языках: после быстрого прохождения Робика перешли к Рапире (т.е. уже знали, что языков несколько, много, и каждый для чего-то хорош, а для чего-то плох), а затем и к Паскалю. В дальнейшем на ЛШ была относительно большая свобода в выборе программных средств: можно было пользоваться разной техникой и разными системами программирования. Это очень важно; уверен, что нашим последующим прогрессом мы в немалой степени обязаны умению выбирать, которое в нас заложили с самого начала. Тот, кто пишет только на Бейсике (а это не редкость и в современных школах), заведомо не сможет достичь таких гибкости, производительности и качества работы, как это получалось на наших Школах.

Одним из результатов ЗШП и ЛШ стало приобщение выпускников и даже старших учеников к преподаванию информатики — в той же школе, в своих кружках. Например, автор этих строк, начав изучение программирования в пятом классе теоретически, а в седьмом — практически, с девятого класса стал вести свой кружок программирования в 11 школе Василеостровского района г. Ленинграда. И у меня было много учеников, с которыми до сих пор сохраняются добрые отношения как личные, так и профессиональные.

По результатам ЗШП и очных местных школ было выпущено немало учебной и методической литературы. Возможно, в будущем и об этом напишут историки.

Сейчас появляются статьи и реплики, где говорится о «провале информатизации школы по Ершову». Насколько обоснованы такие утверждения? Мне представляется, что такое резкое мнение принципиально неправильно. Конечно, сейчас понятно, что можно было бы построить программу лучшим способом. Но — в истории этого «бы» нет. Тогда этого сделать было нельзя. На понимание, на развитие нужно время и опыт. ЗШП и ЛШ как раз и были тем самым опытом, без которого невозможно было бы достичь требуемых результатов, по крайней мере, так, как они понимались. Сейчас пересмотру подвергаются базовые принципы тогдашней школьной информатики, в частности, знаменитое правило А.П.Ершова «Программирование — вторая грамотность». Сейчас, в XXI веке, это понимается иначе. Но тогда сделали всё, что могли, причём сделали хорошо. Указанная «информатизация по Ершову» начиналась с нуля; у нас в стране ещё не было реального масштабного опыта преподавания информатики в школах, не было учительских кадров, организационных, методических, учебных материалов, техники; всё делалось впервые. Так что и судить нужно не с позиций сегодняшнего дня, который своим существованием и обязан в значительной степени той информатизации, а сравнивая то, что было до Ершова и его коллег, и то, что стало после их работ. И Заочная школа — существенный, важнейший элемент этого большого вклада в развитие школы и общества.

Справочная информация

Авторы статей и уроков: А. Ершов, Г.Звенигородский, Н. Юнерман, Ю. Первин, А. Рар, В. Касьянов, А. Салтовский, Б. Бабаян, Е. Кузнецов, Л. Штернберг.

Выпуски журнала «Квант»:
09.1979 Представляем новый раздел «Искусство программирования».
А. Ершов, Г. Звенигородский. Зачем надо уметь программировать?
ЗШП. Урок 1. Законы программирования. Правила записи предписаний на языке Робик. (Г. Звенигородский)
ЗШП. Урок 2. Гибкие системы предписаний, синтаксические диаграммы и переменные поля. (Г. Звенигородский)

10.1979 ЗШП. Урок 3. Работа с памятью. Имена и их значения. (Г. Звенигородский)

11.1979 ЗШП. Урок 4. Арифметические предписания языка Робик. Условные и циклические предписания. (Г. Звенигородский)

12.1979 IV Всесоюзная летняя школа юных программистов

01.1980 ЗШП. Урок 5. Основные операторы учебно-производственного языка Рапира. (Г. Звенигородский)
А. Салихова, Н. Соколова. Графическая система Шпага.

02.1980 ЗШП. Урок 6. Описание и вызов процедур на Рапире.
(Г. Звенигородский)

03.1980 ЗШП. Урок 7. Функции, графика, локальные имена и тексты на Рапире. (Г. Звенигородский)
ЗШП. Урок 8. Множества и кортежи на Рапире. (Г.Звенигородский)
Олимпиада по программированию. (Оргкомитет)

04.1980 Ю. Первин, А. Салтовский. Память ЭВМ.

05.1980 Ю. Первин, А. Салтовский. Как работает процессор.

06.1980 А. Салтовский. Организация ввода и вывода в ЭВМ.

07.1980 ЭВМ на Олимпиаде.
Ю. Первин. Обработка протоколов соревнования по прыжкам в высоту.

09.1980 ЗШП. Урок 9. Циклы. (Ю. Первин)

10.1980 ЗШП. Урок 10. Программирование задач в полярной системе координат. (Н. Юнерман)

11.1980 ЗШП. Урок 11. Обработка текстов на ЭВМ. (Г. Звенигородский)

12.1980 V Всесоюзная летняя школа юных программистов.

01.1981 Ю. Первин. Зачем и как детей учат программированию?
Конкурс работ по программированию.
ЗШП. Урок 12. Ассоциативный поиск. (Ю. Первин, Н. Юнерман)

02.1981 ЗШП. Урок 13. Приближенное решение уравнений с помощью ЭВМ. (Н. Юнерман)

03.1981 ЗШП. Урок 14. Работа с графами. (Г. Звенигородский)

04.1981 Ю. Первин. Трехадресные, одноадресные и... безадресные машины.

05.1981 Г. Звенигородский, Е. Кузнецов. Что такое мини-ЭВМ?

07.1981 А. Салтовский. ЕС ЭВМ — семейство универсальных вычислительных машин.

08.1981 Б. Бабаян. Многопроцессорный вычислительный комплекс «Эльбрус».

09.1981 А. Рар. Какие бывают языки программирования.
Конкурс машинных рисунков.

10.1981 ЗШП. Урок 15. Основные понятия языка Паскаль. (Н. Юнерман)

11.1981 ЗШП. Урок 16. Условный оператор и оператор выбора. Операторы цикла. Процедуры и функции в Паскале. (Н. Юнерман)

01.1982 ЗШП. Урок 17. Массивы и записи в языке Паскаль. (А. Рар)

02.1982 ЗШП. Урок 18. Файлы. (А. Рар)
Добавление к уроку 18. Сортировки по текстовым ключам. Слияния. (Ю. Первин)

03.1982 ЗШП. Урок 19. Динамические структуры. (А. Рар)

04.1982 ЗШП. Урок 20. Параметры процедур и функций. (В. Касьянов)

05.1982 ЗШП (завершение 3-летнего цикла). Сортировки по текстовым ключам. Включение и распределение. (Ю. Первин)

06.1982 VI Всесоюзная летняя школа юных программистов.
(Г. Звенигородский)

08.1982 Ю. Первин. Однажды вечером в семье программиста.

10.1982 Стандартные приемы программирования (Фразеология программирования).
Урок 1. Счет по рекуррентным формулам. (Л. Штернберг)
Вокруг ЭВМ.

11.1982 Стандартные приемы программирования (Фразеология программирования).
Урок 2. Линейный поиск. (Л. Штернберг)

12.1982 Стандартные приемы программирования (Фразеология программирования).
Урок 3. Переработка массивов на месте. (Л. Штернберг)

01.1983 Стандартные приемы программирования (Фразеология программирования).
Урок 4. Синхронная и асинхронная обработка массивов.
(Л. Штернберг)

02.1982 Стандартные приемы программирования (Фразеология программирования).
Урок 5. Сколько будет 2х2 на ЭВМ, или Машинная арифметика и как с нею бороться. (Л. Штернберг)

03.1982 Стандартные приемы программирования (Фразеология программирования).
Урок 6. Настройка программы по параметрам. (Л. Штернберг)

Дополнительно:
Машинная графика, например, Ю. Котов. Фантазии ЭВМ.
Юмор (Квант улыбается).

С материалами этих статей можно сейчас ознакомиться, пожалуй, только на веб-сайте журнала «Квант», поскольку бумажные версии давно стали библиографической редкостью.

Интересные материалы по данной теме можно посмотреть также на сайте автора http://myke.da.ru .

Следующая статья сборника

Из сборника "Новосибирская школа программирования. Перекличка времен". Новосибирск, 2004 г.
Перепечатываются с разрешения редакции.