habrahabr

Главный секрет успеха языков программирования

  • четверг, 3 апреля 2025 г. в 00:00:13
https://habr.com/ru/articles/896766/

Давным-давно, когда компьютеры ещё были большими, а программы маленькими…
Хотя, нет, не настолько давно.

Давным-давно, когда в ноутбуки ещё не догадались встраивать Wi-Fi, а в телефоны — Bluetooth, а многие нынешние айтишники ещё не родились.

В общем, где-то в самом начале века (году примерно так в 2002-ом) на тогдашнем Хабре (кажется, это тогда называлось LiveJournal, «но это не точно!») вышла одна интересная статья, в которой автор, рассматривая разные языки программирования, обнаружил одну удивительную закономерность и случайно открыл главный секрет популярности любого языка.

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

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

Слабонервным и впечатлительным просьба отойти от экранов, мы начинаем.
Но сперва.

Предупреждение

Статья является шуточной!

Преподавателям кафедр алгоритмических языков (моё уважение), программистам, знающим только один язык (разумеется, тот, который самый лучший!), людям не умеющим в иронию, просьба не обижаться!

Если вам покажется, что автор идиот несправедлив к какому-то из языков, вернитесь сюда и перечитайте, пожалуйста, предупреждение с самого начала!

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

Второе предупреждение

Далее по тексту много, очень много картинок из Википедии.

Итак,

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

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

Top индекса TIOBE
Top индекса TIOBE

Лидеры тут обычно каждый вечер одни и те же: Python, C++, C, Java.

Python

Прекрасный язык (особенно, если уметь им пользоваться), простой, понятный, удобный. Три страницы кода на Go можно записать однострочным list comprehension.

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

А вот автор этого замечательного языка, Гвидо ван Россум (Guido van Rossum):

Гвидо ван Россум (Guido van Rossum)
Гвидо ван Россум (Guido van Rossum)

C++

Тоже один из столпов всего современного IT, невероятно быстрый (я, конечно же, не про компиляцию), простой (в книге автора на 1800 страниц самые основные моменты перечислены) и безопасный (осторожно, дампы!).

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

Создатель языка C++ — Бьёрн Страуструп (Bjarne Stroustrup):

Бьёрн Страуструп (Bjarne Stroustrup)
Бьёрн Страуструп (Bjarne Stroustrup)

C

Предшественник C++, не такой выразительный и удобный и книжки поменьше, но вполне себе целая эпоха в программировании. Сколько на нём всего написано — не перечислить, сами всё знаете, синтаксис унаследован многими другими языками из списка. Уже более 50 лет в строю и пока никуда не собирается.

Вот заслуженные авторы языка, Кен Томпсон (Ken Thompson) и Деннис Ритчи (Dennis Ritchie) в молодости (а это, на минуточку, 1973 год!).

Кен Томпсон (Ken Thompson) и Деннис Ритчи (Dennis Ritchie)
Кен Томпсон (Ken Thompson) и Деннис Ритчи (Dennis Ritchie)
Между прочим, обратите внимание…

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

Java

По многим рейтингам вообще самый популярный язык в мире.

Миллиарды мобильных устройств, банковские приложения, сим-карты, веб-сервисы, кроссплатформенные приложения. По синтаксису очень похож на два предыдущих.

Разработчик первой версии языка, Джеймс Гослинг (James Gosling):

Джеймс Гослинг (James Gosling)
Джеймс Гослинг (James Gosling)

Вы уже заметили кое-что общее?

Давайте смотреть дальше.

С большим отрывом от четырех общепризнанных лидеров идёт

C#

Когда язык Java приобрел популярность, одна небезызвестная компания обнаружила в нём “фатальный недостаток” (олды помнят).

Java был создан не ими.

Поэтому эта компания решила сделать свою Java, с блэкджеком и делегатами, со своими проприетарными инструментами, рантаймом, кроссплатформенный (разумеется, среди платформ этой же компании) и т.д. Такой, чтобы была как Java, но не Java.

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

(Мне показалось, или кто-то невнимательно прочитал предупреждение?)

Создатель языка — Андерс Хейлсберг (Anders Hejlsberg):

Андерс Хейлсберг (Anders Hejlsberg)
Андерс Хейлсберг (Anders Hejlsberg)

Javascript

А вот здесь правда, не наступите, этот язык местами ну о-очень странный.
Вот, например:

Чудеса JavaScript
Чудеса JavaScript

массив + массив — это строка
массив + объект — это объект
объект + массив — это ноль
объект + объект — это число, но не число...

Мозг человека, выросшего на Pascal, C/C++ или Java уже закипел.

Ещё Javascript
Ещё Javascript

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

Создатель этого “чуда” Брендан Айк (Brendan Eich), смотрит на вас как

Брендан Айк (Brendan Eich)
Брендан Айк (Brendan Eich)

-то совсем без уважения.

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

Scratch

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

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

Pingpong на Scratch
Pingpong на Scratch

Автор — Митчел Резник (Mitchel Resnick).

Митчел Резник (Mitchel Resnick)
Митчел Резник (Mitchel Resnick)

FORTRAN

Ну, наконец-то! Единственный нормальный язык!!

(По мнению программистов на FORTRAN-е.)

”Ведь в нём не нужно каждый раз ставить точки с запятой и все эти кучерявые скобочки! Зачем они нужны если и без них всё и так понятно?!”

Да, я правда видел живых программистов на FORTRAN-е.
И даже настоящего разработчика FORTRAN-а. Долгих лет, если ещё жив!

Язык, в котором матрицы лежат в памяти не по строкам, а по столбцам (про CPU cache что-нибудь слышали?),
типы переменных определяются автоматически по первой букве имени (объявление переменных? а это ещё зачем?),
а в идентификаторах разрешены пробелы (дико удобно, а эти, которые со своими скобочками, опять не догадались!).

Та самая знаменитая история, когда вместо
DО 3 I = 1,4
в коде было написано
DО 3 I = 1.4
в итоге межпланетный космический зонд за много сотен миллионов иностранных денег упал, не долетев даже до орбиты.
Здесь первая запись означает
“Выполняй цикл DO отсюда и до метки 3 для всех значений переменной I в диапазоне от одного до четырёх”,
а вторая —
“Положи в переменную с именем DO 3 I значение 1.4”
См. выше, пробелы в именах тут разрешены, а то, что в коде начинается с буквы D, это как раз переменная вещественного типа!

Автор языка — Джон Бэкус (John Warner Backus):

Джон Бэкус (John Warner Backus)
Джон Бэкус (John Warner Backus)

(Кто помнит форму Бэкуса-Наура, это тоже он.)

BASIC

Недалеко ушел и верный друг и соратник FORTRAN-а, старый добрый BASIC

Программа на Basic, ну, почти...
Программа на Basic, ну, почти...

Ставь лайк, если помнишь, откуда это.

А чтобы совсем олдскулы свело...

вот вам POKE 23755,0 и RANDOMIZE USR 16384
Да знаю я, знаю, что 15616, но это для богатых бояр с дисководом, а у меня было тяжелое детство и кассетные загрузчики Bill-а Gilbert-а с расшифровщиком в видеопамяти…

Разработчики языка BASIC — Томас Куртц (Thomas Eugene Kurtz, на фото сбоку) и Джон Кемени (John George Kemeny, с другого боку):

Томас Куртц (Thomas Eugene Kurtz) и Джон Кемени (John George Kemeny)
Томас Куртц (Thomas Eugene Kurtz) и Джон Кемени (John George Kemeny)

Я думаю, все уже увидели эту очевидную закономерность.

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

А если без бороды — выйдет BASIC, FORTRAN или JavaScript!

Не верите?? Читайте дальше.
Мы только начали.

SQL

8-ая строчка рейтинга.
Язык, на котором не получится написать ни игру, ни сайт, ни мобильное или десктоп-приложение.
В котором ты ему SELECT COUNT(*) , а он замолкает на месяц, положив в полку по CPU все реплики production-кластера.

(Да, я знаю, для чего нужен SQL, перечитайте ещё раз дисклеймер в начале!)

Знакомьтесь, Дональд Чемберлин (Donald D. Chamberlin) и Рэймонд Бойс (Raymond Boyce):

Дональд Чемберлин (Donald D. Chamberlin)
Дональд Чемберлин (Donald D. Chamberlin)
Рэймонд Бойс (Raymond Boyce)
Рэймонд Бойс (Raymond Boyce)

Что характерно, бороды нет ни у кого.

PHP

Очень популярный среди веб-разработчиков язык. 13 строчка рейтинга.

Славится своей безопасностью (если кто не знал, буква S в его названии означает именно Security!).

Расмус Лердорф (Rasmus Lerdorf):

Расмус Лердорф (Rasmus Lerdorf)
Расмус Лердорф (Rasmus Lerdorf)

Конечно, не Томпсон, и не Гослинг. Но.. в целом.. борода имеется.
И язык распространён чуть более чем по всему интернету.

Чего нельзя сказать про другой когда-то популярный среди веб-бекендеров язык, да-да, я про

Perl

Тот самый write-only язык, на котором писать интересно, а читать — обычно не очень.

Кто видел, какую бурную реакцию вызывает у разработчиков на Perl код, написанный каким-то другим Perl-разработчиком, тот поймет.

Кто не видел, объясню так: если подойти к настоящему Perl-разработчику с какой-то задачей, он сначала задумается, а потом выдаст вам однострочник, полностью решающий вашу задачу. Ну, примерно вот такой:

say s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\+d))/$1,/gr for @ARGV;

(я честно не знаю, что это!)

Автор языка Perl — Ларри Уолл (Larry Wall).

Ларри Уолл (Larry Wall)
Ларри Уолл (Larry Wall)

Бороды, конечно же, нет.

Go

Вот тут неоднозначно.

С одной стороны, новый современный молодежный язык, быстрый и простой код, автоматическое управление памятью, встроенный reflection, каналы и горутины, а с другой — ну оочень корявенькое ООП, недоделанный полиморфизм и вот это вот заклинание
if err != nil { return err } буквально через каждую строчку.

Хмм, а вот на секундочку...

вот просто для примера, что у меня прямо сейчас под ногами:

> fgrep -R "if err != nil" . | wc -l                                                                                                                                       88839
88839

Почти девяносто тысяч одинаковых строк в одном проекте, Карл…
И ведь это ещё не все такие проверки.

А всё почему?

Потому что авторов несколько: Роберт Гризмер (Robert Griesemer), Роб Пайк (Rob Pike) и Кен Томпсон (Ken Thompson), и вы уже сами всё видите:

Роберт Гризмер (Robert Griesemer), Роб Пайк (Rob Pike) и Кен Томпсон (Ken Thompson)
Роберт Гризмер (Robert Griesemer), Роб Пайк (Rob Pike) и Кен Томпсон (Ken Thompson)

COBOL

«Использование языка КОБОЛ калечит ум, а его преподавание должно считаться уголовным преступлением», — написал Дейкстра аж в 1975 году.

Я сам, к счастью, COBOL не изучал и на нём никогда не писал, но, если верить google, то вот это Hello world:

Hello, world.
Hello, world.

Создателем языка является контр-адмирал военно-морского флота США Грейс Хоппер (Grace Hopper)

Грейс Хоппер (Grace Hopper)
Грейс Хоппер (Grace Hopper)

Да-да, та самая Amazing Grace, которая бесстрашно нашла (поймала), обезвредила (тапком) и надёжно пофиксила (скотчем) самый первый в истории баг в программе.
При прогоне тестов, заметим. (Пишите тесты!!!)

Логи тестовой джобы сохранились до сих пор:

First actual case of bug being found.
First actual case of bug being found.

Но вот с бородой тут… сами понимаете… При всём уважении к её заслугам.

Хотите ещё?

Пожалуйста! Вот ещё целая пачка знаменитых языков, которых никто не знает.

Lisp

Сокращение от Lots of Irritating, Stupid Parentheses, это где ты всю программу постоянно открываешь скобочки, а в конце должен их закрыть ровно столько, сколько открыл.

Концовка программы на Lisp
Концовка программы на Lisp

И, нет, это не смайлики, это программа состоит из списков списков списков списков и каждый список закрывается скобкой.

Джон МакКарти (John McCarthy), фото 1950-х годов, во время работы над Lisp:

Джон МакКарти (John McCarthy)
Джон МакКарти (John McCarthy)

Prolog

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

Что-то на Prolog
Что-то на Prolog
Аллен Колмероэ (Alain Colmerauer)
Аллен Колмероэ (Alain Colmerauer)

Smalltalk

Кто-нибудь это помнит?

Поднимите руки, кто на нём писал.

Пример на Smalltalk
Пример на Smalltalk

Авторы первой версии языка: Алан Кей (Alan Kay), Адель Голдберг (Adele Goldberg), Дэн Ингаллс (Dan Ingalls).

Алан Кей (Alan Kay), Адель Голдберг (Adele Goldberg), Дэн Ингаллс (Dan Ingalls)
Алан Кей (Alan Kay), Адель Голдберг (Adele Goldberg), Дэн Ингаллс (Dan Ingalls)

Ага! Попался, — скажете вы!

Вон же, вот он, справа, настоящий живой контрпример, который ухмыляясь ставит под сомнение всю теорию!

А вот и нет:

Вот его фото в 80х годах, когда он работал над этим языком:

Дэн Ингаллс
Дэн Ингаллс

Превьюшка его лекции 1989 года на YouTube, между прочим! Найдёте, кому интересно.

PL360

Algol

Pascal

Modula

Modula-2

Oberon

Oberon-2

Euler

И это всё один и тот же человек! Легендарный Никлаус Вирт (Niklaus Wirth):

Никлаус Вирт (Niklaus Wirth)
Никлаус Вирт (Niklaus Wirth)

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

Это так называемый “Закон Вирта”.

Человек-легенда, а языки прочно ушли в историю.
Даже Pascal, эх..

Ada

Тот самый “язык ада” из анекдотов про программиста с книжкой.

Кто пишет?
Кто писал?..

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

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

За задачу точно задокументировать язык взялись сразу две команды отважных исследователей.

В результате спустя длительное время они выдали ДВЕ разных спецификации языка, более 600 страниц каждая, и потом не смогли договориться, какая же из них правильная. И даже не сумели окончательно установить, один и тот же язык они описывают, или всё-таки разные!

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

Автором считается Жан Ишбиа (Jean Ichbiah), вот он:

Жан Ишбиа (Jean Ichbiah)
Жан Ишбиа (Jean Ichbiah)

Не убедил?!?

Хорошо, давайте дальше сами!

Forth

“LISP-е человек писавший много на, скобочек язык придумал без” (с) мой

Язык в котором нет скобочек и поэтому всё пишется задом наперёд.

Вместо (25 * 10) + 50

мы пишем 25 10 * 50 +

А вместо

Функция на C/C++
Функция на C/C++

мы пишем

То же на Forth
То же на Forth

“меньше, if, drop, else, then”, что, серьёзно?
Счастливой отладки вам, ребята…

Автор — Чарльз Мур (Charles H. Moore, a.k.a. Chuck Moore).

Борода есть? Или нет? Ваша версия!

Три

два,

один…

Та-да-ам:
Чарльз Мур (Charles H. Moore)
Чарльз Мур (Charles H. Moore)

Едем дальше!

APL

Не путать с Apple.

Сокращение от “A Programming Language”. Скромненько так.

Вот опять тупо скриншот из Википедии:

Пример на языке APL
Пример на языке APL

Опять что-то невнятое, малочитабельное и за ними код, задом наперёд.

Автор Кеннет Айверсон (Kenneth E. Iverson).

И опять главный вопрос данной статьи вселенной и всего такого прочего — ну, и как вы думаете?

Фото под катом!
Кеннет Айверсон (Kenneth E. Iverson)
Кеннет Айверсон (Kenneth E. Iverson)

Ruby

А вот это наверняка все слышали.

Да, блин, да на нём GitHub написан!

А ещё GitLab, Metasploit, Homebrew и YaST — смотря кому что ближе.

Создатель языка Юкихиро Мацумото (まつもとゆきひろ)

Кто за бороду — нажмите F5, кто считает, что бороды нет — Ctrl-R.

Ответ
Юкихиро Мацумото (まつもとゆきひろ)
Юкихиро Мацумото (まつもとゆきひろ)

Судя по хитрому выражению лица, он что-то знает и, возможно, даже исходную статью читал (нет).

Erlang

Вот вроде и разработан в большой компании, и слова все правильные: «функциональный язык для применения в высоконагруженных распределённых отказоустойчивых параллельных системах реального времени.»

Прямо вот всё, что нужно. А кто его видел? Кто использует?

В Яндексе, слышал, где-то был, пока комитет не запретил…

В индексе TIOBE упоминается в конце, в списке прочих, не вошедших в рейтинг. В компании с уже упомянутыми выше APL, Algol, Forth, Modula-2 и Smalltalk…

И ведь все шансы на успех были...

но, как говорят у нас в Древнем Риме: dura lex, sed lex
смотрите сами, вот команда создателей:

Джо Армстронг (Joe Armstrong)
Джо Армстронг (Joe Armstrong)
Роберт Вирдинг (Robert Virding)
Роберт Вирдинг (Robert Virding)
Майк Вильямс (Mike Williams)
Майк Вильямс (Mike Williams)
Бьярн Деккер (Bjarne Däcker) руководитель проекта
Бьярн Деккер (Bjarne Däcker) руководитель проекта

И такая грусть в глазах. Ну ребята, ну ведь могли же…

Brainfuck

Ну, конечно же!!
Это пропустить было нельзя!
Вашему вниманию предлагается Hello World:

Hello, world.
Hello, world.

COBOL нервно дергается в сторонке, у него случился очередной инсульт.

А вот утилитка wc (word count, а не то, что вы могли подумать)

wc.b
wc.b

Работает, я проверил.

Итак, а что там с бородой? Кто-то ещё сомневается?

Вот автор языка, Урбан Мюллер (Urban Müller)
Урбан Мюллер (Urban Müller)
Урбан Мюллер (Urban Müller)

Фотка, конечно, так себе… ну, какая есть, но зато это совершенно точно именно тот самый Мюллер. У него даже на майке что-то написано по-брейнфаковски!..

R

Язык для аналитиков, ML-щиков и прочих дата-саентологов саентистов. Набирает всё большую популярность, уже в топ 20 рейтинга.

Даже мне приходилось сталкиваться, где-то в лабах на Coursera.

Вот авторы:
Росс Айхэка (Ross Ihaka)
Росс Айхэка (Ross Ihaka)
Роберт Джентлмен (Robert Gentleman)
Роберт Джентлмен (Robert Gentleman)

Kotlin

Ну, и, наконец — финалочка!
Kotlin.

Вот есть Java.
По многим рейтингам язык №1.
По меркам IT уже очень давно есть.
Язык, который, создан чуваком с бородой!!! и продвигается Sun Microsystems, это корпорация с миллиардными оборотами.
А рядом поддерживают ещё более крупные друзья Google, Oracle, Microsoft и IBM.
Один из столпов IT-индустрии, без шуток.

И тут вдруг выходит какой-то Андрей Бреслав (кто это вообще?), из какой-то дремучей России (где это вообще?), приносит какой-то свой Котлин (что это вообще??).
И Google вдруг берёт — и переводит Android с великой и могучей Java на Kotlin!

Так не бывает, — скажете вы!

А Андрей ведь даже без бороды, добавлю я:

Андрей Бреслав
Андрей Бреслав

Не бывает.
И вы можете мне не верить (я сам в шоке!!) — сходите на сайт Андрея и прочитайте сами!

Создавая новый язык, Андрей ЗНАЛ про этот закон! Он сам про это пишет!

Поэтому на презентации своего языка, он его умышленно и нагло целенаправленно использовал!!!

Вот вам скриншот с первой презентации языка Kotlin:
Бреслав и Котлин
Бреслав и Котлин

Шах и мат, кто не верил!

Закон не только работает на прошлых примерах, но и подтверждается экспериментально!!!

И даже не только я, умные люди из издания Wired про это же пишут!

Выводы

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

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

Не повторяйте чужих ошибок.