Эволюция языков программирования

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



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


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

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

    С другой, первый язык программирования в современном представлении зародился лишь во время Второй мировой войны на релейной машине Z4 немецкого изобретателя Конрада Цузе. Его название Планкалкюль (нем. Plankalkül — исчисление планов), и это был полноценный язык высокого уровня, поддерживающий условные операторы, арифметические операции, массивы, циклы, исключения и утверждения. Доподлинно известно, что в конце 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.
    Можно предполагать, что в будущем появятся человекоориентированные языки, на которых написать программу будет не сложнее, чем пост в ЖЖ. С другой стороны, квантовые компьютеры потребуют свой особый, квантовый ассемблер.

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

    Автор статьи: Илья Бубнов
    GeekBrains
    ОБРАЗОВАТЕЛЬНАЯ ПЛАТФОРМА

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

      +1
      Сначала написал автору в личку, а потом залез в википедию и удивился…
      PERL — Он таки «практический» или «практичный»? И почему?
        0
        «Perl» is the language
        «perl» is the compiler
        Never «PERL»
        +4
        «Прямым развитием машинного языка стал язык ассемблера. Это был первый размен скорости на удобство: ассемблер был чуть менее нативным, но гораздо более дружелюбным к программисту.» — о какой скорости идет речь? производительность при использовании ассемблера не падает по сравнению с байт кодом.
          0
          Это да, но его нужно еще транслировать в машинный код перед запуском — а на машинах того времени это вряд ли секунды.
            0
            Текст программы нужно ещё транслировать в машинный код. А в машинных кода можно использовать архитектурные особенности и «особенности» процессора, иногда существенно ускорив выполнение программы.

            Но это применительно к старым процессорам. С современными на такое способны лишь единицы гиков и аутистов.
              0
              Ой ли :)
              Но возможно «исключение из правил» проект Kolibri OS и подтверждает это.
                0
                это просто игрушка, даже авторы проекта этого не скрывают
                  0
                  Какие основания для этого само утверждения?
                  Поддержка от Google в рамках GSOC тоже не показатель?
            +2
            Спасибо за статью.
            Думаю, что в ближайшем будущем будет набирать обороты JS. Из-за его лавинообразного развития. После появления node.js его запихивают везде, область его применения увеличилась во много раз. Однако загадывать на долгосрочную перспективу не стоит. Всё еще может измениться.
              +19
              Ну вы даете, написать статью про историю ЯП и не рассказать про такие основы основ как Smalltalk, SML, Scheme и другие. Создается впечатление что ООП появилось первым в C++, а лисп, с которого началось практически все что существует сегодня от сборщиков мусора, до лямбд и замыканий лишь упомянут, и поставлен (!!!) на уровень с Cobol.
              Geekbrains — образовательная площадка для программистов.

              О боже, и эти люди еще учат чему-то?
                +6
                Учат тому, что Ассемблер это язык программирования, причём жирным шрифтом, тогда как это не язык, а транслятор мнемоник в машинные коды, соответственно для каждого процессора мнемоники разные, потому что разные машинные коды.
                  0
                  Да вы и сами не знаете разницу между Ассемблером и языком ассемблера, так что сходите поучитесь.
                    0
                    Рассматривая современный уровень макросредств ассемблеров
                    навряд ли их можно поставить в один ряд с уровнем трансляторов мнемоник в машинные кода.
                    FASM ассемблер проводит до ~10 трансляций ассемблерного кода пока не «сопоставит»
                    оптимально переходы по размеру (и другие параметры) при получении выходного файла.

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

                Стоит упомянуть о Object Pacal в старых макосях, кроме того ваши примеры програм это Object Pascal/Delphi, а не обычный паскаль. Windows интерфейс скайпа все еще на Delphi/Vcl. WinRAR не на паскале написан.
                  –1
                  Кстати Object C тоже достоен упоминания
                    0
                    Нет такого языка.
                      +2
                      Fail. Objective-C конечно же
                  +3
                  >>Развитие интернета в конце XX века требовало более качественных языков обработки текста и данных. Так на свет появились HTML, PHP, CSS и JavaScript, без которых сегодня очень трудно представить веб-разработку.

                  Ну, да. Без php, вообще очень трудно представить веб-разработку :) /sarcasm
                    +4
                    Вот что меня удивляет, почему хорошо продуманные языки вроде Smalltalk, Haskel и т.п. не находят большой аудитории, зато наспех слепленные PHP, Perl и Javascript везде и всюду?
                      0
                      Почему более логичный и академичный немецкий менее распространен, чем «странный» английский? :)
                        +4

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

                          +2
                          На нем разговаривают немецкие академики. Чаще, чем на английском. Очевидно же.
                            –2
                            Более стройная структура, как мне кажется. Меньше исключений из правил.
                            Но ответ на исходный вопрос можете не спрашивать — у меня его тоже нет.
                              0
                              всё очень просто! У Англичан было больше колоний в былые времена))
                                +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" ставится спереди, для модальных и некоторых обычных — позади основного, как это было принято раньше).


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

                                  0
                                  Вот про исключения я и говорил. Один из моих любимых примеров:
                                  https://www.youtube.com/watch?v=1B1vMOiEjhY
                              0
                              Потому что в них очень сильно намудрили (огромный порог вхождения), а пхп… Я его за три дня выучил и написал сайтик)) (без ооп и т.д. но зато написал)
                                0
                                Вы много программ написали на Smalltalk? Почему?
                                  0
                                  Маркетинг. Это же свободный рынок. Делаешь крутой язык/фреймворк. Платишь крутым спикерам. У тебя куча заказчиков, которые уверены, что это технология поможет им поднять эффективность разработки на 99999%. Разработчики верят, что им это поможет вообще ничего не делать. Не успел глазом моргнуть, а уже пошла движуха. Любые критикующие сливаются типичными RTFM/вы не умеете готовить!/у вас не те задачи. Когда приходит понимание что очередное чудо вовсе не чудо, уже понаписано куча проектов и вложено куча денег и всё это надо поддерживать, в том числе и костылями. А у нас всё хорошо. Ждем когда нас купит крутая компания или сделаем платную подписку, можно подсадить на свою платформу, в конце концов можно собирать пожертвования. Рынок есть рынок. Можно, стиснув зубы, войти в ряды, можно попытаться хапануть самому. Ну и самое классное, что замерить эффективность технологии невозможно, поэтому пиар так сильно и работает. Ведь всегда найдется человек, который расскажет, что он пишет сайты на асме и что это эффективнее чем писать на чем-то другом, мало того еще и пруфов накидают, на компании которые сменили асм на руби или руби на асм и все стало быстрее работать и разрабатываться, и тесты любые на реальных данных найдутся где любая выбранная технология будет в 10 раз эффективнее любых до абсурда приведенных конкурентов и ничего нельзя этому противопоставить, кроме своего опыта, но если вы не пиарщик, то на ваш опыт всем наплевать. Пока не будут выработаны методы оценки эффективности разработки, у нас будет продолжаться очень хорошо коррелирующий с рынком форекс и прочей дичи рынок стартапов, где 2% рады, а 98% не признаются, что проиграли.
                                    0
                                    Haskel — is a manufacturer of highly engineered fluid and gas handling equipment designed to generate, store and control high pressure gases and liquids.

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

                                      ;-)
                                        0
                                        Господь с вами, тут про Haskel или Smalltalk ни слова, а вы про C# хотите.
                                        +3
                                        > Уже сейчас появляются языки программирования, которые можно назвать языками сверхвысокого уровня. Они предназначены не для написания прикладных программ, а для обработки больших массивов данных и статистики. В их числе R, MATLAB и Julia.

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

                                          +3
                                          Забыт Ada с его строгой типизацией, Fort как пример того, что все можно сделать из ничего. Ничего о verilog и его собратьях.
                                            0
                                            Правильнее Forth (Форт) привел к созданию направления конкатенавных языков.
                                            Пример Factor, 8th и других разных Форт-подобных или использующих стек как один из основных элементов организации вычислительной модели.
                                            А Форт, где то, ровесник С и до сих пор не утратил своей актуальности, если посмотреть проекты, где он в той или иной степени
                                            «реализован».
                                            Из 'скриптовых' языков также познавателен и Euphoria.
                                            Примеры решения задач на разных языках программирования rosettacode.org/wiki/Rosetta_Code
                                              0
                                              Вообще сейчас Forth используется практически на каждом компьютере и принтере. Ибо Postscript — это Forth, а PDF — это запакованный Postscript с ресурсами.
                                                0
                                                Postscript — это, всё же, Postscript, а Forth — это Forth и авторы у них разные.
                                                Хотя определённая доля общего дизайна в этих языках присутствует.
                                              0
                                              Да, вы правы, опечатка. На самом деле можно ещё аналогичных языков привести и не только к Forth. Но на мой взгляд основная разница не в названии а в подходе. Пишем на C, не забываем обрабатывать исключения и делать range check, в ответ получаем исключительную гибкость в части кода, C# + dot Net быстрая разработка но скорость исполнения оставляет желать лучшего. Перешли на ASM — «сами, все сами» за компактность и быстродействие на высоте ну и так далее. Статья была бы существенно познавательнее и интереснее если бы описывала различия языков с этой точки зрения.
                                                0
                                                Forth
                                                  0
                                                  Немного «рекламы» (пришло информационное письмо) :)
                                                  Стартовал сбор средств на разработку 8th во встроеных системах для IOT устройств на площадке indiegogo
                                                  https://www.indiegogo.com/projects/8th-mobile-desktop-and-now-embedded#/
                                                  Предварительная компоновка платы (сделанная одним из пользователей 8th) такая: http://8th-dev.com/e8thv1a_ast.png
                                                  на STM32F756
                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                  +5
                                                  Статья ради статьи?

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

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

                                                  Может стоило хорошо перевести статью из Вики и углубляться по ссылкам или взять за основу
                                                  любую из диаграмм, изображающих зависимости и развитие языков?
                                                  image
                                                    0
                                                    Форт где то на окраине оказался :)
                                                    А на самом деле где то так https://www.complang.tuwien.ac.at/forth/family-tree/
                                                    хотя и далеко в не полной генеалогии.
                                                    –1
                                                    Простите, но HTML и CSS к языкам «обработки данных» отношения не имеют. Тема не раскрыта.
                                                      0
                                                      Учащимся из энциклопедии: обработка данных — «систематизированная последовательность операций, совершаемых с данными для получения новой информации путем вычислений, пересмотра и уточнения имеющейся информации» Языки разметки HTML и CSS таковыми не являются. А расширение аудитории ресурса обязательно ведет к его деградации?
                                                        0
                                                        Схема языков http://joyreactor.cc/post/109678
                                                        Картинку не получилось вставить :)
                                                        0
                                                        Agda & Coq — вот вам то самое будущее. А насчёт человекоориентированных языков — спасибо, не надо.
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                          0
                                                          Как можно было назвать perl, не указав awt?

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

                                                          Ну и как тут справедливо заметили, куда-то потерялась вся ветка развития функциональных языков, ни древние ML, ни современный haskell. Ещё почему-то обошли стороной попытки построения ИИ в пределах отдельно взятого языка prolog и распределённый erlang с его let it crash.
                                                            0
                                                            «В их числе R, MATLAB и Julia.» — Это весьма специфичные write-only языки.

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

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

                                                            Самое читаемое