Пятница — самое время расслабиться и вспомнить, с чего все началось. Представляем вам краткий экскурс в историю разработки от GeekBrains.



Доисторическая эра


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

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

С другой, первый язык программирования в современном представлении зародился лишь во время Второй мировой войны на релейной машине Z4 немецкого изобретателя Конрада Цузе. Его название Планкалкюль (нем. Plankalkul — исчисление планов), и это был полноценный язык высокого уровня, поддерживающий условные операторы, арифметические операции, массивы, циклы, исключения и утверждения. Доподлинно известно, что в конце 40-х годов Планкалкюль позволял ЭВМ решать шахматные задачи.
Изобретение Цузе могло бы изменить ход истории, однако итоги войны и усилия американцев по популяризации собственного машинного языка отложили полноценное явление миру Планкалкюля вплоть до 1972 года.


Z4 в Немецком музее, Мюнхен

Языки для компьютеров



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

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

Качественный скачок произошёл после изобретения транзистора и первых доступных компьютеров. Это побудило в период с 1954-1957 году компанию IBM активно работать над разработкой популярного коммерчески языка Fortran (от англ. Formula и Translation).

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

Далее началось бурное развитие программирования: практически одновременно появились Algol, алгоритмический высокоуровневый язык, активно использовавшийся в СССР и Европе, LISP и COBOL.

Языки для народа


Но по-настоящему массовым программирование стало с появлением языка BASIC в 1964 году. Преподаватели Дартмутского Колледжа Джон Кемени и Томас Курц разработали его для обучения студентов основам программирования ЭВМ.

BASIC был алгоритмическим языком, для его создателей было важно не быстродействие и эффективность, а легкое понимание. Тем не менее BASIC быстро обрёл популярность в реализациях от Microsoft и Apple. Но не все были им довольны. По мнению противников языка простота и бесструктурность ранних версий BASIC поощряли применение порочных и опасных методик разработки.


«Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они умственно изувечены без надежды на восстановление».
Эдсгер Дейкстра.


Кайнозой


В 1960-х годах компания Bell Labs всерьёз взялась за разработку операционной системы Unix для своих миникомпьютеров. Первые ОС были написаны на ассемблере, но эксперимент оказался неудачным.
Потом в алфавитном порядке Кеном Томпсоном и Деннисом Ритчи был специально разработан интерпретируемый язык B (Би), но и в этот раз результат оставлял желать лучшего.

Всё изменилось с третьей попыткой в 1972 году и языком C, который оказался настолько успешным, что и спустя 40 лет занимает важное место в разработке ПО. Например, по данным IEEE Spectrum С в 2015 году стоял на втором месте: «The 2015 Top Ten Programming Languages».

В другом полушарии на останках языка Algol-68 Никлаус Вирт разработал Pascal. Цель он преследовал ту же самую, что и BASIC — простота в обучении и наглядность выполняемых операций.

Несмотря на внешнюю незамысловатость, Pascal оказался крайне эффективным языком не только в деле обучения, но и в серьезной разработке. Он остаётся крайне востребованным как в школах, так и в мире больших приложений: Total Commander, WinRAR, ранние версии Skype и Nero Burning ROM были написаны на Pascal.

В конце 1970-х были сформированы принципы ООП, на основе которых был доработан язык C, получив сперва название «С with classes», а потом более привычное взгляду C++. Отчасти из-за совершенства творения, отчасти из-за славы одного из первопроходцев, C++ долгое время оставался самым востребованным языком. На нём были написаны операционные системы Symbian, Windows и OS X, браузеры Google Chrome и Mozilla, и ещё тысячи популярных приложений.

Через четыре года после появления первой версии C++ Ларри Уолл разработал Perl — «практичный язык для извлечения данных и составления отчётов» (Practical Extraction and Report Language). Изначально язык обрёл популярность благодаря функциям, заложенным в названии, однако позднее расширил свои возможности и аудиторию.

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

Современность


В статье об истории эволюции языков просто обязан упоминаться Python, горячо любимый не только преподавателями GeekBrains, но и, судя по широте использования, многими иностранными университетами и крупными зарубежными компаниями. Его структура и философия направлены на то, чтобы ускорить разработку готового продукта программистом. С точки зрения развития, это куда более совершенный язык, нежели все существовавшие до 1991 года. Он минималистичен, но при этом более читабелен, достаточно часто обновляется и прекрасен по соотношению «скорость — качество разработки».

Впрочем, теми же самыми характеристиками можно описать и Ruby, увидевший свет в 1995 году, с поправкой на то, что у Юкихиро Мацумото было 2 года, чтобы подумать, чем его язык может стать лучше современников.

Развитие интернета в конце XX века требовало более качественных языков обработки текста и данных. Так на свет появились HTML, PHP, CSS и JavaScript, без которых сегодня очень трудно представить веб-разработку.

Вместе с этим появился и Java — объектно-ориентированный язык, использующий виртуальную машину JVM. Это обеспечивает языку практически полную независимость от машины, на которой производится запуск. Совокупность этих факторов и популярность смартфонов c ОС Android позволяет Java возглавлять список самых популярных языков по версии Tiobe, а нам — рекомендовать его начинающим разработчикам в качестве первого или основного.

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

Будущее


Уже сейчас появляются языки программирования, которые можно назвать языками сверхвысокого уровня. Они предназначены не для написания прикладных программ, а для обработки больших массивов данных и статистики. В их числе R, MATLAB и Julia.
Можно предполагать, что в будущем появятся человекоориентированные языки, на которых написать программу будет не сложнее, чем пост в ЖЖ. С другой стороны, квантовые компьютеры потребуют свой особый, квантовый ассемблер.

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

Автор статьи: Илья Бубнов

Комментарии (53)


  1. comargo
    29.04.2016 18:28
    +1

    Сначала написал автору в личку, а потом залез в википедию и удивился…
    PERL — Он таки «практический» или «практичный»? И почему?


    1. loz
      29.04.2016 18:49

      «Perl» is the language
      «perl» is the compiler
      Never «PERL»


  1. interprise
    29.04.2016 18:29
    +4

    «Прямым развитием машинного языка стал язык ассемблера. Это был первый размен скорости на удобство: ассемблер был чуть менее нативным, но гораздо более дружелюбным к программисту.» — о какой скорости идет речь? производительность при использовании ассемблера не падает по сравнению с байт кодом.


    1. j_wayne
      29.04.2016 20:35

      Это да, но его нужно еще транслировать в машинный код перед запуском — а на машинах того времени это вряд ли секунды.


    1. EmmGold
      01.05.2016 17:42

      Текст программы нужно ещё транслировать в машинный код. А в машинных кода можно использовать архитектурные особенности и «особенности» процессора, иногда существенно ускорив выполнение программы.

      Но это применительно к старым процессорам. С современными на такое способны лишь единицы гиков и аутистов.


      1. FForth
        01.05.2016 18:05

        Ой ли :)
        Но возможно «исключение из правил» проект Kolibri OS и подтверждает это.


        1. interprise
          01.05.2016 19:38

          это просто игрушка, даже авторы проекта этого не скрывают


          1. FForth
            01.05.2016 20:43

            Какие основания для этого само утверждения?
            Поддержка от Google в рамках GSOC тоже не показатель?


  1. Per_Ardua
    29.04.2016 18:38
    +2

    Спасибо за статью.
    Думаю, что в ближайшем будущем будет набирать обороты JS. Из-за его лавинообразного развития. После появления node.js его запихивают везде, область его применения увеличилась во много раз. Однако загадывать на долгосрочную перспективу не стоит. Всё еще может измениться.


  1. loz
    29.04.2016 18:47
    +19

    Ну вы даете, написать статью про историю ЯП и не рассказать про такие основы основ как Smalltalk, SML, Scheme и другие. Создается впечатление что ООП появилось первым в C++, а лисп, с которого началось практически все что существует сегодня от сборщиков мусора, до лямбд и замыканий лишь упомянут, и поставлен (!!!) на уровень с Cobol.

    Geekbrains — образовательная площадка для программистов.

    О боже, и эти люди еще учат чему-то?


    1. VaalKIA
      29.04.2016 20:27
      +6

      Учат тому, что Ассемблер это язык программирования, причём жирным шрифтом, тогда как это не язык, а транслятор мнемоник в машинные коды, соответственно для каждого процессора мнемоники разные, потому что разные машинные коды.


      1. IlyaBubnov
        01.05.2016 17:42

        Да вы и сами не знаете разницу между Ассемблером и языком ассемблера, так что сходите поучитесь.


        1. FForth
          01.05.2016 18:12

          Рассматривая современный уровень макросредств ассемблеров
          навряд ли их можно поставить в один ряд с уровнем трансляторов мнемоник в машинные кода.
          FASM ассемблер проводит до ~10 трансляций ассемблерного кода пока не «сопоставит»
          оптимально переходы по размеру (и другие параметры) при получении выходного файла.

          P.S. Даже к изменению мнемоник от производителя можно подойти творчески, как в проекте AБ


  1. Error1024
    29.04.2016 18:51
    +3

    Несмотря на внешнюю незамысловатость, Pascal оказался крайне эффективным языком не только в деле обучения, но и в серьезной разработке. Он остаётся крайне востребованным как в школах, так и в мире больших приложений: Total Commander, WinRAR, ранние версии Skype и Nero Burning ROM были написаны на Pascal.

    Стоит упомянуть о Object Pacal в старых макосях, кроме того ваши примеры програм это Object Pascal/Delphi, а не обычный паскаль. Windows интерфейс скайпа все еще на Delphi/Vcl. WinRAR не на паскале написан.


    1. Error1024
      29.04.2016 18:53
      -1

      Кстати Object C тоже достоен упоминания


      1. loz
        29.04.2016 18:53

        Нет такого языка.


        1. Error1024
          29.04.2016 18:58
          +2

          Fail. Objective-C конечно же


  1. ZoomLS
    29.04.2016 19:48
    +3

    >>Развитие интернета в конце XX века требовало более качественных языков обработки текста и данных. Так на свет появились HTML, PHP, CSS и JavaScript, без которых сегодня очень трудно представить веб-разработку.

    Ну, да. Без php, вообще очень трудно представить веб-разработку :) /sarcasm


  1. Londoner
    29.04.2016 20:16
    +4

    Вот что меня удивляет, почему хорошо продуманные языки вроде Smalltalk, Haskel и т.п. не находят большой аудитории, зато наспех слепленные PHP, Perl и Javascript везде и всюду?


    1. dom1n1k
      29.04.2016 20:57

      Почему более логичный и академичный немецкий менее распространен, чем «странный» английский? :)


      1. KvanTTT
        30.04.2016 00:55
        +4

        Хм, даже интересно стало, что в нем академичного по сравнению с английским.


        1. PHmaster
          30.04.2016 14:04
          +2

          На нем разговаривают немецкие академики. Чаще, чем на английском. Очевидно же.


        1. dom1n1k
          30.04.2016 15:15
          -2

          Более стройная структура, как мне кажется. Меньше исключений из правил.
          Но ответ на исходный вопрос можете не спрашивать — у меня его тоже нет.


        1. lucifer-m
          30.04.2016 16:10

          всё очень просто! У Англичан было больше колоний в былые времена))


        1. ffriend
          30.04.2016 17:31
          +5

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


          В германских языках приняты короткие слова и строгий порядок членов предложения. Типичный пример проявления германских языков в английском — это фразовые глаголы (например, "get up", "jump in" и т.п.). Другой пример — переход существительных в прилагательные (например, horse race — "лошадиные бега", а не "лошадь бега").


          Латинские языки, с другой стороны, имеют более сложное словообразование ("objective opinion" а не "object opinion"), но и порядок слов у них может быть посвободней (см., например, современный французский).


          Из-за смешения двух групп языков английский получился довольно "странным", с кучей исключений и тонкостей. Например, в английском абсолютно нечёткие правила чтения (вы же помните транскрипцию в англо-русских словарях? вот она там не просто так). Названия некоторых стран без какого либо объяснения могут иметь артикль the (Russia, но the Netherlands). Сокращения не всегда консистентны ("he's" — это "he is" или "he has"? "I'd" — это "I would" или "I had"?). Много остатков староанглийского (для большинства глаголов "not" ставится спереди, для модальных и некоторых обычных — позади основного, как это было принято раньше).


          Я почти совсем не знаю немецкий, но вполне поддерживаю мысль, что английский — "странный" :)


          1. dom1n1k
            02.05.2016 04:05

            Вот про исключения я и говорил. Один из моих любимых примеров:
            https://www.youtube.com/watch?v=1B1vMOiEjhY


    1. lucifer-m
      29.04.2016 22:06

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


    1. alaska332
      30.04.2016 05:03

      Вы много программ написали на Smalltalk? Почему?


    1. ZXSi
      01.05.2016 18:07

      Маркетинг. Это же свободный рынок. Делаешь крутой язык/фреймворк. Платишь крутым спикерам. У тебя куча заказчиков, которые уверены, что это технология поможет им поднять эффективность разработки на 99999%. Разработчики верят, что им это поможет вообще ничего не делать. Не успел глазом моргнуть, а уже пошла движуха. Любые критикующие сливаются типичными RTFM/вы не умеете готовить!/у вас не те задачи. Когда приходит понимание что очередное чудо вовсе не чудо, уже понаписано куча проектов и вложено куча денег и всё это надо поддерживать, в том числе и костылями. А у нас всё хорошо. Ждем когда нас купит крутая компания или сделаем платную подписку, можно подсадить на свою платформу, в конце концов можно собирать пожертвования. Рынок есть рынок. Можно, стиснув зубы, войти в ряды, можно попытаться хапануть самому. Ну и самое классное, что замерить эффективность технологии невозможно, поэтому пиар так сильно и работает. Ведь всегда найдется человек, который расскажет, что он пишет сайты на асме и что это эффективнее чем писать на чем-то другом, мало того еще и пруфов накидают, на компании которые сменили асм на руби или руби на асм и все стало быстрее работать и разрабатываться, и тесты любые на реальных данных найдутся где любая выбранная технология будет в 10 раз эффективнее любых до абсурда приведенных конкурентов и ничего нельзя этому противопоставить, кроме своего опыта, но если вы не пиарщик, то на ваш опыт всем наплевать. Пока не будут выработаны методы оценки эффективности разработки, у нас будет продолжаться очень хорошо коррелирующий с рынком форекс и прочей дичи рынок стартапов, где 2% рады, а 98% не признаются, что проиграли.


    1. wordwild
      01.05.2016 18:07

      Haskel — is a manufacturer of highly engineered fluid and gas handling equipment designed to generate, store and control high pressure gases and liquids.

      При чём тут языки программирования?


      1. Londoner
        02.05.2016 12:38

        А Вы ему в конце ещё l добавьте, я поленился :)


  1. Dima4ka
    29.04.2016 21:19

    А что-нибудь интересное про C#? :)


    1. EndUser
      01.05.2016 03:07

      http://russian.joelonsoftware.com/Articles/HowMicrosoftLosttheWaronA.html
      «И вот пришел .NET. Это был великий проект, супер-пупер унифицирующий проект, призванный расчистить эту кашу раз и навсегда. Конечно, с управлением памятью. Останется и Visual Basic, но он заполучит новый язык, по духу фактически тот же Visual Basic, но с новым С-подобным синтаксисом фигурных скобок и точек с запятой. Самое главное, новый гибрид Visual Basic и С будет называться Visual C#, так что вам больше не придется говорить, что вы программируете на Бейсике.»

      ;-)


    1. andrew-tifon
      01.05.2016 17:42

      Господь с вами, тут про Haskel или Smalltalk ни слова, а вы про C# хотите.


  1. DaneSoul
    29.04.2016 22:06
    +3

    > Уже сейчас появляются языки программирования, которые можно назвать языками сверхвысокого уровня. Они предназначены не для написания прикладных программ, а для обработки больших массивов данных и статистики. В их числе R, MATLAB и Julia.

    R появился еще в 1993 году, не говоря о том, что S лежащий в его основе появился 40 лет назад, не похоже на «Уже сейчас появляются».
    Да и особой сверхуровневости я в нем не заметил — он больше похож на разношерстную подборку конкретных функций под конкретные задачи, чем на продуманный язык программирования с четкой структурой.


  1. apkotelnikov
    29.04.2016 23:54
    +3

    Забыт Ada с его строгой типизацией, Fort как пример того, что все можно сделать из ничего. Ничего о verilog и его собратьях.


    1. FForth
      01.05.2016 17:42

      Правильнее Forth (Форт) привел к созданию направления конкатенавных языков.
      Пример Factor, 8th и других разных Форт-подобных или использующих стек как один из основных элементов организации вычислительной модели.
      А Форт, где то, ровесник С и до сих пор не утратил своей актуальности, если посмотреть проекты, где он в той или иной степени
      «реализован».
      Из 'скриптовых' языков также познавателен и Euphoria.
      Примеры решения задач на разных языках программирования rosettacode.org/wiki/Rosetta_Code


      1. speakingfish
        06.05.2016 20:32

        Вообще сейчас Forth используется практически на каждом компьютере и принтере. Ибо Postscript — это Forth, а PDF — это запакованный Postscript с ресурсами.


        1. FForth
          06.05.2016 22:02

          Postscript — это, всё же, Postscript, а Forth — это Forth и авторы у них разные.
          Хотя определённая доля общего дизайна в этих языках присутствует.


    1. apkotelnikov
      01.05.2016 18:11

      Да, вы правы, опечатка. На самом деле можно ещё аналогичных языков привести и не только к Forth. Но на мой взгляд основная разница не в названии а в подходе. Пишем на C, не забываем обрабатывать исключения и делать range check, в ответ получаем исключительную гибкость в части кода, C# + dot Net быстрая разработка но скорость исполнения оставляет желать лучшего. Перешли на ASM — «сами, все сами» за компактность и быстродействие на высоте ну и так далее. Статья была бы существенно познавательнее и интереснее если бы описывала различия языков с этой точки зрения.


    1. Ermak
      01.05.2016 23:23

      Forth


      1. FForth
        02.05.2016 10:51

        Немного «рекламы» (пришло информационное письмо) :)
        Стартовал сбор средств на разработку 8th во встроеных системах для IOT устройств на площадке indiegogo
        https://www.indiegogo.com/projects/8th-mobile-desktop-and-now-embedded#/
        Предварительная компоновка платы (сделанная одним из пользователей 8th) такая: http://8th-dev.com/e8thv1a_ast.png
        на STM32F756


  1. Sirikid
    30.04.2016 03:47
    +7

    Смешались в кучу кони, люди,
    И залпы тысячи орудий
    Слились в протяжный вой…


  1. DmitryAnatolich
    30.04.2016 08:43
    +5

    Статья ради статьи?

    Простая и максимально поверхностная пробежка оп ЯП.
    Нет ни слова ни про Scala, Erlang, Go, Rust, R, SQL (который хоть и не является языком программирования, но HTML-то вы указали). Ровно одно слово про COBOL, несмотря на его историческое значение.
    Совсем ничего нет про «железные» языки: от программируемых калькуляторов (тоже ведь ЯП!) до FPGA.

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

    Может стоило хорошо перевести статью из Вики и углубляться по ссылкам или взять за основу

    любую из диаграмм, изображающих зависимости и развитие языков?
    image


    1. FForth
      01.05.2016 17:56

      Форт где то на окраине оказался :)
      А на самом деле где то так https://www.complang.tuwien.ac.at/forth/family-tree/
      хотя и далеко в не полной генеалогии.


  1. olku
    30.04.2016 15:01
    -1

    Простите, но HTML и CSS к языкам «обработки данных» отношения не имеют. Тема не раскрыта.


    1. olku
      01.05.2016 17:05

      Учащимся из энциклопедии: обработка данных — «систематизированная последовательность операций, совершаемых с данными для получения новой информации путем вычислений, пересмотра и уточнения имеющейся информации» Языки разметки HTML и CSS таковыми не являются. А расширение аудитории ресурса обязательно ведет к его деградации?


    1. FForth
      01.05.2016 17:49

      Схема языков http://joyreactor.cc/post/109678
      Картинку не получилось вставить :)


  1. FemaleLogix
    01.05.2016 17:40

    Agda & Coq — вот вам то самое будущее. А насчёт человекоориентированных языков — спасибо, не надо.


    1. Sirikid
      01.05.2016 22:15

      Это только для 31337ы


  1. Saffron
    01.05.2016 18:08

    Как можно было назвать perl, не указав awt?

    Да и R язык не сверхвысокого уровня. По возможностям он близок к обрезанному питону. Я вообще не понимаю, чего такого особенного есть в языках R или матлаб. Обычные динамические языки высокого уровня. Да, для них есть прикладные библиотеки определённой направленности. Но те же самые библиотеки можно подключать и к питону. Проект sage называется.

    Ну и как тут справедливо заметили, куда-то потерялась вся ветка развития функциональных языков, ни древние ML, ни современный haskell. Ещё почему-то обошли стороной попытки построения ИИ в пределах отдельно взятого языка prolog и распределённый erlang с его let it crash.


  1. daiver19
    01.05.2016 18:08

    «В их числе R, MATLAB и Julia.» — Это весьма специфичные write-only языки.

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


    1. FForth
      01.05.2016 18:25

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