Советский Союз смог добиться хороших результатов в компьютерных технологиях, несмотря на изоляцию экономики и науки от западного мира. Идя на несколько шагов позади, отечественные конструкторы и программисты создавали разнообразные языки программирования и ЭВМ, среди которых был культовый суперкомпьютер БЭСМ. Рассказываем, как обучались математике и программированию советские дети и студенты, как и на чём кодили в 70-х и какие языки использовались в рамках Советской космической программы.
Алгоритмы на листочке и 12-этапный кодинг уравнения
1970-е. Техникумы Советского союза активно формируют группы для обучения будущих программисток. Нет, мы не ошиблись — в середине 70-х большую часть программистов составляли женщины. Обучение длилось 5 лет, а поступить могли юноши и девушки с высокими результатами экзаменов по алгебре и геометрии. Профильные предметы начинались со второго курса, и среди них было много смежных, но полезных дисциплин, таких как электротехника и высшая математика с её интегральными и дифференциальным исчислениями.
Широкого доступа к ЭВМ в техникумах и институтах в то время не было, поэтому большинство занятий по программированию, если они не лабораторные, проводилось весьма консервативно: тетрадь, карандаш и резинка. Иногда без карандаша на занятия и вовсе не пускали.
На один семестр приходился один новый язык программирования. Тогда популярными в Советском Союзе были Алгол, разработанный немцем Фридрихом Бауэром, и Фортран, пришедший из США (компания IBM), а также ПЛ/1. Экзамены по языкам состояли из логических вычислительных задач, которые должен был решить написанный студентом код. Решали, само собой, также на листочке — некоторые учебные заведения не могли похвастаться наличием даже одного физического компьютера.
Ближе к концу 70-х ЭВМ всё-таки завозили, что нисколько не облегчало работу студентов. К примеру, одной из первых машин для вычислений, используемых в техникумах, была Наири, разработанная в Ереване.
Проблему реализации программ на ней представляло устройство ввода, а именно пишущая машинка Consul-254, которая была подключена к махине. Общение с Наири осуществлялось с помощью АП — «языка автоматического программирования». В алфавите использовались русские буквы и некоторые латинские. Так вот, программы для решения вычислительных задач, написанные для этой ЭВМ, представляли собой «пошаговые инструкции», набор которых нужно было начинать заново, если программист допустил хотя бы одну опечатку или ошибку. Чтобы забить алгоритм решения алгебраического уравнения, требовалось выполнить более 10 команд. Операторы, применяемые на АП, набирались на русском: допустим, вычислим, вставим, идти, введём, печатаем и другие. Показываем пример программы для решения задачи, представленный в учебнике от 1979 года:
Получить доступ к вычислительным машинам более высокого класса студенты не могли, но преподавателям удавалось. Так, самыми желанными для программистов были компьютеры ЕС ЭВМ, советские аналоги IBM 360. Педагоги печатали сотни страниц кода и делились со студентами, а те — конспектировали.
Обучение в техникумах, как и в наше время, было практико-ориентированным и концентрированным. Студенты проходили полугодовую практику, работая с ЭВМ и оттачивая навыки программирования, в то время как университетские программы длились дольше (5-6 лет в зависимости формы обучения) и включали десятки ненужных предметов. Однако только в институте можно было изучить английский язык, что облегчало программирование и давало преимущество при чтении зарубежной документации.
Технологии сменяли друг друга так же быстро, как и в США. Если в начале 1980-х программировать приходилось на перфокартах, набивая код на специальных устройствах, то ближе к середине появились, наконец, терминалы с клавиатурами вместо печатных машинок.
Дефицит ЭВМ приводил к тому, что рабочее время распределялось на смены между сотрудниками компании, то есть программировали по очереди. Сначала терминалы располагались в одной комнате с ЭВМ, чуть позднее появились полноценные офисы. Языки программирования сменяли друг друга быстро — уже тогда, полстолетия назад, в мире IT не было ничего постоянного. В среднем перемены происходили каждые 3 года.
Главное, что отличало программирование США и СССР, это его назначение. В Советском Союзе ЭВМ оставались новшеством с неизведанными возможностями, в то время как за границей компьютеры уже использовались в быту. А ещё отличалось половое соотношение внутри профессии: в странах СССР были «программистки», тогда как в США это была преимущественно мужская профессия.
С чего всё начиналось? Фундаментальная математика
Прикладная математика, математическая логика, изучение алгоритмов были основной любого технического образования СССР.
Научное сообщество Советского Союза начало формироваться сразу после социалистической революции. Московский университет стал центром притяжения советских математиков, которые оказали большой вклад в математическое образование, создание компьютеров и алгоритмов вычислений. Академики А.М. Колмогоров, П.С. Александров, М.А. Лаврентьев, Л.А. Люстерник и другие заложили фундамент математического образования.
Первый вычислительный центр СССР был открыт под руководством академика С. Л. Соболева при Московском государственном университете в 1955 году. Приглашенный научный сотрудник А. А. Ляпунов, ставший основоположником советской кибернетики, проводил здесь исследования математических моделей, алгоритмов и операторов в программировании. В середине 50-х под его руководством был основан семинар по программированию и кибернетике («Большой»), ставший центром притяжения молодых учёных и инженеров. В дальнейшем большая часть научных работ по программированию опиралась на исследования Ляпунова.
Реформа школьного математического образования началась только в 1960-х, во время обострения соперничества США и СССР в области технологий. Тогда настал благоприятный момент для подготовки технических специалистов.
Старые учебники сменились новыми, курс геометрии наполнился сложными задачами, появилась стереометрия, развивающая пространственное мышление, ввелись модули тригонометрии в школах. Новая учебная программа по математике была утверждена в 1968 году и затронула ключевые аспекты обучения науке в школах. Появились вечерние школы, факультативы и разнообразные олимпиады по математике и физике, мотивирующие талантливых детей. Открывались клубы по интересам, а увлечение электроникой и математикой отражали периодические издания того времени.
Интерес к решению трудных математических задач стимулировало также отсутствие развлечений, а награды за победу в олимпиадах только его подогревали.
Что же касается математического образования в университетах — ключевую роль в особом типе мышления советских программистов сыграл упор на теоретические основы математики.
Вот основные достижения подготовительного к технологическому прогрессу периода:
Л.В. Канторович написал труды по линейному программированию (1940), необходимым и достаточным условиям оптимальности (1940), методам функционального анализа (1948). Он заложил теоретическую базу метода двойственных переменных, которая (пока что) не была тепло воспринята математиками и экономиками из-за специфического языка изложения.
На рубеже 50-х и 60-х были проведены исследования систем линейных неравенств и сформулирована строгая математическая формулировка задач линейного программирования.
От математики к промышленности
Программисты в СССР смогли, хоть и с отрывом в несколько лет, наверстать технологический прогресс в области информатики.
Наука и промышленность нуждались в точных математических расчётах для проектирования электроники, создания энергетических и промышленных установок, а также моделирования социальных и природных явлений. Традиционные методы ручного вычисления оказались неэффективными для работы с большим объемом данных и переменными условиями, что привело к необходимости разработки ЭВМ.
Процесс проектирования ЭВМ включал в себя разработку их архитектуры, выбор компонентов и создание методов для выполнения математических операций с помощью электроники. После создания первых ЭВМ возникли вопросы о том, как передать машинам математические задачи и как стандартизировать язык программирования. Решение этих проблем привело к созданию первых языков программирования, которые были логичны и понятны для использования, и позволяли проводить сложные вычисления с многократными операциями.
Проблемы на этом не закончились. Следующим звеном в цепочке «математика-машина-результаты» стала оптимизация программ, чтобы использовать скромные по нашим меркам вычислительные мощности ЭВМ максимально эффективно. Нужно было уменьшить время на выполнение задачи и процент загрузки памяти.
С программами разобрались, но составлять их напрямую стало в разы труднее. Тогда стали применять стандартные программы для решения типичных вычислительных задач, но они не подходили для объёмных и комплексных нужд. Так началась смена подхода к самим языкам программирования: они должны были упростить работу как программистам, так и преподавателям институтов (проще говоря — быть понятными).
Последняя проблема была решена с помощью трансляторов — условные языки переводились на машинные, а логические схемы позволяли снизить трудозатратность для программистов.
Если кратко — таков был путь программирования от первых ЭВМ до визуальных языков типа Дракон, используемых в космической программе СССР. А теперь более подробно по основным историческим вехам.
Электроэнергетика и ЭВМ. На чём писались первые алгоритмы?
Прежде чем мы перейдём к обзору программирования золотой эры, давайте посмотрим, как далеко шагнул прогресс ЭВМ, и какой софт использовался на гигантских машинах первой половины XX века.
Социальные потрясения начала XX века стали толчком для развития электроники и электротехники, а развитие электроэнергетики в рамках госпрограммы интенсификации производства энергии подстёгивало прогресс. «Бум» электрической энергии позволил увидеть свет первым электронным аналоговым машинам уже в 1930-х. Их сконструировал И.С. Брук, но практическое применение пока что ограничивалось военными задачами.
В 1938-м молодой советский инженер В.Е. Агапов создал и представил электрооптическую считывающую машину, или простыми словами — сканер. За его основу взяты фотодиоды, считывающие и преобразовывающие текст в электрические сигналы. Размеры первого сканера были сравнимы с фортепиано.
Первое поколение ЭВМ было представлено линейками БЭСМ, Стрела и М-20.
БЭСМ-1 (1953) — высокоскоростная электронная вычислительная машина, которую разработал С. А. Лебедев в Институте точной механики и вычислительной техники Советской академии наук. В БЭСМ-1 было 5000 электронных ламп, а её вычислительная мощность позволяла производить около 10 тыс. операций в секунду. Один из самых быстрых компьютеров мира того времени с системой памяти на основе электронно-лучевых трубок и ферритовых магнитов. БЭСМ мог производить операции над числами «с плавающей запятой» и помогал решать производственные и научные задачи.
Стрела (1954) — экспериментальная ЭВМ, которую разработали в Специальном инженерном бюро 245 (СКБ-245), которое позднее было переименовано в Научно-исследовательский институт электронных математических машин (НИИЭММ), а ещё позже — в Научно-исследовательский центр электронно-вычислительных машин (НИЦЭВМ). Машина получила более высокую ёмкость памяти, но вычислительная скорость была в 5 раз скромнее БЭСМ, всего 2 тыс. операций в секунду. Компьютер Стрела, использовавшийся в Институте прикладной математики, позволил создать модель ядерного взрыва. Установка играла важную роль в расчётах для космонавтики и обеспечивала нужды крупнейший госпрограммы. Из-за её ограниченной вычислительной мощности появился свод правил: экономить память, скрупулезно подходить к модульной декомпозиции, аккуратно планировать контрольные точки и т. д. Именно в период использования первых ЭВМ возникла проблема программирования как науки.
М-20 (1958) — яркий представитель советских ЭВМ, разработанный в Казани. Скорости 20 тыс. операций в секунду удалось добиться благодаря ряду решений: дублирование выполнения доли операций, ускорение нахождения суммы и разности, умножение двух цифр в одно время.
В конструировании всех описанных машин был задействован С.А. Лебедев, а основы теории программирования заложил А. А. Ляпунов. Концепция Ляпунова описывала логические схемы алгоритмов и дала жизнь операторному методу. Описание программы с помощью блок-схем подразумевало декомпозицию алгоритма на фрагменты и выявление связей между ними. Операторный метод лёг в основу советских учебников по программированию 1950-х, а причины его возникновения упирались в удобство для практической цели. Так, традиционные языки алгоритмов хорошо работали над теоретическими вычислительными задачами, но для перевода алгоритма на машинный язык требовались новые условия.
Язык первого советского компилятора основывался на методе Ляпунова: программа представляла собой схему из алгоритмов. Первая «программирующая программа», или ПП1, разрабатывалась для Стрелы, а затем была оптимизирована с помощью обнаружения неоднократно повторяющихся индексированных переменных, которые заранее извлекались в ячейки оперативной памяти.
Пользователи М-20 организовали Ассоциацию, объединенную общими целями: разработка рекомендаций по разработке единого языка программирования и создание типовых программ. Затем подобные ассоциации образовывались вокруг других новинок рынка ЭВМ.
Опыт, полученный из работы с предыдущими ЭВМ, подтолкнул учёных на создание компиляторов для небезызвестного языка программирования Алгол для компьютера М-20. Компиляторы создавались С.С. Лавровым и М.Р. Шурой-Бурой: первый использовал рекурсивные процедуры для быстрой компиляции, а второй — управляемую генерацию машинного кода.
Проблемой этого периода была необходимость набирать машинный код на перфокартах. Их чтение вызывало большие трудности, а подготовка и проверка отнимали колоссально много времени. Когда появились первые трансляторы, проблем не убавилось — не было специальной литературы, которая бы рассказывала, как работать с Алголом-60.
Почитать о том, как были устроены первые трансляторы в СССР можно здесь.
1960-е. Второе поколение ЭВМ
Второе поколение ЭВМ значительно расширило возможности для проведения расчётов. Уже к концу 1960-х БЭСМ-6 заменили М-20. Основной костяк ЭВМ состоял из следующих моделей:
Урал-11, 14 и 16 (с 1964) — ЭВМ с вычислительной скоростью от 10 до 80 тыс. операций в секунду. Набор из трехсот алгоритмов включал алгоритмы для кодовых слов переменной длины от 1 до 48 бит, символов и чисел с фиксированной и плавающей запятой. 11 и 14 серии поддерживали одну операционную систему, а 16-я была многопрограммной. Все модели данной линейки были сконструированы на полупроводниках.
Программное обеспечение Уралов включало универсальную управляющую программу, выполняющую роль ОС, язык ассемблера (автокод), компиляторы для Алгола и библиотеку стандартных программ.
БЭСМ-6 (1967) — первый суперкомпьютер Советского союза с производительностью 1 млн операций в секунду. Компьютер был построен на основе транзисторов с функцией переключателя токов и диодных резисторов, также использовалась высокочастотная схема. ЭВМ позволяла выполнять до 14 алгоритмов параллельно, а также сохраняла наиболее часто выполняемые операции в «кэш» (ассоциативные регистры), что повысило производительность.
Система команд БЭСМ-6 позволяла производить самые разнообразные вычисления для научных, военных и промышленных нужд: вычитать модули, изменять знак числа, корректировать порядок чисел, выполнять стандартные логические операции, а также специфические — выдачу силы единиц в коде и номера старшей страницы.
Операционная мультипрограммная система для БЭСМ-6 была разработана Королёвым и называлась Диспетчер-68. Она поддерживала многопрограммный режим работы, одновременную передачу данных по нескольким каналам связи с внешними блоками памяти, буферизацию ввода и вывода. Д-68 обеспечивала эффективное распределение ресурсов благодаря задействованию двухуровневой памяти.
Программирование на первых партиях БЭСМ-6 осуществлялось без Ассемблера — общение с ЭВМ происходила на языке машинных кодов.
Разработанные для суперкомпьютера САПы (средства автоматизации труда программиста или управляющие системы) были представлены в двух форматах: Алгол для БЭСМ-6 и Мониторинговая система «Дубна».
БЭСМ-Алгол включала в себя язык программирования Алгол-60 и оператор-код, который позволял программисту использовать не только язык программирования высокого уровня, но и машинный. «Перевод» с Алгола на язык БЭСМ-6 осуществлялся транслятором. САП Алгол позволял использовать несколько режимов запуска программы, а также содержал библиотеку из более двухсот алгоритмов. В университетах тех лет, кстати, недооценивали способности студентов и обучали их русифицированной версии Алгола с командами вида «иди к…–».
Алгоритм работы на Алголе-60 для программиста тех лет выглядел примерно так:
-
Написать программу на бумаге от руки (программист).
-
Текст набить на печатной машинке на листе и перфоленте (другой сотрудник).
-
Исправления внести путём копирования верной части кода и замены исправляемой вручную.
Появление мониторинговой системы «Дубна» и программы «dialogue corrector» значительно упростило жизнь программистам того времени.
Мониторинговая система «Дубна» расширяла возможности использования ЭВМ, позволяя вызывать необходимые трансляторы, создавать персональную библиотеку команд и редактировать программу на её исходном языке. Ближе к концу 60-х программисты получили возможность редактировать программу с монитора.
Желающим окунуться в процесс программирования 1960-х оставляем ссылку на эмулятор суперкомпьютера СССР БЭСМ-6.
А поностальгировать о культовом компьютере можно на страничке памяти БЭСМ-6
1970-е. Эра многообразия
Следующее десятилетие предложило программистам более 20 разных видов ЭВМ для военных и экономических задач. Но все эти компьютеры отличались архитектурой и установленным на них программным обеспечением. Государство выделяло достаточно денег на приведение индустрии в формат, покрывающий растущие потребности военной отрасли, науки, экономики и промышленности.
Советский Союз сконцентрировался на создании Единой системы электронных вычислительных машин ЕС ЭВМ, а также спектра пакетов приложений и комплексов, которые позволили бы удовлетворить спрос.
Борьба ЕС ЭВМ была сложна и драматична: первая машина линейки ЕС-1020, поступившая на предприятия, работала либо плохо, либо никак.
Прикладные задачи и создание пакетов и программ для их решения, а также стандартизация языков программирования — вот ещё одни главных акцентов этого периода. А программисты-математики были заняты вопросами о сложности задач и эффективности методов оптимизации (Немировский, Юдин).
БЭСМ-6 не сдавала позиций, а спроектированная для неё ОС ИПМ (Задыхайло, Камынин, Любимский) открыла новые возможности для организации задач и процессов. Задачи могли одалживать друг у друга ресурсы и устанавливать разные права доступа к ним. Это позволяло создавать сложные иерархии, где одна задача могла управлять ресурсами и процессами другой задачи. Компиляторы этой ОС были написаны на языке программирования АЛМО.
1980-е. Советская космическая программа
Разговаривая о 1980-х, хотелось бы уделить внимание языкам программирования и ПО, которые решали задачи Советской космической программы.
Программное обеспечение для Бурана (1988 г.) было написано на ЕС ЭВМ с использованием Фортрана, который мог удовлетворить потребность в огромных объёмах вычислений. По рассекреченным данным, специально для этой миссии разработали три языка на кириллице: ПРОЛ2 для бортового оборудования, Диполь для наземных испытаний и Лакс для моделирования. После закрытия программы их объединили в язык программирования «Дракон». Создатель языка — Владимир Паронджанов, считает его наиболее удобным из всех графических аналогов. «Дракон» создавался для комфортного программирования — им могли пользоваться не только программисты, но и инженеры.
Дракон-схемы стали альтернативой блок-схемам, но язык не являлся самостоятельным. Он работает вместе с другим текстовым языком, например, тем же ПРОЛ2. В ячейки схемы помещаются фрагменты кода, а Дракон собирает всё в единый файл. Почитать про этот язык можно здесь.
Бортовой компьютер «Салют-4» был совместим с остальными советскими ЭВМ и использовал два из ранее упомянутых языков: ПЛ-1 и Фортран.
Операционные системы СССР того времени подражали западным аналогам. Основная линейка ЭВМ 80-х «Ряд» была представлена несколькими сериями машин с оперативной памятью ёмкостью от 64 до 256 Кб. Программное обеспечение разрабатывалось в Болгарии и Чехии вплоть до 1985-го.
«Ряд» обслуживались такими операционками: ДОС ЕС — операционная система для младших моделей линейки «Ряд», ОС ЕС — для средних или более старших моделей. Первая поддерживала такие языки программирования, как ASSEMBLER, COBOl, FORTRAN-4, PASCAL, ПЛ-1 и RPG, а вторая могла обрабатывать до 15 задач одновременно — в точности как система для IBM 360.
В 1980-х использовались также и UNIX-системы — ИНМОС и МНОС. Они были установлены на промышленные ЭВМ, такие как СМ-4 и СМ-1420, используемые для очистки и сортировки зерна. А вот MS-DOS в СССР была адаптирована под русский язык и была способна распознавать команды на кириллице (АльфаДОС и ДОС-16).
Когда Советский Союз развалился, это сильно ударило по финансированию науки. Многие научные проекты остались без денег, что особенно тяжело отразилось на разработке электроники. В то же время, когда рынок открылся, появилась конкуренция с Западом, и это подтолкнуло к обновлениям и улучшениям в технологиях. Российские IT-компании начали адаптироваться к международным стандартам, и это дало толчок к росту частных предприятий и стартапов.
В 1990-е годы в России начало формироваться новое поколение IT-специалистов и бизнесменов. Они стали использовать новейшие технологии и создавать продукты, которые могли конкурировать на мировом уровне. Это заложило основу для дальнейшего развития и глобализации российской IT-индустрии. Но это уже совсем другая история…
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.