История развития языков программирования: кратко обо всем. Языки программирования Какой самый первый язык программирования

Мне всегда казалось, что первым был Фортран, что, в частности отображено и в наверное наиболее известной диаграмме истории языков программирования . На самом деле по влиянию и известности Фортран конечно и был первым. Однако с исторической точки зрения - нет.

[Если быть совсем точным, то уж по настоящему первым языком программирования была, по всей видимости, та нотация, с помощью которой были написаны программы Чарльза Бэббиджа в знаменитой статье Ады Августы Байрон, графини Лавлейс "Sketch Of the Analytical Engine "(статья представляла собой перевод статьи итальянца Менабреа о работе разностной машины Бэббиджа и, содержала существенное дополнение, написанное самой Адой Августой). Однако это был не вполне язык программирования, да и машина, для которой он предназначался существовала только в уме гениального человека. Замечу кстати, что в 1991 году музей науки в Лондоне создал по чертежам Бэббиджа его машину и она сейчас существует в рабочем состоянии ]

Итак, первый язык программирования. Это был вовсе не Фортран, а язык с удивительным названием - Plankalkül, то есть в переводе с немецкого "Исчисление планов" или "План вычислений", был разработан немецким учёным, изобретателем и конструктором Конрадом Цузе в нацистской Германии между 1942 и 1945 годами.

[Цузе также сконструировал несколько различных моделей компьютеров. Например его Z3 тоже был создан раньше знаменитых Marc I и ENIAC и являлся при этом вполне полноценной машиной. ]

Утверждается, что всех своих достижений Цузе добился абсолютно самостоятельно, не обладая сведениями ни о работах американцев и англичан, проводившихся в близкое время, и даже не зная о работах Бэббиджа.

Создание языка программирования было естественным продолжением работ по созданию "железной" части компьютеров. Сам Цузе пытался с его помощью писать программу для игры в шахматы. Работы над языком были закончены около 1946 года, однако развития язык не получил и даже написанное руководство увидело свет только в 1972 году. Из-за этого язык оказался неизвестным и существенного влияния на дальнейшее развитие индустрии не оказал (в сравнении например с тем же Фортраном).

Тем не менее Plankalkül несомненно был первым в мире языком программирования высокого уровня. Основные концепции языка включают:

  • Наличие подпрограмм (и это в 1940-х годах!!!)
  • Наличие операции присваивания (=>)
  • Циклы
  • Условный оператор (if)
  • Возможность манипуляций с массивами
  • Возможность манипуляций со списками
При создании языка Цузе собрал множество проблем, которые были поставлены инженерами и учёными. Для демонстрации того, что язык действительно способен решать эти проблемы было написано огромное количество примеров программ (в частности около 60 страниц примеров для программы играющей в шахматы).

Одной из проблем языка был чрезвычайно сложный и очень непривычный современному программисту синтаксис. Вот пример присваивания A = A+1 на языке Plankalkül.

>> Статьи

Как появились языки программирования?

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

История языков программирования: Начало

Начало 40-х годов ознаменовано появлением первого языка для программ - ассамблера, включавшего в команду набор коротких слов или их аббревиатур. Ассамблер считается языком низкого уровня программирования, потому и назван машинно-ориентированным языком. Впрочем, программы, написанные на этом языке, отличаются эффективностью и работоспособностью..

Языки высокого уровня: алгоритмические языки

Развитие технологий и внедрение новых типов цифровых устройств заставило программистов изобрести язык более высокого уровня с ориентиром написания на алгоритмы. Так появились дополнительные программы- трансляторы, которые запускали действие алгоритма. Известны два метода трансляции:

- Compilation или компиляция, когда инструкции вступают в активное действие после перевода всего пакета программы;

- Interpretation или интерпретация, при которой выполнение и перевод машинного языка осуществляется в синхронном порядке.

Особенностью таких программ являются: простота создания (написания кода), возможность корректировать при использовании, удобство при считывании.

Год 1954: структурное программирование

Миру стал известен первый компилятор языка программирования очень высокого уровня. Речь идет о Fortran, от английской аббревиатуры FORmula TRANslator. Разработка языка упростилась, но при составлении объемных программ язык становился практически не читаем, хотя и было выпущено много версий Fortran.

Пик развития языков программирования приходится именно на 50-60-е годы, тогда создаются несколько вариантов:

- Algol (1958 г.), созданный на основе обособленных блоков;

- Cobol (1959 г.) - язык бизнеса и управления, основа С+;

- Basic (1965 г.), известный программистам по сегодняшний день.

В 1970 году создается язык программирования, названный в честь ученого Б. Паскаля - Pascal. Создаваемые на этом языке программы читались легко, не возникало сложностей и при обучении. Простой, хорошо структурированный язык по прежнему пользуется популярностью среди начинающих программистов.

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

Объектно-ориентированное программирование (ООП): 1970 год

Идеология процедурного программирования для формально не связанных в обработке функций заставила разработчиков сесть за создание новой концепции составления языка. Основой понятий ООП стали:

Модель объекта, которого еще не существует;

Экземпляр класса;

Абстракция, придание характеристик объекту;

Инкапсуляция, когда объединяются свойства и методы, преследуя цель сокрытия данных;

Наследование;

Полиморфизм.

Первым языком был Симула, чуть позднее изобретен Smalltalk. В настоящее время такой тип программного языка поддерживают современные программы: Object Pascal (Delphi), C++, C#, Java.

Последовательность развития языков программирования зависит от внедрения новых инноваций, так после появления Интернет, стал необходим язык для доступа к ресурсам, сайтам. Технология World Wide Web (WWW) дала жизнь новым языкам, активно используемых до сих пор: Java, Perl, SQL, HTML, PHP, JavaScript.

Этим текстом я хочу начать цикл статей об истории развития языков программирования. Он является адаптированной версией этого сборника .

Программирование появилось задолго до 50-х годов XX века. Первые идеи высказал ещё Чарльз Бэббидж (1792-1871), которого по праву считают отцом компьютера. Он не знал о транзисторах, микросхемах и мониторах, но достаточно точно описал основные принципы, на которых будут строится все вычислительные машины. Развила идею графиня Ада Лавлейс (1815-1852). Её место в истории до сих вызывает немало споров, но одно абсолютно точно – именно Ада фактически стала первым известным программистом. Благодаря её трудам стало понятно, что путь к эффективному использованию машин – алгоритмы, описанные в коде.

Аналитическая машина Бэббиджа

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

Суть проблемы

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

Ещё одной проблемой было то, что за разработку языков отвечали люди, непосредственно связанные с созданием компьютеров – в первую очередь инженеры и лишь вынужденно программисты. Потому они и представляли язык в виде последовательности номеров операций и ячеек памяти. Грубо говоря, это выглядело так:

01 x y – добавление содержимого ячейки памяти y к ячейке x;

02 x y – аналогичная процедура с вычитанием.

В итоге код программы превращался в бесконечную череду цифр:

01 10 15 02 11 29 01 10 11…

Сегодня такой код вам покажется ужасом, но в начале 1950-х был нормой.


Компьютер 1940-х годов

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

Первый сборщик

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

Решение оказалось настолько очевидным, что доподлинно неизвестно, кто первым изобрёл язык Ассемблера. Вероятнее всего, он появился одновременно сразу в нескольких местах. За название и популяризацию ответственными принято считать авторов книги «The preparation of programs for a digital computer» Уилкса, Уилера и Гилла. Нетрудно догадаться, что название Ассемблер происходит от английского слова assemble – собирать, монтировать, что вполне точно описывает процесс. Позднее символы стали касаться не только простейших операций, но и адресации, что значительно упростило читаемость кода.

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

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

Это стало катализатором языкового прорыва.

Компиляторы и предубеждения

Ассемблер позволил создать простые превращения. Например, перевод 01 в ADD. Макроассемблер расширил эту идею и подарил программистам возможность сворачивать несколько инструкций в одну. К примеру, если в программе вы постоянно добавляли значение в ячейку памяти и проверяли, не переполнена ли она, всё это можно было записать в макрос INCRT и использовать его, меняя лишь переменные. По сути, макроассемблеры превратились в первые языки высокого уровня.

Но в таком подходе заключалась важная проблема – каждый раз перед созданием кода необходимо было сворачивать базовые операции в макросы. Требовался инструмент, который освободит программистов от постоянного копирования. Так появился компилятор.

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

Тем не менее компилятор стал единственным выходом из ситуации, но здесь проявилась другая трудность – арифметические выражения. Их исполнение не совпадает с тем, как машина читает код. Из школьного курса мы знаем порядок вычислений в выражении «2+3*5», но машина читает код в одном направлении, так что ответ будет неверным. Да, указанный пример можно решить, создав макрос, но для сложных выражений уровня «(2 + 3 * 5 + 4/6) * 10 + 16- (14 + 15) * 8» требовался принципиально иной подход.

Эпоха новой формации

Найти алгоритм анализа стека удалось Джону Бэкусу, создателю Фортрана. Он начал работать над ним в 1954 году и ему потребовалось почти 5 лет, чтобы доказать право языков высокого уровня на существование. Полное название Фортрана – The IBM Formula Translating System, или FORmula TRANslator. Несмотря на 60-летний возраст, он остаётся одним из самых популярных языков программирования и невероятно востребован в Data Science. За это время мы видели множество версий: Fortran 1, II, 66, 77, 90, 95, 2008, а в следующем году выйдет ещё одна (планировался Fortran 2015, но из-за задержек название может смениться на 2018). Именно в Фортране впервые были одновременно реализованы многие атрибуты языка высокого уровня, среди которых:

  • арифметические и логические выражения;
  • цикл DO (ранняя форма цикла FOR);
  • условный оператор IF;
  • подпрограммы;
  • массивы.

Ещё одним важным наследием Фортрана, о котором даже не догадываются современные программисты, является использование ограничений для переменных для целых чисел. Все они должны были начинаться с одного из 6 символов I, J, K, L, M, N (происходит от I-Nteger). Именно отсюда взялась привычка для перечислений брать переменные i, j и т.д.


IBM 704 – машина, на которой был создан Fortran

При этом Фортран оставался языком, приближенным к машинам. Например, там существовало такое:

If (выражение ) doneg, dozero, dopos

Причиной была архитектура компьютера IBM, которой требовалась команда для использования нужного регистра: отрицательного, нулевого или положительного. Близость к машинам проявлялась и в известной команде GOTO (позднее она была унаследована Basic), означавший прямой переход к той или иной команде.

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

Языки для каждого

Fortran 1 был научным языком, в его основе лежали операции с комплексными числами и с плавающей запятой. Он даже не умел обрабатывать текст, для этого приходилось преобразовывать его в специальные коды. Поэтому Фортран оказался непригоден для бизнеса, где был специально создан язык Cobol.

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

Move Income To Total Subtract Expenses

Cobol стал олицетворением максимального удаления от прежнего машинно-арифметического мышления к общечеловеческому. И главное – теперь можно было работать с текстом и записями.

Следующим фундаментальным языком стал Algol (ALGOrithmic Language), предназначенный для научных отчётов и публикаций. В нём впервые появились естественные для нас вещи:

  • отличия между присваиванием:= и логическим равенством =;
  • использование цикла for с тремя аргументами: начальное значение, предел, шаг;
  • блочная структура программ, заключённая между begin и end, это исключило необходимость применения GOTO.

Именно из Алгол произошли C, C ++, C #, Java и многие другие популярные сегодня языки.

Четвёртым китом 1950-х стал Лисп (LISt Processing language), разработанный специально для обслуживания искусственного интеллекта. Главной его особенность стала работа не с императивными данными, а с функциями. Для этого Джону Маккарти пришлось предусмотреть множество механизмов для нормальной работы: динамическую типизацию, автоматическое распределение памяти, сборщик мусора. В конечном счёте, именно Лисп стал прародителем таких языков, как Python и Ruby, а сам до сих пор активно применяется в ИИ.

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

Первым реализованным языком компьютерного программирования высокого уровня является Фортран (FORmula TRANslator). Он был создан группой программистов корпорации IBM в период с 1954 по 1957 год. Спустя несколько лет после его создания начались коммерческие продажи Фортрана – до этого осуществлялось либо с помощью машинных кодов, либо символических ассемблеров.

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

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

История внедрения Фортрана

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

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

После сногсшибательной успешности Фортрана европейские компании начали опасаться, что IBM начнет лидировать в компьютерной отрасли. Американские и немецкие сообщества создали свои комитеты по разработке универсального программного языка, однако впоследствии они соединились в один комитет. Его специалисты разработали новый язык и назвали его International Algorithmic Language (IAL), но поскольку общеупотребительным названием новинки быстро стал Алгол (ALGOrithmic Language), официальное название IAL комитету пришлось сменить именно на Алгол.

В пятидесятые годы двадцатого века с появлением компьютеров на электронных лампах началось бурное развитие языков программирования. Компьютеры, стоившие в то время значительно дороже, чем разработка любой программы, требовали высокоэффективного кода. Такой код разрабатывался вручную на языке Ассемблер . В середине 50-х годов под руководством Джона Бэкуса для фирмы IBM был разработан алгоритмический язык программирования FORTRAN. Несмотря на то, что уже существовали разработки языков, выполняющие преобразование арифметических выражений в машинный код, создание языка FORTRAN (FORmula TRANslator), предоставляющего возможность записи алгоритма вычислений с использованием условных операторов и операторов ввода/вывода, стало точкой отсчета эры алгоритмических языков программирования.

К языку FORTRAN предъявлялись требования cоздания высокоэффективного кода. Поэтому многие конструкции языка первоначально разрабатывались с учетом архитектуры IBM 407. Успех разработки этого языка привел к тому, что производители других вычислительных систем стали создавать свои версии трансляторов. С целью некоторой возможной на тот момент унификации языка язык FORTRAN IV, разработанный в 1966 году, стал первым стандартом, именуемым FORTRAN 66.

Как альтернатива языку FORTRAN, первоначально ориентированному на архитектуру IBM, под руководством Питера Наура в конце 50-х годов был разработан язык ALGOL (ALGOrithmic Language). Основной целью, преследуемой разработчиками этого языка, была независимость от конкретной архитектуры вычислительной системы. Кроме того, создатели языка ALGOL стремились разработать язык, удобный для описания алгоритмов и применяющий систему обозначений, близкую к той, что принята в математике.

Языки FORTRAN и ALGOL были первыми языками, ориентированными на программирование вычислений.

Язык PL/I , первые версии которого появились в начале 60-х годов, был первоначально ориентирован на IBM 360 и расширял возможности языка FORTRAN некоторыми средствами языка COBOL, разработанного в эти же годы. Несмотря на определенную популярность языка PL/I у программистов, работавших на компьютерах IBM и машинах серии ЕС, в настоящее время он представляет чисто теоретический интерес.

В конце 60-х годов под руководством Найарда и Дала был разработан язык Simula-67, использующий концепцию пользовательских типов данных. Фактически это первый язык, применяющий понятие классов.

В середине 70-х годов Вирт предложил язык Pascal , который сразу стал широко использоваться. В это же время по инициативе Министерства обороны США началась работа по созданию языка высокого уровня, получившего название Ada – в честь Ады Лавлейс, программистки и дочери лорда Байрона. Создание языка началось с определения требований и выработки спецификаций. Над проектом работали четыре независимые группы, но все они использовали как основу язык Pascal. В начале 80-х годов был разработан первый промышленный компилятор языка Ada .

Универсальный язык программирования С был разработан в середине 70-х годов Денисом Ритчи и Кеном Томпсоном. Этот язык стал популярным языком системного программирования и в свое время использовался для написания ядра операционной системы UNIX. Стандарт языка С начал разрабатываться рабочей группой института стандартов ANSI в 1982 году. Международный стандарт языка С принят в 1990 году. Язык С лег в основу разработки языков программирования C++ и Java.

Наряду с алгоритмическими языками параллельно развивались и языки, предназначаемые для обработки деловой информации, а также языки искусственного интеллекта. К первым относится язык COBOL (COmmon Business Oriented Language), а ко вторым – языки LISP (LISt Processing) и Prolog . Язык LISP, разработанный в 60-х годах под руководством Дж. Маккарти, был первым функциональным языком обработки списков, который нашел широкое применение в теории игр.

С появлением персональных компьютеров языки стали составными частями интегрированных сред разработки. Появились языки, применяемые в различных офисных программах, например VBA (Visual Basic for Application).

В 90-х годах с распространением сети Интернет расширяется возможность распределенной обработки данных, что отражается и на развитии языков программирования. Появляются языки, ориентированные на создание серверных приложений, такие как Java , Perl и PHP , языки описания документов – HTML и XML . Традиционные языки программирования С++ и Pascal также претерпевают изменения: под языком программирования начинает пониматься не только функциональность самого языка, а также библиотеки классов, предоставляемые средой программирования. Акцент со спецификации самих языков программирования переносится на стандартизацию механизмов взаимодействия распределенных приложений. Появляются новые технологии – COM и CORBA, специфицирующие взаимодействие распределенных объектов.

 

Возможно, будет полезно почитать: