Язык сломаешь. Советские алгоритмические языки для обучения программированию

в 9:00, , рубрики: ruvds_статьи, алгоритмические языки, Алгоритмы, Блог компании RUVDS.com, Программирование, СССР, Читальный зал, языки программирования

Язык сломаешь. Советские алгоритмические языки для обучения программированию - 1


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

▍ Робик

Этот язык со смешным названием придумали в 1975 году основоположник советской школьной информатики Г.А. Звенигородский и академик А.П. Ершов для обучения основам программирования детей в возрасте 8—11 лет. «Робик» использовался в Харьковской «Школе юных программистов», занятия в которой проводил сам Геннадий Анатольевич Звенигородский. В 1977 году разработчик языка перебрался в Новосибирск, где устроился на работу в Вычислительный центр Сибирского отделения АН СССР, после чего уроки для юных программистов продолжились уже в этом городе в формате воскресной школы и летних образовательных лагерей.

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

Язык сломаешь. Советские алгоритмические языки для обучения программированию - 2

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

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

Прежде чем школьник начнёт отдавать команды исполнителю, необходимо запустить хотя бы один экземпляр этого исполнителя и опционально присвоить ему уникальное имя (этот параметр обязателен только если оператор работает с несколькими экземплярами исполнителей одного типа). Делалось это с помощью команды ВКЛЮЧИТЬ, например, так:

ВКЛЮЧИТЬ ОБХОДЧИК:МИША; 

Эта команда запускала экземпляр исполнителя «ОБХОДЧИК», которому присваивалось уникальное имя «МИША». Соответственно, завершалась программа командой ВЫКЛЮЧИТЬ. Кстати, «ОБХОДЧИК» — это стандартный исполнитель из комплекта программ «Школьница», предназначенный для решения простых математических задач. Среда «ОБХОДЧИКА» представляет собой железнодорожную ветку определённой длины, состоящую из некоторого количества стыков. «ОБХОДЧИК» может двигаться по этой железной дороге вперёд или назад, если путь перед следующим шагом свободен (там есть рельсы), и проверять стыки.

Как работает этот исполнитель, можно понять на примере простой математической задачи. Имеется прямая железнодорожная ветка неизвестной длины, состоящая из некоторого количества стыков. Расстояние между стыками составляет 24 метра. «ОБХОДЧИК» стоит в начале этой железнодорожной ветки. Требуется проверить все стыки, найти неисправные, а затем вернуть «ОБХОДЧИКА» в начало ветки. Программа на языке «Робик» для решения этой задачи выглядит следующим образом:

ВКЛЮЧИТЬ ОБХОДЧИК;
ЗАПОМНИТЬ ПРОЦЕДУРУ ПРОВЕРКА_СТЫКА;
	ЕСЛИ ОБХОДЧИК.СТЫК = “НЕИСПРАВЕН” ТО ОТМЕНИТЬ СТЫК;
	ВПЕРЕД 24М;
ЗАКОНЧИТЬ;
ПОКА ОБХОДЧИК.ВПЕРЕДИ = “СВОБОДНО“ ПОВТОРЯТЬ ПРОВЕРКА_СТЫКА;
ПОКА ОБХОДЧИК.СЗАДИ = “СВОБОДНО“ ПОВТОРЯТЬ НАЗАД 24М;
ВЫКЛЮЧИТЬ ОБХОДЧИК;

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

Язык сломаешь. Советские алгоритмические языки для обучения программированию - 3

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

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

▍РАПИРА

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

Созданием РАПИРА в 1978-1979 годах занимались выпускники Новосибирского государственного университета под руководством автора «Робика» Геннадия Звенигородского. Изначально разработка велась на БЭСМ-6, но позже язык был адаптирован для ПК «Агат» и вошел в состав пакета образовательных программ «Школьница» — вместе с редактором кода. Чуть позже появились версии РАПИРА для Yamaha MSX/MSX2 и ЕС ЭВМ на базе советских клонов процессоров с архитектурой x86 — специально под стандартные КУВТ (комплексы учебной вычислительной техники), которыми оборудовались советские классы информатики.

Язык сломаешь. Советские алгоритмические языки для обучения программированию - 4

Между «Робиком» и РАПИРА было много общего — например, язык являлся регистронезависимым, допускалось произвольное расположение директив в строке. Переменные не требовалось объявлять заранее и указывать их тип: каждая переменная считалась объявленной в момент ее первого использования, а тип автоматически присваивался в зависимости от ее текущего значения. Уже инициализированной переменной можно присваивать значения типов, отличающихся от первоначально присвоенного. РАПИРА поддерживала высокоуровневые типы данных — кортежи и множества, — и на этом языке уже можно было писать полноценные программы, не зависящие от возможностей принятых в «Робике» исполнителей. Вот, например, как на РАПИРА выглядит классический «hello, world» в виде программной процедуры:

ПРОЦ СТАРТ();
    ВЫВОД: "ЗДРАВСТВУЙ, МИР!";
КНЦ;

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

Язык РАПИРА допускал ветвления, проверки условий и циклы, причем в языке существовало четыре разновидности циклов с разными условиями выхода из них. В качестве оператора присваивания использовалось сочетание символов «->», причем слева от него записывалось присваиваемое значение, а справа — имя переменной, которой это значение присваивалось. Например, код, который сравнивает значения переменных «А» и «В», присваивает большей переменной значение 1, а затем выводит на экран значение меньшей переменной, в РАПИРА выглядит так:

ЕСЛИ А > В ТО
1 -> А; ВЫВОД: В;
ИНАЧЕ
1 -> В; ВЫВОД: А;
ВСЕ;

Благодаря простоте синтаксиса язык РАПИРА быстро завоевал определённую популярность в Советском Союзе. Его использовали авторы рубрики «Заочная школа программирования», регулярно публиковавшейся в журнале «Квант» начиная с 1980 года. Вообще, образовательный проект, в рамках которого разрабатывался пакет программ «Школьница», был глобальным — он охватывал не только весь СССР вместе с союзными республиками, но и страны СЭВ. Создатели проекта планировали внедрить единый стандарт изучения информатики и программирования для детей разного возраста и разных народов — именно поэтому существовала версия РАПИРА на основе латиницы, велись работы по созданию версий языка с синтаксисом на эстонском и грузинском языках. В школах, оборудованных КУВТ на основе ПК «Агат», РАПИРА успешно использовалась для обучения старшеклассников вплоть до конца 80-х, а кое-где — до начала 90-х, когда классы информатики стали оснащать более современными IBM-совместимыми компьютерами.

▍Язык РАЯ (учебный алгоритмический язык)

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

Учебный алгоритмический язык — это абстрактный язык для изучения программных алгоритмов в рамках школьной программы, в отличие от «Робика» и РАПИРА, не привязанный к какой-либо конкретной аппаратной архитектуре или модели компьютера. Этот язык был придуман и внедрен в конце 70-х годов соавтором «Робика» академиком А.П. Ершовым для так называемого «безмашинного курса информатики», то есть, для преподавания основ программирования в школах, не оборудованных компьютерными классами. А таких школ на просторах СССР, в частности, в небольших городах и сёлах, насчитывалось очень и очень много. Советская промышленность к началу 80-х уже освоила серийный выпуск нескольких моделей ЭВМ, но обеспечить компьютерами каждую школу в каждом райцентре все-таки не могла. Вот почему этот язык оказался столь необходим и востребован советской системой образования.

Учебный алгоритмический язык также использовал для записи команд кириллицу, а синтаксис А.П. Ершов частично позаимствовал из Алгола. До середины 80-х язык применялся в основном для обучения детей в рамках внешкольных программ образования, но после всех бюрократических согласований и утверждений в 1985 году был принят в качестве основного языка в школьном учебнике «Основы информатики и вычислительной техники». Таковым он и оставался в течение последующих лет вплоть до конца существования СССР: последний школьный учебник на основе этого языка был выпущен в 1990 году общим тиражом 7 млн. экземпляров.

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

алг Сумма квадратов (арг цел n, рез цел S)
   дано | n > 0
   надо | S = 1*1 + 2*2 + 3*3 + … + n*n
нач цел i
|  ввод n; S:=0
|  нц для i от 1 до n
|  |  S := S + i * i
|  кц
|  вывод "S = ", S
кон

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

| выбор параметр
| | при знач значение 1
| | | действия 1
| | при знач значение 2
| | | действия 2
| | иначе
| | | действия по умолчанию
| кон

Этот язык, пожалуй, уникален тем, что был изначально разработан для «программирования в тетрадке». Однако в 1985 году группа студентов, аспирантов и преподавателей мехмата МГУ разработала редактор-компилятор «Е-практикум» («Е» — в честь А.П. Ершова), позволявший набирать и компилировать программы на РАЯ. Это вдохнуло в учебный алгоритмический язык вторую жизнь — теперь его можно было назвать полноценным языком программирования.

▍Вместо заключения

Казалось бы, советские технологии образования и учебные языки программирования давно ушли в прошлое: их сменил Бейсик, который в последние годы потеснили Scratch и Python — именно их изучением чаще всего занимаются школьники на уроках информатики. Но в начале 90-х Научно-исследовательский институт системных исследований РАН представил собственную разработку: язык и систему программирования для поддержки начальных курсов информатики «КуМир» (Комплект Учебных Миров). Примечательно, что «КуМир» основывается на учебном алгоритмическом языке А.П. Ершова — том самом РАЯ — и включает ряд идей, воплощенных ранее в проекте «Е-практикум». Вторую версию «КуМир» разработчики выпустили в 2018 году, причем версии редактора этого языка, распространяемого под лицензией GNU GPL 2.0, есть как для Windows так и для Linux.

Язык сломаешь. Советские алгоритмические языки для обучения программированию - 5

«КуМир» был рекомендован Министерством образования РФ в качестве основного учебного материала по курсу «Основы информатики и вычислительной техники», и в настоящее время активно развивается. Так идеи, заложенные академиком А.П. Ершовым и его коллегами еще в начале 80-х, находят свое применение уже в XXI веке.

RUVDS | Community в telegram и уютный чат

Автор: Валентин Холмогоров

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js