Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует. (Bjarne Stroustrup)
Разделы страницы о ранней истории программирования:
Предыстория компьютерных языков
Первые языки программирования возникали еще до появления современных электронных вычислительных машин (ЭВМ): уже в XIX веке были изобретены устройства, которые с долей условности можно назвать программируемыми — например, механические пианино и ткацкие станки. Для управления ими использовались наборы инструкций, которые в рамках современной классификации можно считать прототипами предметно-ориентированных языков программирования.
Значимым считают «язык», на котором леди Ада Августа графиня Лавлейс написала программу для вычисления чисел Бернулли для паровой Аналитической машины Чарльза Бэббиджа, которая могла бы стать первым компьютером в мире.
В 1930—1940 годах А. Чёрч, А. Тьюринг, А. Марков в СССР разработали математические абстракции (лямбда-исчисление, машину Тьюринга, нормальные алгорифмы) для формализации алгоритмов. [Т.о., информатика является дочерью математики.] Чуть позже, в 1940-е годы, появились электрические цифровые компьютеры и даже был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ — Plankalkül [минуя стадию ассемблера?!], созданный немецким инженером К. Цузе во время войны (с 1943 по 1945 годы).
Программисты начала 1950-х годов, в особенности таких ЭВМ, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным кодом, запись программы на котором состояла из единиц и нулей и который принято считать языком программирования первого поколения (1GL). При этом разные машины разных производителей использовали различные коды, что требовало переписывать программу при переходе на другую ЭВМ.
На смену машинным [бинарным] языкам пришло применение языков второго поколения (2GL), также ограниченных спецификациями конкретных машин, но более простых для использования человеком за счет использования мнемоник (символьных обозначений машинных команд) и возможности сопоставления имен адресам в машинной памяти. Они традиционно известны под наименованием языков ассемблера и автокодов. Однако, при использовании ассемблера становился необходимым процесс перевода программы на язык машинных кодов перед ее выполнением, для чего были разработаны специальные программы, также получившие название ассемблеров. Сохранялись и проблемы с переносимостью программы с ЭВМ одной архитектуры на другую, и необходимость для программиста при решении задачи мыслить терминами «низкого уровня» — ячейка, адрес, команда.
Опережая время: какой язык программирования считается первым
Мы решили разузнать, какой язык программирования был самым первым. Чтобы разобраться в вопросе, начали с зарождения информатики в XIX веке.
Первый программист Ада Лавлейс
Говоря о первом языке, сложно умолчать о первом программисте. Графиня Ада Лавлейс, дочь лорда Байрона, всю свою жизнь посвятила математике и механике, трудилась в свое удовольствие без зарплат и дедлайнов. Результатом ее любви к точным наукам стали описание первой в мире вычислительной машины и создание программы для нее.
Аду Лавлейс часто упоминают вместе с Чарльзом Бэббиджем. Он изобрел первый прототип современного компьютера — логарифмическую машину. Но реализовать ее не удалось: проект разрастался на бумаге, а финансирование от английской короны заканчивалось. Ада познакомилась с ученым при дворе, и с этой встречи началось ее глубокое увлечение его работами.
В 1840 году изобретение Бэббиджа привлекло внимание профессоров из Турина. Он получил приглашение от итальянского правительства, где военный инженер Луиджи Менабреа взял у него интервью о принципах работы разностной машины и издал статью на французском.
В то же время Ада занялась переводом статьи на английский язык, параллельно переписываясь с Бэббиджем. Она не только перевела принцип работы, но и сопроводила его обширным комментарием. В нем она описала алгоритм для вычисления последовательности Бернулли с помощью машины. Кстати, его используют до сих пор, поэтому программа опередила себя на несколько десятков лет. Аду Лавлейс по праву считают первым программистом в истории человечества. В 1980 году в США новый язык назвали в ее честь.
Я не считаю, что структуры головного мозга менее подвластны математикам, нежели движения и свойства звезд и планет; вполне, если выбрать для их рассмотрения правильную точку зрения. Я хотела бы оставить последующим поколениям вычисляемую модель нервной системы.
Машинный код и языки ассемблера
Масштаб работы Бэббиджа и Лавлейс оценили только в ХХ веке, когда научно-технический прогресс шагнул вперед и математики нового поколения увидели, что все это уже было до них.
В 1940-х годах инженеры начали конструировать первые электронно-вычислительные машины — громоздкие, неудобные и с перфокартами. Вот такие:
Для передачи команд использовали цепочки нулей и единиц — машинный код. Мягко говоря, не самый удобный вариант для программистов: приходилось «разговаривать» с компьютером на его языке, хорошо знать составляющие ЭВМ. А еще легко было допустить ошибку при записи кода.
Процесс создания программ требовал автоматизации, и в пятидесятых годах появились первые языки программирования низкого уровня — ассемблеры. Низкий уровень означает, что язык все еще близок к машинному коду, но уже становится проще для восприятия человеком.
Первый высокоуровневый язык Планкалкюль
Часто можно услышать, что первым языком высокого уровня был Fortran (1957). Но еще в разгар Второй мировой войны немецкий ученый Конрад Цузе создал Plankalkül — первый высокоуровневый язык. Он написал на нем49 листов программ для оценки шахматных позиций и документацию в отдельной брошюре. Работы Цузе увидели свет только после войны, в 1972 году.
Планкалкюль — электромеханический язык, так как разрабатывался для компьютера Z4. Автор не создал для него аппаратной реализации. Первый компилятор для Планкалкюля написали в Германии в 2000 году: он называется Plankalkül-2000. Его разработали в Свободном университете Берлина спустя пять лет после смерти Цузе. Это интерпретатор диалекта Планкалкюля — он чуть проще самой первой версии языка. Если вам захочется почувствовать дух истории, на нем даже можно написать простенькую программку.
Plankalkül не нашел практического применения, но вполне соответствует современным стандартам высокоуровневых языков. В нем есть четыре вида переменных, массивы, циклы, кортежи, подпрограммы и условные конструкции. С помощью языка можно выполнять простые арифметические операции и сортировку чисел.
Fortran — первый язык с компилятором
В 1957 году в компании IBM группа программистов, возглавляемая Джоном Бэкусом, представила первый работающий высокоуровневый язык Fortran. В его основе лежит принцип анализа всей строки.
Сегодня Фортрану61 год, но он до сих пор востребован и популярен в Data Science. За это время вышло множество версий, язык эволюционировал и обрел четкие стандарты. Благодаря огромному наследию кода он используется для различных вычислений в научных разработках, геологических изысканиях и астрофизике.
Если вам интересна история, взгляните на потрясающую схему развития языков программирования, начиная с Фортрана.
Как видите, однозначного ответа на вопрос, какой язык программирования придумали первым, не существует. Первую абстрактную программу написала Ада Лавлейс, первым высокоуровневым языком был Plankalkül, но эру высоких информационных технологий начал Fortran. Все они первые в личном зачете, и каждый важен для того или иного этапа развития информационных систем.
Если программирование вас вдохновляет, предлагаем пройти курс «Веб-разработчик». Вы получите представление об основах JavaScript и PHP, примените их на практике и освоите востребованную специальность.
История языков программирования: как Fortran позволил пользователям общаться с ЭВМ на «ты»
В 2017 году языку Fortran исполняется 60 лет. За это время язык несколько раз дорабатывался. «Современными» версиями считаются Fortran 90, 95, 2003 и 2008. Если изначально это был язык программирования высокого уровня с чисто структурной парадигмой, то в более поздних версиях появились средства поддержки ООП и параллельного программирования. На сегодняшний день Fortran реализован для большинства платформ.
До появления языка Fortran разработчики программировали, используя машинный код и ассемблер. Язык высокого уровня быстро набрал популярность, так как был прост в изучении и обеспечивал генерацию эффективного исполняемого кода. Это существенно упростило жизнь программистам.
В 1950 году, когда Джону Бекусу было 25 лет, он, получив степень магистра математики в Колумбийском университете, устроился программистом в фирму IBM. Вскоре он возглавил группу, разрабатывающую интерпретатор под названием «Быстрый кодировщик» для компьютера марки IBM-701. Затем он работал в составе группы по созданию более мощного преемника модели 701, машины IBM-704.
В 1953 году Бекус выступил с рационализаторской инициативой. Он предложил создать язык и компилятор к нему, которые должны были упростить программирование модели IBM-704. Система позволяла записывать программы в алгебраической форме, а компилятор должен был автоматически переводить ее в машинные коды.
С этим предложением Джон Бекус, как говорится, оказался в нужном месте, в нужное время. С опозданием выйдя на рынок, фирма IBM испытывала затруднения с увеличением сбыта своих компьютеров. По этой причине она поддерживала исследования по информатике в Колумбийском, Гарвардском и некоторых других университетах. Помимо этого, IBM и сама искала пути снижения стоимости программирования, а также пыталась упростить работу с компьютерами, чтобы сделать их более привлекательными, «дружественными» для пользователей.
Дело в том, что в то время с компьютерами работали в основном ученые, инженеры и преподаватели. Вычислительные машины использовались для научных расчетов. Однако эти люди испытывали большие сложности, так как приходилось использовать машинные коды и язык ассемблера. А это требовало довольно глубокого знания устройства и действия самого компьютера.
Поэтому они наверняка согласились бы изучить язык высокого уровня, особенно если бы он напоминал привычные им алгебраические формулы. Такие рассуждения подвигли IBM к разработке Fortran.
IBM-704
Исследователи фирмы IBM, создававшие Fortran, и не подозревали, насколько большое значение приобретет этот язык. Когда они в начале 1954 года приступили к работе, информатика развивалась стихийно, и каждый работал по наитию. Это привело к возникновению профессиональных программистов и специалистов по информатике.
Один из управляющих фирмы IBM решил, что из шахматистов получаются хорошие программисты, поэтому он заводил беседы с возможными кандидатами в программисты во время шахматных партий с одним из сотрудников фирмы IBM (который, кстати, был чемпионом США по шахматам).
Мало кто из восьми человек, занятых в разработке Fortran, был серьезно знаком с компьютерами. Они пришли из университетов и авиакомпаний, а также из собственных программистских групп IBM.
До колледжа Бекус был посредственным учеником («Я прошел больше школ, чем могу вспомнить»). После службы в армии во время второй мировой войны он оказался в Нью-Йорке, где поступил в школу радиотехники. «Пределом моих стремлений было сделать высококачественное звуковоспроизводящее устройство», — признался Бекус позднее,.
Однако преподаватель по ремонту телевизионной и радиоаппаратуры пробудил у Бекуса интерес к математике и убедил его продолжить учебу в Колумбийском университете. Так скромно началась одна из самых плодотворных карьер в истории вычислительной техники.
Итак, разработчики во главе с Бекусом расположились в штаб-квартире фирмы IBM на Мэдисон-авеню в Нью-Йорке.
Они выделили основные понятия нового языка, в частности оператор присваивания (например, N = 100), задававший переменным определенные значения, ввели индексируемые переменные, которые сообщали компьютеру, какой элемент из списка переменных нужен (например, X(3) означает третий элемент списка, названного X), предложили очень важный оператор DO, который позволял повторять нужную последовательность операторов заданное число раз.
Как заявлял Бекус, большинство людей считало, что основной вклад Fortran — это возможность писать программы в виде алгебраических формул, а не на машинном языке. Но на самом деле это не так. По его мнению, Fortran в первую очередь автоматизировал организацию циклов. Важность этой задачи при разработке научных приложений сложно переоценить. Работа над языком шла быстро.
Однако совсем другое дело — разработка компилятора. Бекус понимал, что развеять сомнения в возможностях «автоматического» программирования, то есть написания программ на языках высокого уровня нелегко. Это произойдет, когда программы, полученные с помощью Fortran, будут такими же быстродействующими и надежными, как и написанные в машинных кодах или на языке ассемблера, думал он.
По плану на разработку компилятора отводилось полгода, однако работа над ним заняла более двух лет.
В конце 1956 года и в 1957 году интенсивность работы по доводке и отладке компилятора резко возросла. В этот период члены группы часто снимали номер в ближайшей гостинице, где отсыпались днем, работая на машине по ночам, чтобы иметь возможно больше непрерывного машинного времени. Ошибки одна за другой устранялись, и в апреле 1957 года компилятор был готов для использования владельцами машины IBM-704.
«Большой конфуз»
По ошибке, которую Бекус назвал «большим конфузом», компилятор был послан в лабораторию «Вестингауз-Беттис» в виде колоды перфокарт и без каких-либо инструкций; что и позволило Гербу Брайту из лаборатории «Вестингауз-Беттис» запустить Fortran вслепую. Остальные пользователи получили систему на магнитной ленте вместе с руководством для оператора.
В одну из пятниц апреля 1957 года в компьютерный центр атомной лаборатории «Вестингауз-Беттис» возле Питтсбурга почтальон доставил загадочную посылку. Программист Херб Брайт и двое его коллег открыли ящик, на котором не было никаких пометок, и обнаружили там стопку примерно из 2 тысяч перфокарт, без единой инструкции.
Рассматривая перфокарты, Брайт вспомнил, что в IBM как раз шла окончательная отладка языка высокого уровня, предназначенного для использования на IBM-704. Может, почтальон принес именно этот долгожданный компилятор? Брайт и его друзья решили загрузить загадочные карты в компьютер и посмотреть, что получится.
Брайт вложил в считывающее устройство компьютера тестовую программу, написанную на Фортране, и нажал кнопку пуска. Новый компилятор выдал на принтер сообщение: «на карте № 25 обнаружена ошибка в операторе — пропущена запятая».
Программисты, привыкшие к запутанным сообщениям в виде числовых кодов, были поражены ясностью этой информации. Неверный оператор исправили и снова нажали кнопку пуска. Ленты начали вращаться, и компьютер выдал стопку перфокарт программы. Когда карты загрузили в считывающее устройство, заработал принтер и без остановки напечатал 28 страниц. Компьютер лишь слегка ошибся в формате выходных данных. «Но числа были правильными! Числа были правильными!» — восклицал позднее Брайт.
На самом деле, примерно в одно и то же время с Fortran’ом появилось еще два языка высокого уровня – Кобол и Алгол. Начиная с конца 50-х годов они долгое время лидировали в компьютерном мире. Большинство современных программ написано на языках, которые представляют собой потомки этих трех языков.
Распространение и адаптация
Но поначалу Fortran принимали без особой теплоты. Программисты, как вспоминал Бекус, «весьма скептично воспринимали все наши заявки». Однако по сравнению со своими предшественниками Fortran был сравнительно прост для обучения и использования.
Кроме того, фирма IBM снабжала все модели 704 Fortran’ом бесплатно. В результате к 1958 году более половины всех машинных команд на 60 компьютерах фирмы были получены не вручную, а «автоматически», с помощью нового языка высокого уровня.
Бекус понимал, что конкурирующие производители тоже займутся разработкой языков высокого уровня для своих вычислительных машин. Однако Fortran быстро стал нормой и его адаптировали для различных моделей ЭВМ. Первую адаптацию осуществила сама фирма IBM. Через пять лет Fortran использовался на шести различных моделях компьютеров фирмы IBM, а также на компьютерах компании «Сперри Рэнд», «Филко» и других.
Небольшая группа, в которую входил Дэвид Хеммис, за короткое время адаптировала Fortran к машине IBM-650, меньшей, чем IBM-704. Хеммис и его коллеги разработали систему «FORTRANSIT» (FOR TRANSIT — для перехода); позднее эти два слова слились в одно. Таким образом, система FORTRANSIT стала первым транслятором исходного, работающим на ЭВМ нескольких моделей.
Дэвид Хеммис – один из первых разработчиков компьютерных языков, за рулем своего автомобиля выпуска 1928 года. Фотография сделана в Уэстхемптоне (шт. Нью-Йорк) во время автомобильных гонок 1957 года.
Доработка
Тем не менее, работу над новым языком нужно было продолжать достаточно долго: это стало ясно еще в начале 1957 года, когда продолжался процесс отладки. Бекус и другие разработчики понимали, что язык нуждается в более точной системе диагностики программных ошибок. Кроме того, необходимо было реализовать возможность раздельного и независимого написания подпрограмм и программных модулей. Таким образом язык получил бы еще одно преимущество – повторное использование кода.
Благодаря усилиям разработчиков всего через год после создания оригинала появился Fortran II. Одно из достоинств нового языка состояло в том, что он позволял вставлять в программы фрагменты кода на ассемблере. Более поздняя версия, Fortran III, была создана в 1958 году. Про Fortran IV, который еще больше расширил возможности языка, стало известно в 1962 году.
Ядро языка, его основные операторы и выражения, оставались практически неизменными на протяжении многих лет. Но, поскольку Фортран многократно адаптировался ко все новым системам машин, для которых он не предназначался, постепенно накапливались отличия. Одни возможности терялись, новые возникали. Это неизбежно порождало путаницу.
Например, не все компиляторы одинаково истолковывали важнейший оператор DO: некоторые всегда выполняли цикл хотя бы один раз, не проверяя, нужно ли его вообще выполнять, другие осуществляли такую проверку. Чтобы навести порядок в подобных вопросах, производители и пользователи компьютеров договорились провести стандартизацию языка.
В 1966 году первый стандарт получил название Fortran 66. В 1977 году, соответственно, вышел стандарт Fortran 77. В 1991 году появился Fortran 90. Fortran 95 создан в 1997 году.
Fortran в СССР
В Советском союзе ко двору больше пришелся Алгол-60. Поэтому Fortran в этой стране появился позже. Тем не менее, постепенно он вышел на первое место по популярности. Были разработаны компиляторы (трансляторы) для большинства отечественных ЭВМ – «Минск-32», БЭСМ-4, БЭСМ-6, АС-6, ЕС ЭВМ, СМ ЭВМ, МВК «Эльбрус» и так далее.
В ИПМ им. Келдыша в разное время было разработано несколько трансляторов. Два из них – Фортран-Алмо и Форшаг (Фортран шаговый) были написаны на языке Алмо и код генерировали на этом же языке. Это позволило установить трансляторы на несколько разнотипных ЭВМ. В обоих трансляторах реализован стандарт Fortran 66.
Форшаг также включал язык диалога, который позволил создавать, редактировать и выполнять трансляцию кода в диалоговом режиме. Помимо этого, был разработан комплекс графических программ для Фортрана – Графор, который активно использовался на различных ЭВМ.
Fortran и по сей день остается популярным среди научных работников. Это первый язык программирования высокого уровня, имеющий транслятор, получивший практическое применение и дальнейшее развитие. Как говорилось в руководстве фирмы IBM, выпущенном в 1957 году, «Fortran обеспечивает эффективный способ создания программ для модели 704, прост в обучении и не требует глубоких знаний в области ЭВМ».
С тех пор научные работники, инженеры и студенты получили возможность общаться с компьютером без помощи профессиональных программистов, пишущих на ассемблере.
Однако следующее поколение программистов стало относиться к Fortran’у как к «ископаемому». Эдсгер Дейкстра, язвительно отмечал, что обучение студентов этому языку должно приравниваться к серьезному преступлению.
ЭВМ первого поколения в качестве элементной базы использовали электронные лампы и реле; оперативная память выполнялась на триггерах, позднее на ферритовых сердечниках.
ЭВМ первого поколения отличались невысокой надежностью, требовали системы охлаждения и имели значительные габариты. Процесс программирования требовал значительного искусства, хорошего знания архитектуры ЭВМ и ее программных возможностей. Сначала использовалось программирование в кодах ЭВМ (машинный код), затем появились автокоды и ассемблеры, в определенной мере автоматизирующие процесс программирования задач. ЭВМ первого поколения использовались для научно-технических расчетов. Процесс программирования больше напоминал искусство, которым занимался весьма узкий круг математиков, электроников и физиков.
Первой работающей машиной с архитектурой фон Неймана стал манчестерский «Baby» — Small-Scale Experimental Machine (Малая экспериментальная машина), созданный в 1948 году. Другим претендентом на звание «первый цифровой компьютер с хранимой программой» стал EDSAC, разработанный и сконструированный в Кембриджском университете. Заработавший менее чем через год после «Baby», он уже мог использоваться для решения реальных проблем.
Первый универсальный программируемый компьютер в континентальной Европе был создан командой учёных под руководством Сергея Алексеевича Лебедева из Киевского института электротехники СССР, Украина. ЭВМ МЭСМ (Малая электронная счётная машина) заработала в 1950 году. Она содержала около 6000 электровакуумных ламп и потребляла 15 кВт. Машина могла выполнять около 3000 операций в секунду.
В октябре 1947 года директора компании Lyons & Company, владеющей сетью магазинов и ресторанов, решили принять активное участие в развитии коммерческой разработки компьютеров. Компьютер LEO I начал работать в 1951 году и впервые в мире стал регулярно использоваться для рутинной офисной работы.
Первой советской серийной ЭВМ стала Стрела, производимая с 1953 на Московском заводе счётно-аналитических машин. ЭВМ имела быстродействие 2000-3000 операций в секунду.
В 1954 году IBM выпускает машину IBM 650, ставшую довольно популярной — всего было выпущено более 2000 машин. Она весит около 900 кг, и ещё 1350 кг весит блок питания; оба модуля имеют размер примерно 1,5 × 0,9 × 1,8 метров. Цена машины составляет 500000 долл. (около 4 млн долл. в пересчёте на 2011 год) либо может быть взята в лизинг за 3500 долл. в месяц (30000 долл. на 2011 год).
В 1955 году Морис Уилкс изобретает микропрограммирование, принцип, который позднее широко используется в микропроцессорах самых различных компьютеров. Микропрограммирование позволяет определять или расширять базовый набор команд с помощью встроенных программ (которые носят названия микропрограмма или firmware).