Код
#статьи

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

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

cottonbro / Matheus Viana / Pixabay / Pexels / nikkytok / Shutterstock / Polina Vari для Skillbox Media

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

Спойлер: миром правит случайность

Многие популярные языки программирования появились почти случайно, в процессе решения прикладных задач или вообще забавы ради. Например, в декабре 1989 года Гвидо ван Россум искал, чем себя занять на Рождество, пока офис закрыт, и написал интерпретатор для нового скриптового языка. Так появился любимый многими Python.

В 1994 году Расмус Лердорф написал набор CGI-скриптов, чтобы отслеживать просмотры своего онлайн-резюме. Когда их возможности и скорость перестали устраивать Расмуса, он написал новый набор команд с С-подобной структурой — это была первая версия PHP.

В 1995 году Брендану Эйку, программисту Netscape Communications, поставили задачу: в кратчайшие сроки разработать простой, лёгкий и динамичный язык для Netscape Navigator. Брендан за 10 дней создал LiveScript, который позже переименовали в JavaScript. Сегодня на нём работает 97,5% сайтов, а эйчары и маркетологи регулярно фейлятся, отправляя вакансии с JS Java-разработчикам или ставя лого Java на рекламу курса по JS.

Другими словами, разработчики не собирались на консилиумы и брейнштормы, когда создавали популярные языки (ну да, ну да — Haskell появился именно так). И вряд ли кто-то задумывался о стандартах и больших перспективах: люди просто решали свои задачи.

«Идеальный» не значит «популярный»

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

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

Рейтинг языков программирования по версии tiobe.com: Haskel нет даже в топ-50. Источник: TIOBE

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

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

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

Мир, в котором все программируют на Haskell, — плохой мир».

Виталий Брагилевский,

евангелист Haskell и преподаватель

До понимания прекрасного нужно ещё дорасти

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

На первых порах многие разработчики страдают синдромом самозванца и думают, что вообще ничего не знают. В таком состоянии любой язык кажется «странным», «непредсказуемым» и «кривым». Знаменитый IT-гуру Эрик Реймонд советует выучить Python, C/C++, Perl и Lisp, чтобы стать настоящим хакером. А эссе директора по исследованиям Google Питера Норвига называется «Научитесь программировать за десять лет», что как бы намекает.

«Изучите по крайней мере полдюжины языков программирования. Включите туда языки, которые поддерживают абстракцию классов (Java или C++), функциональную абстракцию (Lisp или ML), синтаксическую абстракцию (Lisp), декларативные спецификации (Prolog), сопрограммы (Icon или Scheme) и параллелизм (SISAL)».

Питер Норвиг,

директор по исследованиям Google

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

У каждого языка свои задачи

Язык программирования — это инструмент, который решает довольно ограниченный круг задач, поэтому для чего-то он подходит лучше, а с чем-то справляется так себе. Да, можно написать веб-сайт на С++ и программировать микроконтроллеры на JavaScript, даже Brainfuck потенциально способен на многое. Но всё же мы пишем фронтенд на JavaScript, управляем контроллерами с помощью С++, а Brainfuck не упоминаем всуе.

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

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

«Когда кто-то говорит: „Хочу язык программирования, который сделает всё, что я ему скажу“, я даю этому человеку леденец».

Алан Перлис,

первый лауреат премии Тьюринга

Кадр: сериал «Ужасные истории»

Компании «пиарят» свои языки

И не забывайте о вездесущей «невидимой руке рынка». Крупные компании продвигают языки, которые подходят для их задач. Например, Google инвестирует в Python, создаёт Go и Logica, и в то же самое время вместе с Microsoft, Amazon и другими техногигантами работает над Rust. Facebook* продвигает React, а Apple — Swift, который пришёл на замену Objective-C.

Разработка или поддержка языка влечёт за собой появление новых платформ, сред и IDE — а это тоже бизнес, в котором крутятся миллиарды долларов. Компании инвестируют в языки, чтобы они лучше решали задачи и чтобы росло количество нужных им разработчиков. А значит, каким бы «кривым», «странным» и «избыточным» ни был язык, он будет жить и развиваться, пока это нужно бизнесу.

Критерии идеального языка

И всё же, какие качества приближают язык программирования к идеалу? Британский учёный Тони Хоар, автор алгоритма быстрой сортировки, предложил такие критерии:

  • Простота — чтобы программист быстро разобрался в инструментах языка.
  • Безопасность — чтобы программист не тратил лишнее время на поиск ошибок.
  • Быстрая компиляция — чтобы программист не тратил время в процессе отладки.
  • Эффективность — чтобы программа не «ела» слишком много памяти.
  • Читабельность — чтобы программист не мучился, разбирая чужой код.

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

А какой язык больше всего нравится разработчикам? С 2016 года пользователи Stack Overflow называют своим любимчиком Rust.

«Мой самый большой комплимент в сторону Rust — он скучен».

Крис Дикинсон,

инженер в npm

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

Кадр: из фильма «Офисное пространство»

Вот что конкретно нравится программистам в Rust:

  • Высокая производительность (в ряде тестов обходит даже С\С++).
  • Безопасная работа с памятью благодаря системе валидации ссылок borrow checker. Это часть компилятора, которая проверяет, актуальны ли данные, на которые ссылается часть кода (уникальная фича Rust).
  • Хорошая экосистема: установщик rustup (аналог PIP в Python и npm в Node.js), CLI-утилита Cargo для управления зависимостями, запуска тестов и создания документации, сайт crates.io для поиска и публикации библиотек.
  • Обратная совместимость версий языка и их совместимость с разными библиотеками (например, у PHP и Python с этим проблемы).
  • Качественная документация и обучающие материалы (как у Python и PHP).
  • Развитое сообщество. Не такое, как Java User Group или Python-сообщество, но всё же.

Сообщество Rust далеко не самое крупное и пока не входит в топ-10 — там крепко прописались JavaScript, Python и Java. А ведь размер здесь имеет значение: чем больше людей работает над библиотеками и другими инструментами, тем быстрее развивается язык. С другой стороны, нередко большие сообщества порождают хаос и пугают своей токсичностью, как, например, у JavaScript.

Тысячи разработчиков ненавидят JavaScript, но вынуждены на нём писать — он всё же покрывает потребности 97,5% сайтов. Фанаты React ругают Vue или Angular и наоборот. Евангелист JavaScript Эрик Эллиотт считает, что почти никто толком не понимает язык, потому и сообщество сумасшедшее.

У Rust здесь пока тишь да гладь. Относительно высокий порог входа отсеивает дилетантов, поэтому обсуждения и ответы, как правило, спокойные и по делу. В официальных чатах, форумах, сабреддитах и на Stack Overflow модераторы стараются поддерживать доброжелательную атмосферу. Неофициальные сайты и форумы тоже от них не отстают.

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

  • «Ленивые вычисления», которые откладываются до момента, когда понадобится их результат. Это снижает нагрузку на память и ускоряет работу программы.
  • Безопасное управление памятью (где-то всплакнули сишник и плюсист).
  • Алгебраические, то есть составные, типы данных.
  • Чистые функции, в которых выходные данные однозначно определяются входными.
  • Легко читать и поддерживать код (если осилил язык, конечно).
  • Много учебных материалов.
Да, сложно. Зато как изящно. Кадр: фильм «Серьёзный человек»

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

А теперь вернёмся к реальности. Несмотря на лестные (и часто справедливые) отзывы, Haskell остаётся нишевым языком. Вакансий, в которых он упоминается мало, а будущее «почти идеального языка» туманно. Сложность в изучении точно не способствует росту популярности. А фичи из функционального программирования постепенно появляются в других, более понятных языках.

Да кому он нужен, ваш идеал?

На популярность и качество языка программирования влияет куча факторов, но есть одна «константа» — случайность. Многие языки появились, когда создатели решали срочные задачи, и там вряд ли кто-то думал о совершенстве. «Как бы идеальные» языки не пользуются большим спросом и на самом деле далеки от идеала.

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

«Последнее обновление C++ запустили, чтобы исправить предыдущее».

Дэвид Джеймс,

писатель

А для тех, кто дочитал до конца, мы откроем большой секрет: идеальный язык давно изобрели, и это Lisp ;-)

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


* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook* и Instagram* на территории Российской Федерации по основаниям осуществления экстремистской деятельности».

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована