Доисторическая эра
С точки зрения определения даты рождения языка программирования существует некоторая двойственность.
С одной стороны, в первой половине 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)
interprise
29.04.2016 18:29+4«Прямым развитием машинного языка стал язык ассемблера. Это был первый размен скорости на удобство: ассемблер был чуть менее нативным, но гораздо более дружелюбным к программисту.» — о какой скорости идет речь? производительность при использовании ассемблера не падает по сравнению с байт кодом.
j_wayne
29.04.2016 20:35Это да, но его нужно еще транслировать в машинный код перед запуском — а на машинах того времени это вряд ли секунды.
EmmGold
01.05.2016 17:42Текст программы нужно ещё транслировать в машинный код. А в машинных кода можно использовать архитектурные особенности и «особенности» процессора, иногда существенно ускорив выполнение программы.
Но это применительно к старым процессорам. С современными на такое способны лишь единицы гиков и аутистов.FForth
01.05.2016 18:05Ой ли :)
Но возможно «исключение из правил» проект Kolibri OS и подтверждает это.interprise
01.05.2016 19:38это просто игрушка, даже авторы проекта этого не скрывают
FForth
01.05.2016 20:43Какие основания для этого само утверждения?
Поддержка от Google в рамках GSOC тоже не показатель?
Per_Ardua
29.04.2016 18:38+2Спасибо за статью.
Думаю, что в ближайшем будущем будет набирать обороты JS. Из-за его лавинообразного развития. После появления node.js его запихивают везде, область его применения увеличилась во много раз. Однако загадывать на долгосрочную перспективу не стоит. Всё еще может измениться.
loz
29.04.2016 18:47+19Ну вы даете, написать статью про историю ЯП и не рассказать про такие основы основ как Smalltalk, SML, Scheme и другие. Создается впечатление что ООП появилось первым в C++, а лисп, с которого началось практически все что существует сегодня от сборщиков мусора, до лямбд и замыканий лишь упомянут, и поставлен (!!!) на уровень с Cobol.
Geekbrains — образовательная площадка для программистов.
О боже, и эти люди еще учат чему-то?VaalKIA
29.04.2016 20:27+6Учат тому, что Ассемблер это язык программирования, причём жирным шрифтом, тогда как это не язык, а транслятор мнемоник в машинные коды, соответственно для каждого процессора мнемоники разные, потому что разные машинные коды.
IlyaBubnov
01.05.2016 17:42Да вы и сами не знаете разницу между Ассемблером и языком ассемблера, так что сходите поучитесь.
FForth
01.05.2016 18:12Рассматривая современный уровень макросредств ассемблеров
навряд ли их можно поставить в один ряд с уровнем трансляторов мнемоник в машинные кода.
FASM ассемблер проводит до ~10 трансляций ассемблерного кода пока не «сопоставит»
оптимально переходы по размеру (и другие параметры) при получении выходного файла.
P.S. Даже к изменению мнемоник от производителя можно подойти творчески, как в проекте AБ
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 не на паскале написан.
ZoomLS
29.04.2016 19:48+3>>Развитие интернета в конце XX века требовало более качественных языков обработки текста и данных. Так на свет появились HTML, PHP, CSS и JavaScript, без которых сегодня очень трудно представить веб-разработку.
Ну, да. Без php, вообще очень трудно представить веб-разработку :) /sarcasm
Londoner
29.04.2016 20:16+4Вот что меня удивляет, почему хорошо продуманные языки вроде Smalltalk, Haskel и т.п. не находят большой аудитории, зато наспех слепленные PHP, Perl и Javascript везде и всюду?
dom1n1k
29.04.2016 20:57Почему более логичный и академичный немецкий менее распространен, чем «странный» английский? :)
KvanTTT
30.04.2016 00:55+4Хм, даже интересно стало, что в нем академичного по сравнению с английским.
PHmaster
30.04.2016 14:04+2На нем разговаривают немецкие академики. Чаще, чем на английском. Очевидно же.
dom1n1k
30.04.2016 15:15-2Более стройная структура, как мне кажется. Меньше исключений из правил.
Но ответ на исходный вопрос можете не спрашивать — у меня его тоже нет.
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" ставится спереди, для модальных и некоторых обычных — позади основного, как это было принято раньше).
Я почти совсем не знаю немецкий, но вполне поддерживаю мысль, что английский — "странный" :)
dom1n1k
02.05.2016 04:05Вот про исключения я и говорил. Один из моих любимых примеров:
https://www.youtube.com/watch?v=1B1vMOiEjhY
lucifer-m
29.04.2016 22:06Потому что в них очень сильно намудрили (огромный порог вхождения), а пхп… Я его за три дня выучил и написал сайтик)) (без ооп и т.д. но зато написал)
ZXSi
01.05.2016 18:07Маркетинг. Это же свободный рынок. Делаешь крутой язык/фреймворк. Платишь крутым спикерам. У тебя куча заказчиков, которые уверены, что это технология поможет им поднять эффективность разработки на 99999%. Разработчики верят, что им это поможет вообще ничего не делать. Не успел глазом моргнуть, а уже пошла движуха. Любые критикующие сливаются типичными RTFM/вы не умеете готовить!/у вас не те задачи. Когда приходит понимание что очередное чудо вовсе не чудо, уже понаписано куча проектов и вложено куча денег и всё это надо поддерживать, в том числе и костылями. А у нас всё хорошо. Ждем когда нас купит крутая компания или сделаем платную подписку, можно подсадить на свою платформу, в конце концов можно собирать пожертвования. Рынок есть рынок. Можно, стиснув зубы, войти в ряды, можно попытаться хапануть самому. Ну и самое классное, что замерить эффективность технологии невозможно, поэтому пиар так сильно и работает. Ведь всегда найдется человек, который расскажет, что он пишет сайты на асме и что это эффективнее чем писать на чем-то другом, мало того еще и пруфов накидают, на компании которые сменили асм на руби или руби на асм и все стало быстрее работать и разрабатываться, и тесты любые на реальных данных найдутся где любая выбранная технология будет в 10 раз эффективнее любых до абсурда приведенных конкурентов и ничего нельзя этому противопоставить, кроме своего опыта, но если вы не пиарщик, то на ваш опыт всем наплевать. Пока не будут выработаны методы оценки эффективности разработки, у нас будет продолжаться очень хорошо коррелирующий с рынком форекс и прочей дичи рынок стартапов, где 2% рады, а 98% не признаются, что проиграли.
Dima4ka
29.04.2016 21:19А что-нибудь интересное про C#? :)
EndUser
01.05.2016 03:07http://russian.joelonsoftware.com/Articles/HowMicrosoftLosttheWaronA.html
«И вот пришел .NET. Это был великий проект, супер-пупер унифицирующий проект, призванный расчистить эту кашу раз и навсегда. Конечно, с управлением памятью. Останется и Visual Basic, но он заполучит новый язык, по духу фактически тот же Visual Basic, но с новым С-подобным синтаксисом фигурных скобок и точек с запятой. Самое главное, новый гибрид Visual Basic и С будет называться Visual C#, так что вам больше не придется говорить, что вы программируете на Бейсике.»
;-)
andrew-tifon
01.05.2016 17:42Господь с вами, тут про Haskel или Smalltalk ни слова, а вы про C# хотите.
DaneSoul
29.04.2016 22:06+3> Уже сейчас появляются языки программирования, которые можно назвать языками сверхвысокого уровня. Они предназначены не для написания прикладных программ, а для обработки больших массивов данных и статистики. В их числе R, MATLAB и Julia.
R появился еще в 1993 году, не говоря о том, что S лежащий в его основе появился 40 лет назад, не похоже на «Уже сейчас появляются».
Да и особой сверхуровневости я в нем не заметил — он больше похож на разношерстную подборку конкретных функций под конкретные задачи, чем на продуманный язык программирования с четкой структурой.
apkotelnikov
29.04.2016 23:54+3Забыт Ada с его строгой типизацией, Fort как пример того, что все можно сделать из ничего. Ничего о verilog и его собратьях.
FForth
01.05.2016 17:42Правильнее Forth (Форт) привел к созданию направления конкатенавных языков.
Пример Factor, 8th и других разных Форт-подобных или использующих стек как один из основных элементов организации вычислительной модели.
А Форт, где то, ровесник С и до сих пор не утратил своей актуальности, если посмотреть проекты, где он в той или иной степени
«реализован».
Из 'скриптовых' языков также познавателен и Euphoria.
Примеры решения задач на разных языках программирования rosettacode.org/wiki/Rosetta_Codespeakingfish
06.05.2016 20:32Вообще сейчас Forth используется практически на каждом компьютере и принтере. Ибо Postscript — это Forth, а PDF — это запакованный Postscript с ресурсами.
FForth
06.05.2016 22:02Postscript — это, всё же, Postscript, а Forth — это Forth и авторы у них разные.
Хотя определённая доля общего дизайна в этих языках присутствует.
apkotelnikov
01.05.2016 18:11Да, вы правы, опечатка. На самом деле можно ещё аналогичных языков привести и не только к Forth. Но на мой взгляд основная разница не в названии а в подходе. Пишем на C, не забываем обрабатывать исключения и делать range check, в ответ получаем исключительную гибкость в части кода, C# + dot Net быстрая разработка но скорость исполнения оставляет желать лучшего. Перешли на ASM — «сами, все сами» за компактность и быстродействие на высоте ну и так далее. Статья была бы существенно познавательнее и интереснее если бы описывала различия языков с этой точки зрения.
Ermak
01.05.2016 23:23Forth
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
Sirikid
30.04.2016 03:47+7Смешались в кучу кони, люди,
И залпы тысячи орудий
Слились в протяжный вой…
DmitryAnatolich
30.04.2016 08:43+5Статья ради статьи?
Простая и максимально поверхностная пробежка оп ЯП.
Нет ни слова ни про Scala, Erlang, Go, Rust, R, SQL (который хоть и не является языком программирования, но HTML-то вы указали). Ровно одно слово про COBOL, несмотря на его историческое значение.
Совсем ничего нет про «железные» языки: от программируемых калькуляторов (тоже ведь ЯП!) до FPGA.
Не помешали бы и краткие фрагменты кода, демонстрирующие особенности языков.
Может стоило хорошо перевести статью из Вики и углубляться по ссылкам или взять за основулюбую из диаграмм, изображающих зависимости и развитие языков?FForth
01.05.2016 17:56Форт где то на окраине оказался :)
А на самом деле где то так https://www.complang.tuwien.ac.at/forth/family-tree/
хотя и далеко в не полной генеалогии.
olku
30.04.2016 15:01-1Простите, но HTML и CSS к языкам «обработки данных» отношения не имеют. Тема не раскрыта.
olku
01.05.2016 17:05Учащимся из энциклопедии: обработка данных — «систематизированная последовательность операций, совершаемых с данными для получения новой информации путем вычислений, пересмотра и уточнения имеющейся информации» Языки разметки HTML и CSS таковыми не являются. А расширение аудитории ресурса обязательно ведет к его деградации?
FForth
01.05.2016 17:49Схема языков http://joyreactor.cc/post/109678
Картинку не получилось вставить :)
FemaleLogix
01.05.2016 17:40Agda & Coq — вот вам то самое будущее. А насчёт человекоориентированных языков — спасибо, не надо.
Saffron
01.05.2016 18:08Как можно было назвать perl, не указав awt?
Да и R язык не сверхвысокого уровня. По возможностям он близок к обрезанному питону. Я вообще не понимаю, чего такого особенного есть в языках R или матлаб. Обычные динамические языки высокого уровня. Да, для них есть прикладные библиотеки определённой направленности. Но те же самые библиотеки можно подключать и к питону. Проект sage называется.
Ну и как тут справедливо заметили, куда-то потерялась вся ветка развития функциональных языков, ни древние ML, ни современный haskell. Ещё почему-то обошли стороной попытки построения ИИ в пределах отдельно взятого языка prolog и распределённый erlang с его let it crash.
daiver19
01.05.2016 18:08«В их числе R, MATLAB и Julia.» — Это весьма специфичные write-only языки.
Ну и я не думаю, что в будущем что-то может радикально измениться в плане используемых языков — с каждым годом наследие старых языков становится всё больше и переход на что-либо новое все более болезненным и рискованным. Ведь суть не cтолько в синтаксическом сахаре, сколько в библиотеках и сообществе.FForth
01.05.2016 18:25Можно сказать больше.
Суть в существующих и работающих проектах не суть определяемых, зачастую, языком программирования.
comargo
Сначала написал автору в личку, а потом залез в википедию и удивился…
PERL — Он таки «практический» или «практичный»? И почему?
loz
«Perl» is the language
«perl» is the compiler
Never «PERL»