История появления языков программирования. История развития языков программирования: кратко обо всем. Эпоха новой формации

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

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

Языки программирования могут быть:

  • простыми,
  • сложными и
  • непонятными (например, графическими).

История возникновения языков программирования

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

Нулевое поколение

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

Жаккардовый станок

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

С помощью станка можно было легко и массово производить вышивки на ткани при помощи перфокарт, представленных ниже на рисунке:

Рис. 1. Перфокарты для ткацкого станка Жаккарда

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

Машина Беббиджа

Интернет и Веб

Появились специализированные языки:

  • JavaScript.

Многие сайты написаны с помощью PHP и JavaScript.

Некоторые ранее существовавшие языки с появлением Интернета и Веба нашли новые ниши и стали веб-ориентированными:

  • Ruby,
  • Pynton,
  • Java.

К 2000-м годам старые языки программирования постепенно «умирают», появляются новые, но нет общепризнанной концепции, что же происходит с этими вещами.

Любой язык программирования – это искусственный язык, который имеет свой цикл жизни. Аналогично, операционные системы семейства Windows тоже имеют свои жизненные циклы: .

Жизненный цикл языка программирования:

  • создание,
  • early adoption (первоначальное использование языка),
  • (промышленный) успех,
  • угасание, смена другими языками.

В современном мире основная часть программного обеспечения (софта) пишется на 10-15 языках, хотя за все время, которое нам известно, было создано больше сотен языков программирования. Официально как-то зарегистрировано 300 или 400 языков.

Что есть язык программирования

Язык – это

  • синтаксис (правила написания программ),
  • семантика (поведение элементов, которые входят в правила написания и встроены в язык),
  • runtime (среда выполнения).

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

Синтаксис на примере Lisp

Одним из самых простых языков программирования, которые имеют формальную грамматику, считается язык списков LISP.

Рис. 10. Программа на LISP

LISP является очень старым языком, который вырабатывает списки. Грамматика такого языка – это грамматика списков, читается сверху вниз.

  • В Лиспе есть выражения: может быть один атом, либо список;
  • atom – это число или символ,
  • number – число, то есть, с плюсом или минусом цифры, не менее одной,
  • symbol – это буквы, сколько угодно раз, можно даже много раз,
  • list – список, выражения в скобочках более одного раза.

Программа на Лиспе – это список списков. Знаков препинания в Лиспе нет, но есть скобочки. Могут быть такие длинные программы на Лиспе, где в конце идет 2-3 листа, состоящих из одних закрывающих скобочек.

Простейший интерпретатор Лиспа занимает всего 19 строк! Ни один другой язык не может себе позволить себе такой роскоши.

Семантика

Если грамматика описывает формы представления: буквы, цифры, скобочки, то семантика описывает то, как программа работает, что эти буквы, цифры, скобочки означают, как они работают, взаимодействуют друг с другом и т.п.

Варианты представления семантики довольно ограничены.

Семантика может быть:

  • описана на естественном, человеческом языке. Многие языки можно описать только так. На самом деле, это основной случай, когда просто есть документ, где описано по-русски или по-английски, что такая-то штука работает таким-то образом, одна команда делает одно, другая делает такие-то вещи и т.п.;
  • задана формально (в специализированных языках, например, для каких-то расчетов поведение элементов можно описать формально);
  • определена исходной реализацией (редко используют, но это «последняя надежда» на описание, когда слишком сложная семантика или не очень важная);
  • описана набором тестов (кейсов), а именно, что это должно так работать, а это вот таким образом.

Семантика разделяется на две части:

  • статическую,
  • динамическую.

Статическая семантика

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

Динамическая или фронтальная семантика этапа выполнения

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

Система типов данных в языках программирования

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

Обычно в языке программирования имеется система типов данных – это строки, числа, списки и т.д. Есть, например, язык Форс, где все данные – просто , другими словами, существуют языки, где вообще не встроены типы данных.

Если же система типов присутствует, то можно провести деление языков программирования на два независимых друг от друга класса, которые приведены ниже.

Система типов данных:

  • типизированный или нетипизированный язык
  • статическая или динамическая типизация
  • строгая или слабая типизация

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

Если типизация динамическая, то, наоборот, тип объектов контекстного языка неизвестен до момента выполнения, то есть тип функции или чего угодно будет неизвестен до самого конца.

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

При слабой типизации тип объекта может быть разным в зависимости от контекста и от того, что Вы с ним делаете.

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

Следующая важная характеристика языка –

Парадигма языка программирования

  • с греческого – шаблон, пример, образец;
  • это система идей и понятий, определяющих стиль написания программ на этом языке – то, как язык предполагает написание программ на нем (wiki);
  • язык «благоволит» одной или нескольким парадигмам (мультипарадигменность).

Главные парадигмы

  • императивная: программа – набор последовательных инструкций, изменяющих внутренне состояние компьютера, данных и т.д. То есть, программа – это инструкция;
  • функциональная: программа – набор математических функций. Работа программы – вычисление значения функций;
  • объектно-ориентированная: предметная область описывается при помощи объектов со свойствами и методами. Программа – процесс взаимодействия объектов;
  • логическая: программа – набор утверждений о предметной области. Работа программы – установление истинности высказываний об этой предметной области.

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

Еще одной важной частью языка, которую нужно учитывать при использовании языка, является Runtime – то, как язык выполняется.

Runtime – выполнение программы

Программа может выполняться по-разному:

  1. самым простым и наивным способом выполнения программы является интерпретация – чтение исходного кода в момент запуска. Так работают легкие, скриптовые языки. Также работает сам программист: когда он написал программу, то смотрит своими глазами на собственную программу и прикидывает, как его программа будет работать и что делать;
  2. распространенным способом запуска программ является компиляция в машинный код – отдельный шаг до запуска. Есть отдельный инструмент – компилятор, где читаются исходники программы, что-то с ними делают, преобразуя в машинные коды, которые понятны текущей системе. Потом этот код выполняется непосредственно «железки»;
  3. гибридный способ – это байт-компиляция и выполнение в виртуальной машине. Компилятор читает исходный код, после чего производится байт-код, который выполняется в виртуальной машине.

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

Представители языков

Язык C

– один из самых популярных, один из самых важных по физически написанному по нему коду, практически это «наше всё».

Он создан в 1972 году, создатели – Деннис Ритчи (Dennis Ritchie) и коллеги. Д.Ритчи создал также систему Linux и многие другие полезные вещи.

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

Кстати, С актуален до сих пор, используется для:

  • системного программирования (например, ядро Linux написано на C),
  • number-crunching (так называемые числа-дробилки, то есть, для больших вычислений, где важно быстродействие),
  • программирования микроконтроллеров и встраиваемых систем.

С – низкоуровневый язык, можно сказать, что это Ассемблер с человеческим лицом, ибо почти любую конструкцию C человек может вручную преобразовать в Ассемблер и получатся довольно понятные операции.

Программы на C получаются очень компактные. Они не намного больше, чем если бы аналогичные программы были написаны на Ассемблере. При этом разработка на C проходит намного быстрее, чем на Ассемблере.

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

Рис. 11. Пример простой программы на C.

Java

  • Создан в 1995 году,
  • создатели – Джеймс Гослинг (James Gosling) и Sun Microsystems (в этой компании работал Гослинг).
  • Объектно-ориентированный, императивный (C императивный, но НЕ объектно-ориентированный),
  • строго- и статически-типизированный,
  • байт-компилируемый с виртуальной машиной,
  • нет доступа к памяти, автоматическая сборка мусора (последняя работает хорошо, если имеется треть или четверть свободной памяти).

В 90-ых годах JAVA получила большую популярность как мультиплатформенный язык. Один раз написав виртуальную машину для какой-то платформы, допустим для Windows или для Linux или для Mac, можно любые программы на JAVA запускать на ней без перекомпиляции. Поэтому язык был популярен в эпоху веба, когда было разных платформ (разные версии Windows, разные Маки). Программы на JAVA работали быстро и довольно хорошо на разных платформах.

Используется для:

  • прикладного программирования, в том числе для веб-программирования,
  • встраиваемых систем (если С используется для микроконтроллеров, то JAVA – для мобильных телефонов, терминалов и т.п.),
  • высоконагруженных систем с большим количеством пользователей (банковские программы, системы управления воздушным движением и т.п.).

Следует отличать спецификации языка Java и различные реализации JVM:

  • Sun JDK (от компании Sun, ныне это Oracle),
  • IBM JDK (продается за деньги),
  • OpenJDK (абсолютно свободная)
  • и т.п.

Рис. 12. Пример простой программы на JAVA.

Как видно на рис. 12, приходится писать много букв, чтобы выполнить простые действия. Java часто называют новым Коболом, так как она содержит те же негативные свойства, которые когда-то сделали Кобол плохим языком.

Тем не менее JAVA очень популярна, в частности, на ней написана клиентская часть операционной системы .

Lisp

  • Он действительно завершает Lis t P rocessor (LisP);
  • создан в 1958 году;
  • создатели – Джон Маккарти;
  • чистый функциональный язык, несмотря на довольно странный синтаксис;
  • строго- и динамически- типизированный;
  • как правило, интерпретируемый;
  • нет доступа к памяти, автоматическая сборка мусора, которая ложится на интерпретатор, а не на виртуальную машину.

Используется для:

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

Язык Lisp, разработанный в 1958 году, претерпел массу изменений.

У него есть множество реализаций и диалектов:

  • CommonLisp (создан в 1970-ых) – классическая реализация, которая считается основной;
  • Scheme (схема) – упрощенный диалект, который некоторые вещи из CommonLisp выбрасывает и позволяет делать проще;
  • Clojure – диалект Lisp в плане языка, но работает поверх JAVA-машины, то есть компилируется в байт-код и исполняется также, как будто это JAVA-программа.

Рис. 13. Программа на LISP: сортировка пузырьком

Python (Питон)

  • Назван в честь британского шоу 1970-ых годов Monty Pynton’s Flying Circus (там старые шутки, но смешные)
  • создан в 1991 году
  • создатель – голландец Guido van Rossum
  • мультипарадигменный язык, объектно-ориентированный, императивный, функциональный
  • строго- и динамически-типизированный
  • интерпретируемый, байт-компилируемый с виртуальной машиной (в зависимости от реализации)

Используется для:

  • скриптового программирования
  • веб-программирования
  • научного программирования (имеются большие, сильные пакеты для работы с моделированием, с вероятностью, со статистикой и в других областях, которые объединяют в себе опыт, накопленный в других областях)

Python – спецификация языка. Существует несколько основных реализаций:

  • CPython – основная (reference)
  • Jython – поверх JVM
  • PyPy – Python in Python («Питон на Питоне» работает быстрее и лучше, чем CPython и Jython)

Рис. 14. Программа на Python: сортировка пузырьком

У Python есть важная особенность – вместо скобочек (круглых, фигурных) для выделения блоков кода и структурных элементов используются отступы с помощью пробелов, что довольно необычно для всех языков. Кроме Python такой особенностью почти никто не обладает.

Выбор языка под задачу

Как выбрать язык под задачу, когда Вы знаете, что Вам нужно сделать, но не знаете на чем?

Важный совет: используйте то, на чем Вы умеете программировать. Это гораздо лучше, чем использовать то, на чем Вы НЕ умеете программировать.

Экосистема

Язык, который Вы хотите взять, не должен быть «голым» языком, у него должна быть экосистема, которая включает:

  • средства разработки (удобное IDE)
  • готовые библиотеки и фреймворки
  • инструменты тестирования для запуска тест-кейсов: тестовые фреймворки и инструменты
  • системы пакетирования и развертывания для того, чтобы написанный код можно было упаковать, куда-то выложить, чтобы другие могли легко воспользоваться. У языка Си нет такой возможности, а у языков Руби и Питон есть.
  • коммьюнити. Не надо пользоваться мертвыми языками, какими бы классными они не были. Если не у кого спросить, Вы останетесь в полном тупике. Считается, что одни коммьюнити более дружелюбные, другие – менее. Например, коммьюнити Руби классное, а коммьюнити Java ужасное – там даже спрашивать ничего не надо.

Популярность

Сложно найти в команду людей, которые пишут код на редко используемом языке, к примеру на Eiffel. С другой стороны, на вакансию по мега-популярному языку JAVА, в котором порог входа низкий, набежит много народа, но будет непросто подобрать людей, которые пишут на нем действительно хорошо.

Чем популярнее язык, тем больше у него библиотек, коммьюнити, фреймворков и других вещей, которые нарастают сами по себе сверху.

Скорость обучения

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

JAVA – язык простой в изучении и простой по возможностям, а дальше все строится не за счет языка, а за счет инструментов.

С++ выучить до конца невозможно, потому что там есть очень сложные вещи с кодогенерацией.

Нишевость языков

Конкретные языки лучше подходят для решения определенных нишевых задач.

Пример 1: веб приложение, которое

  • взаимодействует с базой данных
  • внутренний сервис в компании
  • нужна быстрая разработка, потому что шеф очень просит.

Для такой задачи, скорее всего, подойдет Python или Ruby. Не надо это делать на JAVA

Пример 2: биллинговая система сотового оператора

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

В этом случае наш выбор – Java, С++, Erlang – богатые языки с богатым инструментарием.

Пример 3: код бортовой ЭВМ для спутника

  • ограниченные ресурсы (всего мегабайт памяти и очень низкая тактовая частота)
  • жесткое реальное время, чтобы спутник не потерял ориентацию, не сломался и не взорвался
  • строго известные задачи, нет никакой гибкости и нет настроек
  • большое количество вычислений

Наш выбор – С и С-подобные языки (и даже ассемблер), потому что очень мало ресурсов и эти требования надо соблюсти.

Статья основана на видео:

Как правильно выбрать язык программирования – Иван Калинин

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

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

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

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

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

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

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

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

Одной из самых революционных идей приведших к созданию автоматических цифровых вычислительных машин, была высказанная в 20-х годах 19 века Чарльзом Бебиджем мысль о предварительной записи порядка действия машины для последующей автоматической реализации вычислений – программе. И, хотя использованная Бебиджем запись программы на перфокартах, придуманная для управления такими станками французским изобретателем Жозефом Мари Жаккаром, технически не имеет ничего общего с современными приемами хранения программ в ПК, принцип здесь по существу один. С этого момента начинается история программирования.
Аду Левлейс, современницу Бебиджа, называют первым в мире программистом. Она теоретически разработала некоторые приемы управления последовательностью вычислений, которые используются в программировании и сейчас. Ею же была описана и одна из важнейших конструкций практически любого современного языка программирования – цикл.

Революционным моментом в истории языков программирования стало появление системы кодирования машинных команд с помощью специальных символов, предложенной Джоном Моучли. Система кодирования, предложенная им, вдохновила одну из его сотрудниц Грейс Мюррей Хоппер. При работе на компьютере «Марк-1» ей и ее группе пришлось столкнуться со многими проблемами и все, что ими придумано, было впервые. В частности они придумали подпрограммы. И еще одно фундаментальное понятие техники программирования впервые ввели Хоппер и ее группа – «отладка».
В конце 40-х годов Дж. Моучли создал систему под названием «Short Code», которая являлась примитивным языком программирования высокого уровня. В ней программист записывал решаемую задачу в виде математических формул, а затем, используя специальную таблицу, переводил символ за символом, преобразовывал эти формулы в двухлитерные коды. В дальнейшем специальная программа компьютера превращала эти коды в двоичный машинный код. Система, разработанная Дж. Моучли, считается одним из первых примитивных интерпретаторов.

Уже в 1951 г. Хоппер создала первый в мире компилятор и ею же был введен сам этот термин. Компилятор Хоппер осуществлял функцию объединения команд и в ходе трансляции производил организацию подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня (в то время псевдокодов) в машинные команды. «Подпрограммы находятся в библиотеке (компьютера), а когда вы подбираете материал из библиотеки – это называется компиляцией» – так она объясняла происхождение введенного ею термина.

В 1954 году группа под руководством Г. Хоппер разработала систему, включающую язык программирования и компилятор, которая в дальнейшем получила название Math-Matic. После удачного завершения работ по созданию Math-Matic Хоппер и ее группа принялись за разработку нового языка и компилятора, который позволил бы пользователями программировать на языке, близком к обычному английскому. В 1958 г. появился компилятор Flow-Matic. Компилятор Flow-Matic был первым языком для задач обработки коммерческих данных.
Разработки в этом направлении привели к созданию языка Кобол (COBOL – Common Business Oriented Language). Он был создан в 1960 году. В этом языке по сравнению с Фортраном и Алголом, слабее развиты математические средства, но зато хорошо развиты средства обработки текстов, организация вывода данных в форме требуемого документа. Он задумывался как основной язык для массовой обработки данных в сферах управления и бизнеса.

Середина 50-х годов характеризуется стремительным прогрессом в области программирования. Роль программирования в машинных командах стала уменьшаться. Стали появляться языки программирования нового типа, выступающие в роли посредника между машинами и программистами. Первым и одним из наиболее распространенных был Фортран (FORTRAN, от FORmula TRANslator – переводчик формул), разработанный группой программистов фирмы IBM в 1954 году (первая версия). Этот язык был ориентирован на научно-технические расчеты математического характера и является классическим языком программирования при решении на ПК математических и инженерных задач.
Для первых языков программирования высокого уровня предметная ориентация языков была характерной чертой.
Особое место среди языков программирования занимает Алгол, первая версия которого появилась в 1958 году. Одним из разработчиков Алгола был «отец» Фортрана Джон Бэкус. Название языка ALGOrithmic Language подчеркивает то обстоятельство, что он предназначен для записи алгоритмов. Благодаря четкой логической структуре Алгол стал стандартным средством записи алгоритмов в научной и технической литературе.

В середине 60-х годов Томас Курц и Джон Камени (сотрудники математического факультета Дартмунтского колледжа) создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык назвали «универсальным символическим кодом для начинающих» (Beginner All-Purpose Symbolic Instruction Code, или, сокращенно, BASIC). Годом рождения нового языка можно считать 1964. Сегодня универсальный язык Бейсик (имеющий множество версий) приобрел большую популярность и получил широкое распространение среди пользователей ПК различных категорий во всем мире. В значительно мере этому способствовало то, что Бейсик начали использовать как встроенный язык персональных компьютеров, широкое распространение которых началось в конце 70-х годов. Однако Бейсик неструктурный язык, и поэтому он плохо подходит для обучения качественному программированию. Справедливости ради следует заметить, что последние версии Бейсика для ПК (например, QBasic) стали более структурными и по своим изобразительным возможностям приближаются к таким языкам, как Паскаль.

Разработчики ориентировали языки на разные классы задач, в той или иной мере привязывали их к конкретной архитектуре ПК, реализовывали личные вкусы и идеи. В 60-е годы были предприняты попытки преодолеть эту «разноголосицу» путем создания универсального языка программирования. Первым детищем этого направления стал PL/1 (Programm Language One), разработанный фирмой IBM в 1967 году. Этот язык претендовал на возможность решать любые задачи: вычислительные, обработки текстов, накопления и поиска информации. Однако он оказался слишком сложным, транслятор с него – недостаточно оптимальным и содержал ряд невыявленных ошибок.
Однако линия на универсализацию языков была поддержана. Старые языки были модернизированы в универсальные варианты: Алгол-68 (1968 г.), Фортран-77. Предполагалось, что подобные языки будут развиваться и усовершенствоваться, станут вытеснять все остальные. Однако ни одна из этих попыток не увенчалась успехом.

Язык ЛИСП появился в 1965 году. Основным в нем служит понятие рекурсивно определенных функций. Поскольку доказано, что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций, то ЛИСП по сути является универсальным языком. С его помощью ПК может моделировать достаточно сложные процессы, в частности – интеллектуальную деятельность людей.
Пролог разработан во Франции в 1972 году для решения проблем «искусственного интеллекта». Пролог позволяет в формальном виде описывать различные утверждения, логику рассуждений и заставляет ПК давать ответы на заданные вопросы.
Значительным событием в истории языков программирования стало создание в 1971 году языка Паскаль. Его автор – швейцарский ученый Никлаус Вирт. Вирт назвал его в честь великого французского математика и религиозного философа XVII века Блеза Паскаля, который изобрел первое суммирующее устройство, именно поэтому новому языку было присвоено его имя. Этот язык первоначально разрабатывался как учебный язык структурного программирования, и, действительно, сейчас он является одним из основных языков обучения программированию в школах и вузах.

В 1975 году два события стали вехами в истории программирования – Билл Гейтс и Пол Аллен заявили о себе, разработав свою версию Бейсика, а Вирт и Йенсен выпустили классическое описание языка «Pascal User Manual and Report».

Не менее впечатляющей, в том числе и финансовой, удачи добился Филип Кан, француз, разработавший в 1983 году систему Турбо-Паскаль. Суть его идеи состояла в объединении последовательных этапов обработки программы – компиляции, редактирования связей, отладки и диагностики ошибок – в едином интерфейсе. Турбо-Паскаль – это не только язык и транслятор с него, но еще и операционная оболочка, позволяющая пользователю удобно работать на Паскале. Этот язык вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями. В силу названных достоинств Паскаль стал источником многих современных языков программирования. С тех пор появилось несколько версий Турбо-Паскаля, последняя – седьмая.
Фирма Borland/Inprise завершила линию продуктов Турбо-Паскаль и перешла к выпуску системы визуальной разработки для Windows – Delphi.

Большой отпечаток на современное программирование наложил язык Си (первая версия – 1972 год), являющийся очень популярным в середе разработчиков систем программного обеспечения (включая операционные системы). Этот язык создавался как инструментальный язык для разработки операционных систем, трансляторов, баз данных и других системных и прикладных программ. Си сочетает в себе как черты языка высокого уровня, так и машинно-ориентированного языка, допуская программиста ко всем машинным ресурсам, чего не обеспечивают такие языки как Бейсик и Паскаль.
Период с конца 60-х до начала 80-х годов характеризуется бурным ростом числа различных языков программирования, сопровождавшим кризис программного обеспечения. В январе 1975 года Пентагон решил навести порядок в хаосе трансляторов и учредил комитет, которому было предписано разработать один универсальный язык. В мае 1979 года был объявлен победитель – группа ученых во главе с Жаном Ихбиа. Победивший язык окрестили Ада, в честь Огасты Ады Левлейс. Этот язык предназначен для создания и длительного (многолетнего) сопровождения больших программных систем, допускает возможность параллельной обработки, управления процессами в реальном времени.

В течение многих лет программное обеспечение строилось на основе операционных и процедурных языков, таких как Фортран, Бейсик, Паскаль, Ада, Си. По мере эволюции языков программирования получили широкое распространение и другие, принципиально иные, подходы к созданию программ.
Существует большое количество классификаций языков программирования по различным признакам. Наиболее распространенными являются следующие классификации:
 языки программирования высокого (Паскаль, Бейсик) и низкого уровня (Ассемблер);
 строго типизированные (Паскаль) и нестрого типизированные (Бейсик);
 с поддержкой объектно-ориентированного программирования (Си++) и без и т. д.

Рассмотрим другую классификацию. Языки программирования делятся на:
1) Машинно-ориентированные языки:
 машинные языки;
 языки символического кодирования;
 автокоды;
 макрос.
2) Машинно-независимые языки:
 проблемно-ориентированные языки;
 универсальные языки;
 диалоговые языки;
 непроцедурные языки.

Машинно-ориентированные языки

Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ПК (внутреннего языка, структуры памяти и т. д.). Машинно-ориентированные языки имеют следующие особенности:
 высокое качество создаваемых программ (компактность и скорость выполнения);
 возможность использования конкретных аппаратных ресурсов;
 предсказуемость объектного кода и заказов памяти;
 для составления эффективных программ необходимо знать систему команд и особенности функционирования данного ПК;
 трудоемкость процесса составления программ (особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
 низкая скорость программирования;
 невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

Машинный язык

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

Языки Символического Кодирования

Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ.
Использование символических адресов – первый шаг к созданию ЯСК. Команды ПК вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.

Автокоды

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

В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту. Макрокоманды переводятся в машинные команды двумя путями – расстановкой и генерированием. В постановочной системе содержатся «остовы» - серии команд, реализующих требуемую функцию, обозначенную макрокомандой. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в «остов» программы, превращая её в реальную машинную программу.
В системе с генерацией имеются специальные программы, анализирующие макрокоманду, которые определяют, какую функцию необходимо выполнить и формируют необходимую последовательность команд, реализующих данную функцию.
Обе указанных системы используют трансляторы с ЯСК и набор макрокоманд, которые также являются операторами автокода.
Развитые автокоды получили название ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа ассемблер.

Макрос

Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму называется макрос (средство замены).
В основном, макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов  выдача выходного текста.
Макрос одинаково может работать, как с программами, так и с данными.

Машинно-независимые языки

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

Проблемно-ориентированные языки

С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно-ориентированные языки. Эти языки ориентированы на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме.
Проблемных языков очень много, например:
- Фортран, Алгол – языки, созданные для решения математических задач;
- Simula, Слэнг - для моделирования;
- Лисп, Снобол – для работы со списочными структурами.

Универсальные языки

Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т. д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков PL/1. Второй по мощности универсальный язык называется Алгол-68.

Диалоговые языки

Появление новых технических возможностей поставило задачу перед системными программистами – создать программные средства, обеспечивающие оперативное взаимодействие человека с ПК их назвали диалоговыми языками.
Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках. Разрабатывались также языки, которые кроме целей управления обеспечивали бы описание алгоритмов решения задач.
Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе.
Одним из примеров диалоговых языков является Бейсик.

Непроцедурные языки

Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.
Позволяя четко описывать как задачу, так и необходимые для ее решения действия, таблицы решений дают возможность в наглядной форме определить, какие условия должны быть выполнены прежде чем переходить к какому-либо действию. Одна таблица решений, описывающая некоторую ситуацию, содержит все возможные блок-схемы реализаций алгоритмов решения.
Табличные методы легко осваиваются специалистами любых профессий. Программы, составленные на табличном языке, удобно описывают сложные ситуации, возникающие при системном анализе.
Языки программирования служат разным целям, и их выбор определяется удобностью для пользователя, пригодностью для данного компьютера и данной задачи. А задачи для компьютера бывают самые разнообразные: вычислительные, экономические, графические, экспертные и т. д. Такая разнотипность решаемых компьютером задач и определяет многообразие языков программирования. В программировании наилучший результат достигается при индивидуальном подходе, исходящем из класса задачи, уровня и интересов программиста.

История создания языка программирования Basic и Visual Basic

Язык программирования Basic был создан в 1964 году двумя профессорами из Dartmouth College - Джоном Кенеми и Томасом Куртцом для обучения студентов навыкам программирования. Язык получился настолько простым и понятным, что через некоторое время его начали применять и в других учебных заведениях. В 1975 году, с приходом первых микрокомпьютеров, эстафету Basic приняли Билл Гейтс и Пол Аллен, основатели Microsoft. Именно они создали новую версию Basic для первых компьютеров "Альтаир" (MITS Altairs), способную работать в 4КБ оперативной памяти. Со временем именно эта версия и превратилась в один из самых популярных языков программирования в мире. На пути к вершине славы у Basic было множество трудностей, которые он всегда с честью преодолевал, и когда появились первые персональные компьютеры IBM PC, именно он стал стандартом в программировании, но уже в виде GW-Basic. Потом был Turbo Basic, QuickBasic, Basic PDS, но всегда при разработке новой версии языка сохранялась совместимость с прежними версиями и программа, написанная для практически первого Basic, вполне (с незначительными изменениями) могла бы работать и в последующих версиях этого языка. Но наступили новые времена, и в начале 90-х появляется операционная система Microsoft Windows с новым графическим интерфейсом пользователя (GUI).

Жизнь программистов превратилась в ад. Чтобы создать простую программу, приходилось писать несколько страниц кода: создавать меню и окна, менять шрифты, очищать память, "рисовать" кнопки и т.д. Однако преимущества нового интерфейса были настолько неоспоримы, что уже третья версия этой операционной системы стала фактическим стандартом для персонального компьютера. В это время в недрах Microsoft велось несколько параллельных проектов по созданию нового языка программирования для Windows. И в 1991 году под лозунгом "теперь и начинающие программисты могут легко создавать приложения для Windows" появилась первая версия нового инструментального средства Microsoft Visual Basic. В тот момент Microsoft достаточно скромно оценивала возможности этой системы, ориентируя ее, прежде всего, на категорию начинающих и непрофессиональных программистов. Основной задачей тогда было выпустить на рынок простой и удобный инструмент разработки в тогда еще довольно новой среде Windows, программирование в которой представляло проблему и для опытных специалистов. Система программирования, созданная разработчиками Visual Basic, позволяла "отстраниться" от сложнейшей внутренней структуры Windows и создавать программы из "кубиков", как в детском конструкторе. Меню, окна, списки, кнопки, поля ввода текста и другие элементы интерфейса Windows добавлялись в программу с помощью простейших операций drag&drop.

Свою первую программу VB-программисты создавали уже через несколько минут после начала изучения этого языка! Более того, Visual Basic позволял разработчикам создавать новые объекты-"кубики", которые также могли использоваться в программах наравне со стандартными. И хотя многие С-программисты тихо посмеивались над попытками Microsoft сделать простой и понятный инструмент разработки Windows-программ, Visual Basic начал свое победное шествие по миру, и ничто не могло остановить этот процесс. Последние барьеры упали в 1994 году с выпуском Visual Basic for Applications. Именно в это время, после включения VBA в состав Microsoft Office, Basic начинает превращаться в один из основных стандартов программирования для Windows. Для фирмы Microsoft язык Basic имеет особое значение, в свое время разработка варианта Basic для компьютера Altair 8800 положила начало трудовому программистскому пути ее основателей, Билла Гейтса и Пола Аллена. Поэтому в свое время - в 1989 году, когда пришла пора распределить основные направления создания сред разработки на различных языках программирования между различными фирмами, Microsoft оставила за собой QuickBasic - среду разработки программ на Basic"е, отказавшись, к примеру, от дальнейшей работы над языком программирования Pascal, оставив его фирме Borland, которая, в свою очередь, остановила работы над своей версией Basic"а (впоследствии Pascal стал языком Delphi).

Первоначально задумывавшийся как игрушка, Visual Basic от Microsoft невероятно быстро завоевал программистский мир. Его популярность обусловлена двумя причинами: относительной простотой и продуктивностью. Программы на VB работают медленнее своих аналогов на C/C++, но все же они достаточно быстры для многих деловых целей и требуют гораздо меньше времени на разработку. Формы были той самой сберегающей усилия абстракцией, которую предложил VB программистам Windows. IDE VB позволила разрабатывать окна графически, перетаскивая элементы управления, такие как кнопки и списки, с панели инструментов в форму. Получив удовлетворительный внешний вид формы, можно было переходить к кодовой части и писать обработчики событий для каждого элемента управления формы.

Разработка приложения в VB, таким образом, состояла из создания нескольких форм, которые общались друг с другом и, возможно, обращались к базе данных за необходимой информацией. В результате форма оказалась окном, которое предлагало использовать оконные методы гораздо более удобным способом. VB уменьшил число ошибок путем удаления некоторых скрытых элементов синтаксиса C/C++. Кроме специальных случаев, выражения ограничивались одной строкой кода, а переменные должны были объявляться и инициализироваться в отдельных строках кода. Операторы присваивания и сравнения использовали один и тот же символ, однако грамматика VB требовала, чтобы эти операторы применялись таким образом, чтобы их намерения были четко обозначены.

Возможно, самым важным было то, что отсутствовали указатели - требование Билла Гейтса, начиная с первых версий Microsoft BASIC. Хотя указатели полезны, так как разрешают прямой доступ к памяти по любому адресу, их использование сопряжено с ошибками в том случае, если они применяются неаккуратно. Требование грамматической простоты BASIC восходит к тому факту, что первоначально он был создан как язык для обучения: "Beginner"s All-purpose Symbolic Instructional Code" (Многоцелевой символьный командный код для начинающих). VB версии 6 - это уже мощный язык, который можно использовать для создания распределенных приложений с применением компонентов СОМ и Microsoft Transaction Server. Microsoft предложила трехуровневый подход для архитектур "клиент-сервер", в котором "тонкие" пользовательские интерфейсы взаимодействовали с удаленными компонентами VB для получения данных из базы данных или с другой машины.

При помощи VBScript и VBA (VB для приложений) можно писать сценарии для web-браузеров и автоматизировать приложения Microsoft Office. Более того, VB6 можно использовать для создания элементов управления Active-X, работающих вместе с Internet Explorer, хотя это делается крайне редко, поскольку требуется, чтобы на машине клиента, работающего в Интернете, была установлена библиотека времени исполнения DLL VB. Начиная с VB5, программы VB компилировались в машинный код, но они были основаны на применении DLL, предоставляющей повсеместно используемые функции и реализующей объектные возможности VB. Интересно то, что компилятор VB для трансляции использует многопроходный режим, а в конечном счете полагается на компилятор Microsoft C++ для получения выходного машинного кода после компиляции в промежуточный язык. В этом свойстве VB - использование библиотеки времени исполнения и внутреннего интерфейса C++ - видны зародыши.NET.

История создания языка программирования C#

Язык C# появился на свет в июне 2000 г. в результате кропотливой работы большой группы разработчиков компании Microsoft, возглавляемой Андерсом Хейлсбергом (Anders Hejlsberg). Этот человек известен как автор одного из первых компилируемых языков программирования для персональных компьютеров IBM -- Turbo Pascal. Наверное, на территории бывшего Советского Союза многие разработчики со стажем, да и просто люди, обучавшиеся в той или иной форме программированию в вузах, испытали на себе очарование и удобство использования этого продукта. Кроме того, во время работы в корпорации Borland Андерс Хейлсберг прославился созданием интегрированной среды Delphi (он руководил этим проектом вплоть до выхода версии 4.0).
Появление языка C# и инициативы.NET отнюдь не случайно пришлось на начало лета 2000 г. Именно к этому моменту компания Microsoft подготовила промышленные версии новых компонентных технологий и решений в области обмена сообщениями и данными, а также создания Internet-приложений (COM+, ASP+, ADO+, SOAP, Biztalk Framework). Несомненно, лучшим способом продвижения этих новинок является создание инструментария для разработчиков с их полноценной поддержкой. В этом и заключается одна из главных задач нового языка C#. Кроме того Microsoft не могла больше расширять все те же инструменты и языки разработки, делая их все более и более сложными для удовлетворения конфликтующих между собой требований поддержки современного оборудования и обеспечения обратной совместимости с теми продуктами, которые были созданы в начале 1990-х гг. во время первого появления Windows. Наступает момент, когда необходимо начать с чистого листа для того, чтобы создать простой, но имеющий сложную структуру набор языков, сред и средств разработки, которые позволят разработчику легко создавать современные программные продукты.

С# и.NET являются той самой отправной точкой. Если говорить упрощенно, то.NET представляет собой новую платформу, новый API для программирования в Windows, а С# е новый язык, созданный с нуля, для работы с этой платформой, а также для извлечения всех выгод из прогресса сред разработки и нашего понимания принципов объектно-ориентированного программирования в течение последних 20 лет.
Необходимо отметить, что обратная совместимость не потеряна. Существующие программы будут выполняться, а платформа.NET была спроектирована таким образом, чтобы она могла работать с имеющимся программным обеспечением. Связь между компонентами в Windows сейчас почти целиком осуществляется при помощи СОМ. С учетом этого.NET обладает способностью (а) создавать оболочки (wrappers) вокруг существующих компонентов СОМ, так что компоненты.NET могут общаться с ними, и (б) создавать оболочки вокруг компонентов.NET, что позволяет им выглядеть как обычные СОМ-компоненты.

Авторы C# стремились создать язык, сочетающий простоту и выразительность современных объектно-ориентированных языков (вроде Java) c богатством возможностей и мощью C++. По словам Андерса Хейлсберга, C# позаимствовал большинство своих синтаксических конструкций из C++. В частности, в нем присутствуют такие удобные типы данных, как структуры и перечисления (другой потомок C++ -- Java -- лишен этих элементов, что создает определенные неудобства при программировании). Синтаксические конструкции С# унаследованы не только от C++, но и от Visual Basic. Например, в С#, как и в Visual Basic, используются свойства классов. Как C++, С# позволяет производить перегрузку операторов для созданных вами типов Java не поддерживает ни ту, ни другую возможность). С# - это фактически гибрид разных языков. При этом С# синтаксически не менее (если не более) чист, чем Java, так же прост, как Visual Basic, и обладает практически той же мощью и гибкостью, что и C++.

Особенности С#:

Полный и хорошо определенный набор основных типов.
- Встроенная поддержка автоматической генерации XML-документации. Автоматическое освобождение динамически распределенной памяти.
- Возможность отметки классов и методов атрибутами, определяемыми пользователем. Это может быть полезно при документировании и способно воздействовать на процесс компиляции (например, можно пометить методы, которые должны компилироваться только в отладочном режиме).
- Полный доступ к библиотеке базовых классов.NET, а также легкий доступ к Windows API (если это действительно необходимо).
- Указатели и прямой доступ к памяти, если они необходимы. Однако язык разработан таким образом, что практически во всех случаях можно обойтись и без этого.
- Поддержка свойств и событий в стиле VB.
- Простое изменение ключей компиляции. Позволяет получать исполняемые файлы или библиотеки компонентов.NET, которые могут быть вызваны другим кодом так же, как элементы управления ActiveX (компоненты СОМ).
- Возможность использования С# для написания динамических web-страниц ASP.NET.

Одной из областей, для которых не предназначен этот язык, являются критичные по времени и высокопроизводительные программы, когда имеет значение, занимать исполнение цикла 1000 или 1050 машинных циклов, и освобождать ресурсы требуется немедленно. C++ остается в этой области наилучшим из языков низкого уровня. В С# отсутствуют некоторые ключевые моменты, необходимые для создания высокопроизводительных приложений, в частности подставляемые функции и деструкторы, выполнение которых гарантируется в определенных точках кода. Также этот язык активно используется для создания современных видеоигр, например игра Battlefield 3 частично написана на C#, и полностью на технологии.NET

Каспера Бейера «A Brief Totally Accurate History Of Programming Languages».

1800

Жозеф Мари Жаккар учит ткацкий станок читать перфокарты и таким образом создает первое многопоточное устройство обработки данных. Его изобретение было воспринято в штыки ткачами шелка, которые предвидели рождение Skynet.

1842

Ада Лавлейс заскучала, занимаясь своими благородными занятиями. Она набросала в записной книжке то, что позже станет известно как первая опубликованная компьютерная программа. Единственное неудобство было в том, что компьютер тогда еще не изобрели.

1936

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

Позже королева его помиловала, но он, к сожалению, был уже давно мертв к тому времени.

1957

Джон Бэкус создает FORTRAN, первый язык, который использовали настоящие программисты.

1959

Грейс Хоппер изобретает первый язык программирования, ориентированный на промышленное производство, и называет его “общий бизнес-ориентированный язык” (“common business-oriented language”), кратко - COBOL.

1964

Джон Джордж Кемени и Томас Курц решили, что программирование - слишком сложное занятие, а потому нужно вернуться к основам. Они называют свой язык программирования BASIC.

1970

Никлаус Вирт разрабатывает Pascal. Это один из нескольких языков, в создании которых принял участи е Вирт: ему нравилось создавать языки.

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

1972

Деннису Ритчи стало скучно на работе в Bell Labs и он решил создать С с его фигурными скобками, и этот проект получил огромный успех. Впоследствии он добавил ошибки сегментации и другие дружественные к разработчику возможности для повышения производительности.

Поскольку у него еще оставалось пару часов, он со своими приятелями в Bell Labs решил создать пример программы для демонстрации языка С. Так они создали операционную систему под названием Unix.

1980

Алан Кёртис Кэй изобретает объектно-ориентированное программирование и называет его Smalltalk. В Smalltalk все является объектом, даже объект это объект.

1987

Ларри Уолл со своим опытом работы в религиозной сфере становится проповедником, а сво е й доктриной делает Perl.

1983

Жан Давид Ишбиа заметил, что программа Ады Лавлейс никогда так и не запускалась, и решил создать язык и назвать его в ее честь (Ada). Но язык тоже не запускается.

1986

Брэд Кокс и Том Лав решили сделать нечитаемую версию С, основанную на Smalltalk. Они назвали ее Objective-C, но никто не в силах понять ее синтаксис.

1983

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

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

1991

Гвидо ван Россуму не нравятся фигурные скобки, поэтому он изобретает . При выборе синтаксиса языка автор вдохновлялся Монти Пайтоном и его летающим цирком.

1993

Роберту Иерузалимски с друзьями решили, что им нужен локальный, бразильский язык сценариев. В о время локализации была сделана ошибка, которая заставила индексы начинать отсчет с 1 вместо 0. Язык назвал и Lua.

1994

Расмус Лердорф создает движок шаблонов для собственных CGI-сценариев своей домашней страницы и выпускает его дот-файлы в интернет.

Мир решает повсеместно использовать эти дот-файлы, а Расмус в неистовстве добавляет в них некоторые дополнительные привязки к базам данных и называет результат РНР.

1995

Юкихиро Мацумото был не слишком счастлив и заметил, что другие программисты тоже несчастны. Он создает Ruby, чтобы сделать их счастливыми. После создания Ruby “Мац” счастлив, сообщество Ruby счастливо, все счастливы.

1995

Брендан Эйх берет выходной, чтобы разработать язык, с помощью которого будет управляться каждый веб-браузер в мире и в конечном итоге Skynet. Сначала он пошел в Netscape и сказал, что язык называется LiveScript, но за время ревью кода приобрела популярность Java, поэтому было решено использовать фигурные скобки и переименовать язык в JavaScript.

Оказалось, что Java это торговая марка, что могло привести к проблемам, поэтому JavaScript позже был переименован в , но его все равно называют по-старому.

1996

Джеймс Гослинг изобретает Java, первый по-настоящему слишком многословный объектно-ориентированный язык программирования, где шаблоны проектирования превалируют над прагматизмом.

2001

Андерс Хейлсберг заново изобретает Java и называет этот язык C#, потому что программирование на C кажется более крутым, чем на Java. Новая версия Java всем нравится, поскольку совершенно не похожа на Java.

2005

Давид Хейнемейер Ханссон создает веб-фреймворк, позже названный Ruby on Rails. Люди забывают, что это были две разные вещи.

2006

Джон Резиг пишет вспомогательную библиотеку для JavaScript. Все считают, что это язык, и делают себе карьеру на копипасте кода jQuery из интернета.

2009

Кен Томпсон и Роб Пайк решают создать язык, похожий на С, но более «товарный», с большим количеством инструментов для обеспечения безопасности и с Гоферами (Гофер - грызун, персонаж историй про Винни-Пуха, — прим. перев.) в качестве талисманов.

Они называют этот язык Go, решают сделать его код открытым и начинают продавать брендовые наколенники и шлемы с Гофером.

2010

Грэйдон Хор тоже хочет создать язык, подобный С. Он называет его Rust. Все требуют, чтобы каждый кусочек их программ немедленно переписывался на Rust. Грэйдону хочется чего-то более блестящего и он начинает работать над Swift для Apple.

2012

Андерс Хейлсберг хочет писать С# в веб-браузерах. Он создает TypeScript, который по сути является JavaScript с большим количеством Java.

2013

Джереми Ашкенас хочет быть таким же счастливым, как Ruby-разработчики, поэтому создает CoffeeScript, который транслируется в JavaScript, но выглядит скорее как Ruby. Джереми так и не стал таким же по-настоящему счастливым, как Матц и Ruby-разработчики.

2014

Крис Латнер создает Swift, главная цель которого – не быть Objective-C. В конечном итоге этот язык напоминает Java.

Замечание 1

Для работы первых программ нужно было устанавливать ключевые переключатели на передней панели вычислительного устройства. Естественно, с помощью такого способа можно было составлять только небольшие программы. Одна из первых попыток создания полноценного языка программирования была предпринята немецким ученым Конрадом Цузе, который за период 1943–1945 гг. разработал язык Plankalkul. Plankalkul был очень перспективным языком, который фактически являлся языком высокого уровня, однако во времена войны он не получил должной практической реализации, а его описание было опубликовано только в 1972 г.

Машинный код. Ассемблер

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

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

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

Алгоритмические языки

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

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

  • Компиляция (Compilation) – метод выполнения программ, при котором инструкции программы выполняются только том случае, когда собран перевод всего текста программы.
  • Интерпретация (Interpretation) – метод выполнения программ, при котором инструкции программы переводятся и сразу выполняются.

Замечание 2

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

Структурное программирование

В 1954 г. была начата разработка первого компилятора языка высокого уровня. Через два года появился язык Fortran (FORmula TRANslator – «переводчик формул»). Язык содержал средства, которые значительно упрощали разработку, однако программирование на Fortran не было простой задачей: если в коротких программах он был легко понимаемым, то когда дело касалось больших программ язык становился нечитаемым. Несмотря на это, язык был довольно успешным и было выпущено много его версий.

Проблемы были решены после разработки языков структурного программирования: в них появилась возможность создания программных блоков, независимых подпрограмм, поддержки рекурсии и локальных переменных, отсутствие оператора безусловного перехода (GoTo). Таким образом, такие языки стали поддерживать возможность разбиения программы на составляющие элементы.

На протяжении десяти лет было создано достаточно большое число новых языков:

  1. Algol (1958 г.) предназначался для записи алгоритмов, которые составлены из обособленных блоков;
  2. Cobol (1959 г.) использовался для массовой обработки данных в сферах управления и бизнеса;
  3. Basic (1965 г.) позволял писать простые программы, использовался для обучения основам программирования.

Совсем немногие из созданных языков были структурированными. Также были созданы специализированные языки: Lisp, Prolog, Forth и т.д. Особого внимания заслуживает язык Pascal (1970 г.), названный в честь ученого Блеза Паскаля, который использовался как для обучения, так и для решения задач различной сложности. Программы на Pascal легко читаемы, что позволяет быстро находить и исправлять ошибки, также он был хорошо структурированным. Все вышеперечисленное привело к его широкой распространенности, и даже в данное время его активно используют в учебных заведениях.

В 1972 г. появился язык С, что стало успешным шагом в программировании. Язык сочетал в себе преимущества многих языков и обладал большим числом разных нововведений. Широкие возможности, структурированность и относительная простота его изучения позволили языку быстро стать признанным и завоевать место одного из основных языков.

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

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

С 1970-х гг. были заложены основы объектно-ориентированного программирования (ООП), которое возникло как поседствие развития процедурного программирования, при котором данные и подпрограммы их обработки формально не были связаны.

ООП включает следующие основные понятия:

  • Класс – модель ещё не существующего объекта. Фактически он является схемой объекта, описывая его устройство.
  • Объект – экземпляр класса, сущность в адресном пространстве вычислительной системы, которая появляется при создании экземпляра класса.
  • Абстракция – присвоение объекту характеристик, четко определяющих его границы, которые отличают его от всех других объектов. Основной идеей является отделение способа использования составных объектов данных от деталей их реализации в виде более простых объектов.
  • Инкапсуляция – объединение свойств (данных) и методов (подпрограмм) в классе для того, чтобы скрыть данные объекта от остальной программы и обеспечить целостность и независимость объекта (изменение свойств объекта возможно только через специальные методы класса).
  • Наследование – механизм языка, который позволяет описать новый класс на основе уже существующего класса (или классов) с добавлением новых свойств и методов.
  • Полиморфизм – свойство системы использовать объекты с одинаковым интерфейсом без получения информации о его типе и внутренней структуре.

Замечание 3

В 1967 г. появился язык Симула – первый язык программирования, в котором были предложены принципы объектной ориентированности. Он поддерживал работу с объектами, классами, виртуальными методами и т.д., но все эти возможности не получили достойной оценки современников. Тем не менее, большинство этих концепций были заложены Аланом Кэем и Дэном Ингаллсом в язык Smalltalk, который стал первым широко распространённым объектно-ориентированным языком программирования.

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

Развитие Интернета

С развитием технологии WWW (World Wide Web) Интернет стал очень популярным. Было создано большое количество вспомогательных языков для обеспечения работы с Интернетом, оформления сайтов, доступа к ресурсам и т.д.

Становится распространенным интерпретируемый язык Perl, который отличается своей простотой и легкой переносимостью на другие платформы. Он предназначен для написания приложений и CGI-скриптов различной сложности. Также широко используется и играет значительную роль в развитии и функционировании Интернета язык Java.

В 1970-х гг. появился язык SQL – язык структурированных запросов, который был создан для доступа и работы с базами данных.

Для написания кодов страниц веб-сайтов разработан язык разметки гипертекстов HTML, который содержит команды для разметки и оформления текста и графики. Для придания большей привлекательности и функциональности сайта используются:

  • Скрипты JavaScript, которые выполняются в веб-браузере пользователя и используются в основном для улучшения внешнего вида сайта и решения мелких задач.
  • Скрипты PHP, которые выполняются на стороне сервера и посылают в браузер пользователя уже обработанную информацию. Применяются для создания динамических HTML-страниц, гостевых книг, ведения форумов и опросов.
  • CGI-сценарии, которые написаны преимущественно на Perl, C/C++, выполняются на стороне сервера и зависят от конкретных действий пользователя. Применяются, как и сценарии PHP, для создания динамических HTML-страниц, гостевых книг, ведения форумов и опросов.