Автор: Иван Богданов, Технический писатель 

Девяностые, обычный лицей в Карелии. В классе информатики стоят новенькие компьютеры с Windows 95 — настоящая гордость школы. Рядом с ними доживают свой век старые КУВТ «Ямаха», на которых, собственно, нам и приходится работать. Новые машины трогать нельзя — «сломаете». Задание на очередной урок было вполне стандартным: написать программу, которая выведет на экран небольшую анимацию. Деревья там, домик, облака, какое-то движение — не важно, главное показать, что понял принцип. Проблема случилась банальная — я заболел, а домашнего компьютера, естественно, не было, как и у большинства одноклассников. 

Серверы в РФ, Европе и США

Виртуальные и выделенные серверы в ЕС, США и Турции от 238 ₽
Посмотреть

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

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

Сегодня такая история кажется чем-то из области фантастики или мазохизма. Современный разработчик за рабочий день обращается к Stack Overflow раз двадцать минимум, а у многих ChatGPT превратился либо в ментора, доступного круглосуточно, либо в персонального раба. Можно скопировать готовое решение, попросить ИИ объяснить чужой код, посмотреть видеотуториал на YouTube — вариантов масса. Советские программисты росли в другой реальности — без интернета, часто без компьютеров, и система обучения программистов выстраивалась под те условия, что были. И она работала.

ИТ-индустрия в России существует уже много десятилетий и развивается вполне успешно, но то, что происходило в процессе становления отрасли, часто теряется со временем: уходят люди, исчезают архивы, забываются детали. Эта статья — попытка зафиксировать один из важных эпизодов этой истории: как в СССР учили программированию школьников, когда компьютеров было катастрофически мало, а специалистов требовалось много.

В работе над материалом мы использовали воспоминания организаторов и участников тех событий (Л.В. Городняя "Откуда берутся хорошие программисты", М.Ю. Колодин "Летние школы юных программистов: зачем и как"), мемуары родителей (А.И. Цикоза о сыне Виталии), программную статью академика А.П. Ершова ("Программирование - вторая грамотность") и, конечно, учебник Г.А. Звенигородского "Первые уроки программирования" из серии "Библиотечка Квант" (выпуск 41, 1985). 

Когда профессии еще не было, а специалисты уже требовались

В семидесятых годах советская наука столкнулась с проблемой: компьютеров становилось больше, а квалифицированных специалистов не хватало, и было понятно, что чем дальше, тем острее будет становиться эта проблема. Внедрение АСУ на предприятиях, космическая программа, оборонные разработки требовали все больше программистов. Вычислительные центры при академиях и заводах работали в три смены, очередь на машинное время расписывалась на месяцы вперед. При этом обучение программистов в вузах шло по классической схеме: сначала высшая математика, потом теоретические основы, а к практике студенты добирались ближе к третьему курсу.

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

До начала пятидесятых годов профессии «программист» в СССР вообще не существовало. Ершов был одним из первых, кто получил специальное образование по этому направлению, окончив мехмат МГУ в 1954 году. Перед страной стояла задача: как готовить специалистов для работы, контуры которой еще не определены?

Нашлось нестандартное решение: начать учить программированию школьников со 2-3 класса. Академик Ершов называл это «второй грамотностью» — базовым навыком современного человека, таким же необходимым, как умение читать и писать. По всей стране находились энтузиасты, создавшие методологию обучения программированию для детей. Центром этой работы стал Новосибирск, где в Вычислительном центре Сибирского отделения АН СССР под руководством Ершова разработали учебные языки и систему, превратившуюся в основу массового обучения.

Как учить программированию, если компьютеров практически нет

Представьте ситуацию: 1979 год, в стране несколько тысяч компьютеров, большинство — в закрытых НИИ и военных организациях. Персональных ЭВМ практически нет. Интернета, разумеется, тоже. Но при этом компьютеры уже работают в аэропортах (система «Сирена» для оформления билетов), в редакторских кабинетах газет и журналов, управляют роботами на заводах, ведут поиск книг в библиотечных каталогах. Программисты нужны позарез, а у��ить детей программированию не на чем. Возникает закономерный вопрос: как учить, если машин нет?

Обучение выстроили вокруг «исполнителей» — воображаемых роботов, которые живут на бумаге и выполняют простые команды. В Новосибирске разработали целую систему таких исполнителей с говорящими именами: ДЕЖУРИК, МУРАВЕЙ, МАШИНИСТ, ЧЕРТЕЖНИК, МАЛЫШ. Каждый понимал свой набор команд и имел свою среду обитания.

Вот, например, МУРАВЕЙ — он ползает по клеточной доске размером 10×10 клеток и умеет выполнять всего четыре команды: ВВЕРХ, ВНИЗ, ВПРАВО, ВЛЕВО. За один «ход» сдвигается на одну клетку в указанном направлении. На доске могут лежать кубики с различными надписями или рисунками. Если МУРАВЕЙ натыкается на кубик, он начинает толкать его перед собой, пока не изменит направление движения или не упрется в край доски. Края доски считаются ограждёнными бортиками — попытка толкать кубики дальше вызывает сообщение об ошибке.

Ребенок выполняет программу на бумаге: чертит поле в тетрадке, рисует кубики, шаг за шагом прослеживает, как МУРАВЕЙ двигается и толкает кубики. Ни одного компьютера. Чистая логика и пространственное мышление. Когда программа работает на бумаге, её можно ввести в настоящую машину — если до неё удается добраться.

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

Для тех, кто дорос до настоящего программирования, придумали учебные языки Робик и Рапира. Робик был максимально простым — по сути, формализацией тех самых команд для бумажных исполнителей. Рапира оказалась серьезнее — полноценный язык программирования, но с русскими ключевыми словами и понятным синтаксисом. Когда в школах начали появляться первые советские персональные ЭВМ «Агат», для них создали систему «Школьница» — программную оболочку, которая понимала и Робик, и Рапиру, умела рисовать, воспроизводить музыку и включала десятки обучающих программ: от модели химической лаборатории до справочника по астрономии.

ЭВМ "Агат 7". Источник: Персональная ЭВМ "АГАТ"

Важный момент: когда дело доходило до настоящих компьютеров, школьники делали не учебные упражнения, а реальные продукты. Например, система «Бельчонок» для поиска книг в библиотечном каталоге — её разработали ученики под руководством преподавателей. Вот как это описывал Геннадий Звенигородский в учебнике 1985 года: работа велась в несколько этапов, школьники сами придумывали алгоритмы, тестировали, находили ошибки. И тут важный методологический момент — практика с первого дня, а не на выпускном курсе.

Кружки, журнал и летние школы: как работала воронка

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

С сентября 1979 года журнал «Квант» начал регулярно публиковать материалы для юных программистов. Это был не просто научпоп — полноценные уроки с задачами, объяснениями, примерами программ. Школьник из любого города мог выписать журнал и учиться самостоятельно. Аудитория измерялась десятками тысяч читателей. Потом появилась Заочная школа программирования при «Кванте» — следующий уровень, для тех, кто всерьез заинтересовался.

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

Михаил Колодин, участник седьмой Летней школы 1982 года, вспоминал про организацию: жили в общежитиях НГУ на Пирогова, там же была обязательная зарядка, обедали в столовой на Морском, а работа с компьютерами шла только в Вычислительном центре. Машинного времени катастрофически не хватало — на сто человек было несколько персоналок Apple и Olivetti. «Самым страшным наказанием для нас было: оставим без машинного времени», — писал Колодин.

Учить через абсурд и здравый смысл

Самое интересное в советской методологии обучения программированию — это не технические решения, а педагогический подход. Вместо сухих определений — игра, вместо формул — ситуации из жизни. Открываешь учебник Звенигородского, а там задачки про Винни-Пуха и кота Матроскина.

Например, чтобы объяснить разницу между вопросом, предписанием и утверждением (базовые понятия для понимания структуры программы), автор берет цитаты из детских книжек: «Какой он, этот слонопотам? Неужели очень злой?» — вопросы. «Позвони, пожалуйста, коту Матроскину» — предписание. «Кот Матроскин позвонить не може��. Он очень занят. Он на печи лежит» — утверждения. Девятилетний ребенок читает это и понимает сразу, без зубрежки терминов.

При этом авторы не боялись усложнять. Тот же Звенигородский вводит синтаксические диаграммы — графическое представление грамматики языка программирования. Штука непростая даже для студентов вузов, но если объяснить это через знакомые правила (как строится русское предложение, как читается математическая формула), а потом дать поиграть с диаграммами на простых примерах — школьник разбирается. И главное, начинает понимать не «как написать эту конкретную программу», а «как устроен любой язык программирования».

Звенигородский вел занятия для новичков по-особенному. Он нашел способ сделать обучение надъязыковым — учил сразу два разных диалекта Бейсика одновременно, в двух колонках на доске. Через сравнение двух реализаций школьники видели общие принципы, а различия помогали понять, что в языке существенно, а что — особенность конкретной системы.

Конечно, идиллией это назвать сложно. Доступ к реальным компьютерам оставался роскошью. В той самой новосибирской школе с «Агатами» на каждом столе учились единицы. Остальные довольствовались кружками, где на десять человек приходился один терминал, подключенный к большой ЭВМ. Машинное время выделялось по часам: написал программу на бумаге, проверил преподаватель, только потом можешь ввести ее в компьютер и посмотреть, работает ли. Современному разработчику, привыкшему к мгновенной обратной связи, такие условия могут показаться пыткой.

Мастерские вместо лекций

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

Тематика варьировалась от простых учебных программ до сложных системных разработок. Делали языки, операционные системы, редакторы. Много было игровых программ — их и писали, и играли в них. Колодин вспоминает: «Мои школьники справлялись со многими сложными вещами, например, реализациями языков Форт (на Ассемблере), Бейсик и Оккам (на Форте)». За две недели. Школьники писали трансляторы языков программирования.

Звенигородский был убеждён, что школьное программное обеспечение должны создавать сами школьники. Не взрослые для детей, а дети для детей. Этот принцип красной нитью проходил через всю систему — от включения школьников в оргкомитет до разработки компонентов «Школьницы». Система разрабатывалась силами студентов и школьников под руководством Звенигородского, и работа над ней была продолжена после смерти Геннадия Анатольевича. Весной 1985 года Государственная комиссия приняла её с небольшими замечаниями, а в резюме отметила: «Учитывая, что данная работа была выполнена в основном силами студенческой и школьной молодёжи, Комиссия рекомендует выдвинуть её на соискание Государственной премии им. Ленинского Комсомола».

Консультантами на Летних школах работали новосибирские школьники, недавние выпускники. Это был чистый peer teaching — люди, которые два-три года назад сидели на тех же местах, теперь помогали новичкам. Разница в возрасте составляла несколько лет, барьер между учителем и учеником практически отсутствовал, ведь «понедельник начинается в субботу».

Когда программирование становится образом жизни

Летняя школа была не только про программирование. Колодин вспоминает про костры и песни под гитару, про «литературное обеспечение ЭВМ» — так с иронией называли песни и стихи про программирование. На восьмой и девятой школах, проходивших в лагере «Сибиряк», ставили «полнометражные» компьютерные оперетты. Например, «Прекрасная Ада» (отсылка к Аде Лавлейс) — с ариями под гитару, костюмированным представлением на сцене, где в роли барона Фортрана выступал преподаватель. 

Традицией были конференции в начале и в конце школы. На первой школьники рассказывали о работах, выполненных дома до приезда. На второй — о том, что сделали за две недели интенсива. Эти конференции моделировали настоящие научные собрания. Часто возникали дискуссии. Колодин вспоминает, как защищал свою программу определения дня недели по дате и спорил о влиянии смены календаря в 1918 году на расчёты. Впервые в жизни девятнадцатилетнему пришлось отстаивать техническое решение в огромном зале перед взрослой аудиторией.

Что осталось от той системы

8 октября 1984 года умер Геннадий Анатольевич Звенигородский. 8 декабря 1988 года умер Андрей Петрович Ершов. Системе предстояло существовать без основателей.

Девяностые годы разрушили систему кружков и школ юных программистов почти полностью. Вычислительные центры закрывались или переходили на самоокупаемость, энтузиасты-преподаватели уходили в коммерческие структуры, финансирование испарилось. Методология обучения с использованием исполнителей канула в прошлое вместе с учебниками на русских языках программирования. К середине девяностых Летние школы практически перестали существовать. О них помнили, многие хотели продолжения, но только в 2001 году школы возродились на Алтае и с тех пор продолжают работать.

Некоторые идеи оказались живучими. Концепция учебных исполнителей всплыла позже в российских школьных учебниках информатики — правда, уже не как основной метод, а как один из вариантов введения в алгоритмику. Scratch, популярный сегодня язык для обучения детей программированию, построен на тех же принципах: визуальная среда, понятные команды, игровые задачи. Только вместо бумажного МУРАВЬЯ — анимированный кот, а вместо тетрадки — drag-and-drop блоки. Только вот системности той, что была в СССР, когда кружок в Новосибирске мог быть связан с заочной школой в Москве, а лучшие ученики со всей страны встречались на летних школах, — такой системности больше нет. Каждый сам по себе.

Эту статью мы писали не для того, чтобы сказать «раньше было лучше». Раньше не было лучше — раньше было по-другому. Просто важно зафиксировать этот опыт, пока живы люди, которые его помнят, пока доступны архивы и мемуары. Потому что история IT-индустрии — это не только история технологий. Это еще и история людей, передавших эти технологии следующему поколению. Иногда — через бумажный учебник и тетрадки в клетку.

Серверы в РФ, Европе и США
Виртуальные и выделенные серверы в ЕС, США и Турции от 238 ₽

Посмотреть