Почему не существует универсального языка программирования?
Почему не существует универсального языка программирования? Ответы пользователей сайта Quora опубликовал KV.BY.

Дин Хью, бывший электротехник
Проще всего ответить на этот вопрос, если представить программирование как деревообработку, а языки программирования – как столярные инструменты. Сначала вы спиливаете дерево, получаете чурбан, затем обрабатываете его и получаете, например, шкаф, дверь, деревянную ложку или еще что-нибудь. И становится понятно, зачем нужно столько столярных инструментов. Огромная пила, которая нужна, чтобы разделить ствол на более мелкие части, отличается от столярного станка, сверла, напильника, наждачной бумаги и прочих инструментов, используемых для получения финального продукта.
Компьютер в данном случае – это чистый холст памяти, ждущий нанесения красок в виде скрипта, приложения или утилита. В зависимости от того, что вы хотите получить в итоге, и от того, с чего начинаете, вы выбираете язык программирования, каждый из которых имеет свою специфику. Некоторые языки просты и приятны в обращении, как пила или разводной ключ. К таким языкам относятся Basic и JavaScript. Для достижения высокой скорости и точности программирования существуют языки С и С++. Это утверждение может вызвать массу споров, но высокая скорость и точность в этом контексте связаны с операционными системами, алгоритмами и другими критическими для скорости задачами программирования. Мистер Тьюринг научил нас тому, что и операционную систему можно написать на Perl или Javascript, но можно и из дуба наждачной бумагой стол вышлифовать, если конечно хватит наждачной бумаги, времени и терпения. О практичности речь не идет.
Возможно, лучше сравнить языки программирования с инструментами для резки. Существует хлебный нож, нож для мяса, перочинный ножик и, наконец, нож для масла. Каждый из них обладает своими преимуществами в зависимости от задачи. Это же самое актуально и для языков программирования.
Эндрю МакГрегор, инженер
Немногие языки могут использоваться практически для любой цели, и все они различаются по сложности. К ним относятся , C++, Haskell, Rust, Algol, Lisp или Scheme, Forth, PL/1 и Assembler.
Заметили у них что-то общее? У них всех репутация тяжелых в изучении, тяжелых в использовании или доступных лишь посвященным языков. Или все сразу.
Причина, по которой я выбрал именно эти языки заключается в том, что все они могут быть использованы для программирования голографического ядра ОС, программ на уровне системы и приложений, ориентированных на пользователей, и я точно знаю, что они были использованы для написания ядер, начальных загрузчиков или приложений на голом железе. Я работал со всеми шестью языками.
Такое количество других языков появилось из-за того, что появляется потребность в написании все большего количества программ и со временем это делать все сложнее.
Причина, по которой C и C ++ настолько популярны, состоит в том, что они были существуют дольше, чем Haskell и Rust. К тому же С и С++ близки к золотой середине между широтой применения и дополнительной сложностью использования по сравнению с другими возрастными языками из моего списка. Вероятно, они даже лучше, чем Haskell.
Rust же слишком молод для того, чтобы повсеместным, но дайте ему 20 лет. Возможно, этот язык близок к тому, чтобы стать универсальным языком, но самым практичным на сегодняшний день является С++.

Эльфеус Мэдсен, математик, притворяющийся программистом
Многие отвечали на этот вопрос, приводя в пример языки, подходящие для любых целей; C, Assembly и Machine Language являются самыми масштабными примерами. Конечно, с точки зрения Тьюринга эти языки являются завершенными, но они не настолько хороши для исследовательского программирования или прототипирования, так что они не проходят проверку на универсальность. Мне также нравится Python и Ruby, но в этих языках «близость к железу» означает «просмотрите свою программу, найдите самые активные ее части и перепишите эти части на С». Едва ли эти языки являются универсальными.
Универсальный язык должен достигать как высокого, так и низкого уровня: он должен максимально использовать абстракции, но когда вам нужна производительность, вы должны быть в состоянии достичь необходимой глубины в аппаратном обеспечении и манипулировать битами, если это необходимо. Такие языки существуют, и я называю их «трансцендентными».
Некоторые из этих языков, такие как Common Lisp, Scheme и Smalltalk начинают как высокоуровневые, но при этом имеют механизмы (начиная от опционального ввода и заканчивая представлением для аппаратных команд низкого уровня с использованием встроенного ассемблера), позволяющие с легкостью достичь низкого уровня. Другие же, например, Forth, начинают как низкоуровневые, но могут с легкостью переходить на высокий уровень. Такие языки в прямом смысле позволяют создавать мини-языки, идеально вписывающиеся в оригинальный синтаксис исходного языка, что заметно упрощает решение сложных задач.
Для создания операционных систем с нуля использовались некоторые языки более высокого уровня. C – вездесущий язык, созданный в то время, когда ресурсов было не так много, но он занял золотую середину между простотой, низкоуровневостью и высокоуровневостью и стал очень популярен, несмотря на то, ему не хватает гибкости. Мне показалось интересным, что лишь несколько известных мне языков в свое время использовались для написания операционных систем – Lisp, Forth и Smalltalk – они также трансцендентны.
Итак, если эти языки способны на все, почему их не использует все больше людей? К сожалению, причина заключается в их простоте. Для ее достижения им приходится жертвовать математической приоритетностью, что многих сбивает с толку. Lisp использует префиксную нотацию — (+ 1 2 3) и получает 6. Forth использует постфиксную нотацию — «1 2 + 3 +». Получает 6. А Smalltalk оценивает все слева направо, поэтому из «1 + 2 * 3» получает 9 (это результат того, как Smalltalk передает сообщения объектам, цифры – это объекты, а операции – сообщения).
И хотя как большинство поначалу находят это странным, самое забавное заключается в том, что на самом деле все не так запутанно. Это всего лишь дело привычки. Сравните эти языки с любым языком на основе Algol (C, Pascal, PHP, Python и т. д.), который в котором присутствует иерархия выполнения математических действий, которая, как это ни парадоксально, имеет тонкие отличия от одного языка к другому. Все эти правила слишком многочисленны и труднозапоминаемы. Легче просто заключить все в круглые скобки, чтобы не пришлось беспокоиться о причудливых правилах приоритетности.
Уильям Шайн, кандидат наук по информатике и математике, университет Хьюстона (1995)
Как и было отмечено другими пользователями, С и семейство С являются универсальными языками. К ним относятся C, C++, Objective C, Objective C++ и Swift. Можно было бы добавить сюда Rust. Современные компиляторы С и С++ позволяют писать встраиваемый ассемблерный код. Не то, чтобы это было прекрасной идеей. И они почти все могут взаимодействовать между собой. С++ может использовать библиотеки С, Swift – библиотеки С и Objective C.
Python, Ruby, и Java могут использовать библиотеки C. В С вписаны преобразователи JavaScript. Так что взаимодействие действительно активное. Для достижения сырой производительности подходят С и компания. Если вам нужно написать много кодов быстро, первыми на очереди стоят JavaScript, Python и Ruby. Если вам важна скорость, безопасность и автоматическая сборка мусора, возможными вариантами будут C #, Java и Swift. . Если бы мне пришлось выбирать один язык программирования для всех целей, я бы выбрал C ++.
Создан универсальный язык программирования. Он позволяет писать одновременно на С, Python, JavaScript и так далее
Разработчик из Польши Петр Фусик создал язык программирования ?. Его код можно в два счета транслировать на С, С++, Java, Python и ряд других языков. Синтаксис нового языка похож на C#.
2021-10-12 15:42:12, Мск
Один язык для всех
Польский программист Петр Фусик (Piotr Fusik) создал новый язык программирования ?, своего рода универсальный язык написания кода. Со слов автора, его творение позволяет писать код, который в дальнейшем можно будет без труда использовать в других языках.
В качестве примера Фусик привел C, C++, C#, Java, JavaScript, Python, Swift и OpenCL. Все детали своего языка ?, который пока находится на одном из этапов разработки, он опубликовал в открытом виде на GitHub (принадлежит Microsoft).
Петр Фусик не уточнил, почему назвал свое творение именно так, и не сообщил, как правильно его произносить. «Апостроф» над буквой С называется «акут», то есть, с учетом этого, название языка может звучать как «Си с акутом». Также это буква польского алфавита, которая называется «Че» и читается приблизительно как «Ч».
Универсальность языка
Своей универсальностью язык ? обязан транслятору cito. Обработанный с его помощью код можно читать на любом их перечисленных Фусиком языках программировании.

Петр Фусик, автор языка ? (фоточка из аккаунта GitHub)
«В отличие от большинства языков, которые вы изучали раньше, ? не претендует на звание лучшего универсального языка программирования. Вместо этого он решает одну конкретную проблему: как писать код, который можно удобно использовать одновременно на языках C, C++, C #, Java, JavaScript, Python, Swift и OpenCL. Например, если вы изобрели новый формат сжатия, вы можете реализовать его в ? и заставить автоматический переводчик cito сгенерировать исходный код на упомянутых языках, чтобы программисты этих языков могли использовать ваш код», – описывает свое творение Петр Фусик.
Петр Фусик не уточняет, как долго он работал над ?, и кто, помимо него, входит в команду разработчиков. Известно лишь, что создание языка длится как минимум с лета 2013 г. – этим днем датирована публикация на YouTube записи ранней презентации языка.
Сходство с другими языками
По утверждению создателя, синтаксис ? во многом напоминает C#.
Фусик создал ? объектно-ориентированным. Он объяснил свой выбор тем, что большинство целевых языков объектно-ориентированы.

Пример кода на ?. Нажмите для увеличения
Фусик утверждает, что подсветка синтаксиса C# вполне подходит и для его творения. При этом, с его слов, ? нельзя считать ни клоном C#, ни его подмножеством. Различия между ними все же есть, и продиктованы они, по словам Фусика, «необходимостью полностью автоматической трансляции кода на ? в эффективный код C и JavaScript».
Библиотеки не нужны
В описании к ? сказано, что в его случае зависимости от библиотек рантайма (runtime libraries) сведены к минимуму. В качестве примера Фусик привел вывод кода, для использования в программах на С – в большинстве случаев пользователь получает автономную пару файлов .c/.h с удобочитаемым кодом С99.
Презентация ? в 2013 году
Автор утверждает, то это в равной степени относится и к другим поддерживаемым языкам – C++, C#, Java, JavaScript, Python, Swift и OpenCL. В то же время он упоминает о нескольких исключениях. Одно из них касается необходимости использования библиотеки GLib для вывода кода на C в случае, когда программист, пишущий на ?, использует выражения List, Dictionary или SortedDictionary.
Реакция сообщества
Релиз языка ? активно обсуждается как на профильных сайтах, посвященных программированию, так и на ресурсах, никак не связанных с ним. Редакция CNews обнаружила посвященные ему темы на YCombinanor и на Reddit.
Топик на YCombinanor был создан 9 октября 2021 г. и за это время собрал почти 300 комментариев. На Reddit существует как минимум две темы для обсуждения ?, датированных тем же днем. В одной из них набралось около 290 ответов, в другой – 33.
Пользователи разделились на два лагеря – одни считают, что язык имеет право на существование, другие же сомневаются в его практической пользе. К примеру, пользователь Reddit под псевдонимом bladehaze написал, что ? пригодится лишь в том случае, если писать код без использования библиотек, что не всегда представляется возможным.
Почему невозможно создать идеальный язык программирования
Почему мы умеем летать в космос, а современные языки программирования всё такие же неидеальные и не могут угодить всем кодерам — даже в теории.


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

Рустам Сабиров
Востоковед, интересующийся IT. В прошлом редактор раздела «Системный блок» журнала «Fакел», автор журналов Computer Gaming World RE, Upgrade Special, руководитель веб-ресурсов компании 1С-Softclub.
Какой программист не мечтает об универсальном языке программирования, на котором можно написать всё без костылей и проблем с производительностью? Попробуем разобраться, почему эти мечты никогда не сбудутся.
Спойлер: миром правит случайность
Многие популярные языки программирования появились почти случайно, в процессе решения прикладных задач или вообще забавы ради. Например, в декабре 1989 года Гвидо ван Россум искал, чем себя занять на Рождество, пока офис закрыт, и написал интерпретатор для нового скриптового языка. Так появился любимый многими Python.
В 1994 году Расмус Лердорф написал набор CGI-скриптов, чтобы отслеживать просмотры своего онлайн-резюме. Когда их возможности и скорость перестали устраивать Расмуса, он написал новый набор команд с С-подобной структурой — это была первая версия PHP.
В 1995 году Брендану Эйку, программисту Netscape Communications, поставили задачу: в кратчайшие сроки разработать простой, лёгкий и динамичный язык для Netscape Navigator . Брендан за 10 дней создал LiveScript, который позже переименовали в JavaScript. Сегодня на нём работает 97,5% сайтов, а эйчары и маркетологи регулярно фейлятся, отправляя вакансии с JS Java-разработчикам или ставя лого Java на рекламу курса по JS.
Другими словами, разработчики не собирались на консилиумы и брейнштормы, когда создавали популярные языки (ну да, ну да — Haskell появился именно так). И вряд ли кто-то задумывался о стандартах и больших перспективах: люди просто решали свои задачи.
«Идеальный» не значит «популярный»
Примечательно, что на языках, которые намеренно создавали как «идеальные» и которые часто хвалят сами программисты, почему-то кодит лишь небольшая группа энтузиастов. Взять, например, Haskell.
В 1987 году математики и инженеры решили создать универсальный функциональный язык. Чтобы он подходил для учёбы, решения исследовательских и практических задач, а также базировался на лучших идеях функционального программирования. Haskell хвалят и уважают, но найдите его в любом рейтинге и сравните, например, с ненавистным РНР или «кривым» JavaScript.

В этом есть парадокс. С одной стороны, идеальный язык программирования должен быть очень популярным, чтобы все разработчики на нём писали. С другой — чем больше у языка пользователей, тем больше разных комьюнити, проблем с совместимостью версий, вопросов стандартизации и других деталей, которые портят «прекрасный язык».
Получается, чтобы язык оставался идеальным, у него должно быть мало поклонников и разработчиков, которые смогут его освоить.
«Чтобы писать на 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 — он скучен».
Другими словами, никаких сюрпризов, сильных эмоций и крепких выражений, всё настолько предсказуемо и ровно, что даже скучно.

Вот что конкретно нравится программистам в 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 расширяет ваше сознание».
- «Вещи, которые в других языках считаются лучшими практиками или паттернами программирования, в Haskell выражаются естественным образом».
- «Haskell… позволяет программисту освоить новый, нетрадиционный подход к написанию программ».
А теперь вернёмся к реальности. Несмотря на лестные (и часто справедливые) отзывы, Haskell остаётся нишевым языком. Вакансий, в которых он упоминается мало, а будущее «почти идеального языка» туманно. Сложность в изучении точно не способствует росту популярности. А фичи из функционального программирования постепенно появляются в других, более понятных языках.
Да кому он нужен, ваш идеал?
На популярность и качество языка программирования влияет куча факторов, но есть одна «константа» — случайность. Многие языки появились, когда создатели решали срочные задачи, и там вряд ли кто-то думал о совершенстве. «Как бы идеальные» языки не пользуются большим спросом и на самом деле далеки от идеала.
Даже если представить, что кто-то и создаст совершенный язык, тут же найдётся энтузиаст, который захочет его улучшить, и всё завертится по новой.
«Последнее обновление C++ запустили, чтобы исправить предыдущее».
А для тех, кто дочитал до конца, мы откроем большой секрет: идеальный язык давно изобрели, и это Lisp 😉
В Skillbox не учат идеальным языкам, зато помогают быстро и безболезненно освоить востребованные технологии. Залетай в университет, ознакомься с планом обучения и выбери свой курс.
Один из первых браузеров и главный конкурент Internet Explorer в 90-е годы.
Реально ли создать супер-язык программирования — отвечают эксперты
Наш подписчик прислал вопрос в редакцию Tproger: «Почему до сих пор не создан супер-язык программирования?» Предоставляем вам ответы экспертов.
В мире так много языков. Более 7 тысяч естественных языков, например, русский, английский и пр. Языков программирования не намного меньше, под 3 тысячи. И сейчас, пока вы читаете эту статью, какой-то школьник уже кодит на своем собственном языке. Если у естественных языков есть много общего, то сходства можно найти и в языках программирования. Наш подписчик задался вопросом, которым мы хотим поделиться с вами:
«Среди языков программирования очень много общего. Почему, используя принципы ООП, до сих пор не создан супер-язык язык программирования?»
Мы обратились за разъяснением к нашим экспертам, а полученные ответы предоставляем вашему вниманию.
Реально ли создать супер-язык программирования?
Рустам Кильдиев
руководитель отдела разработки BigData компании «Иннодата»
Области применения языков программирования очень разнообразны: интегральные схемы, веб, системное ПО и т.п. Уникальный супер-язык это универсальность, а, как известно, универсальность ведёт к потере каких-то «фишек», что не всегда приемлемо. Кроме того, принципы ООП очень хороши, но не являются «серебряной пулей». Сейчас быстрыми темпами всё большую популярность набирает Функциональное программирование, которое отлично подходит для параллельного/конкурентного программирования, особенно в эпоху производительности, большого объёма данных и остановки роста частот, на которых работают процессоры. Сейчас целенаправленное создание супер-языка не имеет смысла из-за отсутствия целевой аудитории. На данный момент уже есть огромное количество специалистов, умеющих работать в существующих языках. Массово всем изучать, переучиваться на новый язык экономически нецелесообразно. Кроме специалистов, есть много наработок, библиотек и инструментов, которые нужно будет переписывать на новый язык, что тоже вряд ли будет хорошим решением. Сейчас просматривается плавная эволюция: одни языки сменяются другими, появляются улучшенные варианты (примеры — Java в Kotlin или Scala, JavaScript в TypeScript), делаются попытки объединить языки (прим. JavaScript и Scala в Scala.js). Приведёт ли это к созданию универсального языка (особенно ООП)? Мне кажется, что нет, но время покажет.
Рейтинг полезности ответа:
Сергиус Офицеров
аналитик в syndicate.one
(ответ подготовлен совместно с Михаилом Субботиным, преподавателем израильской высшей школы IT и безопасности HackerU)
ООП — не панацея, есть еще и функциональное программирование, и process-oriented programming, и логическое программирование, и много всяких парадигм и подходов. Не будем забывать, что каждый язык программирования был создан для лучшего решения конкретной задачи. Универсальных решений нет нигде, почему они должны быть в программировании?
Рейтинг полезности ответа:
Виктор Ефимов
системный архитектор REG.RU
Язык программирования можно рассматривать как набор определённых функций, подходов и свойств. Некоторые из них нельзя совместить в одном языке. Например, типизацию можно выбрать только одну, а автоматическое управление памятью требует дополнительных вычислений и не может совмещаться с максимальной производительностью.
Для разных людей и разных задач лучшими будут разные языки с разным функционалом, нет единого критерия. Язык C работает быстро, но не поддерживает автоматическое управление выделением и освобождением памяти, Python его поддерживает, но медленнее C++. В Go гораздо лучше многопоточность (что позволяет эффективнее писать производительные и сетевые приложения), чем в Python, но нет понятия «класса» из ООП (из-за чего сложнее быстро прототипировать или описывать бизнес-логику).
C++ поддерживает ООП и быстро работает, однако на нём не пишут веб-сайты, на Ruby пишут веб-сайты, но не пишут firmware для роутеров.
Кроме скорости работы программ и поддержки разных парадигм программирования, у языка есть такие неочевидные «свойства», как его комьюнити со своим менталитетом, политики выхода новых версий, инфраструктура инструментария, качество документации, существующие продукты, на нём написанные, и просто репутация языка. Они все влияют на то, как и когда язык будет использоваться, на его будущее и популярность.
Большинство программ для Linux написано на C, хотя C++ может то же, что C, и, кроме того, лучше поддерживает ООП. Есть два одинаковых по функционалу языка — Ruby и Python, но только один выбивается в лидеры.
При создании супер-языка придётся оставить в нём лучшие черты других языков, выбрав некоторое подмножество совместимых, и исключить худшие.
Изъять внедрение PHP кода прямо в HTML (кстати, в своё время этот функционал считался крайне полезным, сейчас же считается очень вредным), GIL из Python, Monkey patching из Ruby (да, и определить, какие черты худшие, сложно — всё субъективно: не всем нравится, что в Go нет классических исключений). И самое главное, добавить слишком много лучших черт в один язык не получится, только выбрать некоторые из них, ибо слишком много функций — тоже плохо (пример — Perl6).
ООП — всего лишь одна из методологий программирования, годная не для всех задач, и поддержка его языком не является основополагающим фактором, делающим язык хорошим. Для веб-программирования достаточно минимальной поддержки ООП, само ООП может пригодиться в предметной области приложения, но не всегда. Для системного программирования ООП редко нужно. Есть куча задач, для которых ООП подходит, но которые так же хорошо можно сделать и без него.
Если супер-язык и будет создан, то это будет просто ещё один язык, но вовсе не лучший, а старые языки никуда не денутся. Мало того, многие из создателей существующих языков думали, что создают тот самый супер-язык, возможно именно поэтому у языков программирования сейчас много общего.
Рейтинг полезности ответа:
Олег Власенко
заместитель генерального директора SimbirSoft
Количество компьютерных языков постоянно растет. Потому что:
Во-первых, потому что меняется техника (hardware).
Во-вторых, потому что меняются технологии и инструменты – когда-то программисты использовали перфокарты, потом консоли, потом появились IDE, системы контроля версий и многое другое.
В-третьих, потому что меняются решаемые задачи — началось все с вопросов обороны (расчеты таблиц для артиллерии, взлома шифров ENIGMA, расчета атомных бомб и траекторий ракет), потом подтянулась экономика, потом компьютер заменил телефон, потом телефонокомпьютер (смартфон) заменил фото и видео камеру, стал распознавать образы, добавилась дополненная реальность и т.д.
В четвертых, потому что ИТ компании через создание языков создают свои собственные платформы, на которую «подсаживают» весь мир. (Sun, а позже Oracle – платформа на Java, Microsoft – платформа на C#) Есть еще в пятых, в шестых и т.д.
Это все заставляет языки программирования плодиться и размножаться, а не только изменяться и исчезать. И хотя последние 30 лет ООП – господствующая методология, но существует множество компьютерных языков, в которых изначально заложена другая методология. Например, с одной стороны это старые добрые ассемблер и Си, а с другой стороны вполне современные HTML, SQL, Erlang и тысячи других. ООП так или иначе оставляет свой след в современных языках, но даже в сравнительно близких языках (например Java и C#) ООП реализован по разному.
Резюмируя – по множеству причин миру не грозит единственный супер язык. И поэтому студенту, чтобы стать программистом, приходиться знакомиться по крайней мере с десятком разных языков.
Рейтинг полезности ответа:
Александр Пряхин
декан факультета веб-разработки GeekUniversity, онлайн-университет Mail.Ru Group
В замечательной книге Дугласа Адамса «Автостопом по Вселенной» есть прекрасный эпизод, в котором огромный компьютер в течение семи с половиной миллионов лет вычислений искал ответ на «главный вопрос жизни, Вселенной и всего такого».
В результате он выдал ответ «42». Но, как сказал сам компьютер: «Мне кажется, если уж быть с вами абсолютно честным, то всё дело в том, что вы сами не знали, в чём вопрос».
С языками программирования история очень схожа. Что есть супер-язык программирования? Чем он должен отличаться от существующих языков? Мне кажется, мало кто может на это ответить.
В существующем мире IT языки программирования — это инструменты, каждый из которых призван решать свою задачу. Так, множество Enterprise систем пишутся на Java, который зарекомендовал себя именно отточенностью на этот слой приложения.
Актуальные в мире Highload микросервисы отлично пишутся на Go и том же Java, потому что вновь эти инструменты оказываются удобными для создания подобного рода вещей. Порядка 80% сайтов используют PHP, который так любит погонять сообщество. И это тоже неспроста — это говорит о пригодности инструмента. А пригодность складывается не только из того, насколько хитроумную абстракцию Вы сможете написать на нём, а ещё и на экономической составляющей.
Из всего этого следует один важный вывод. Осознавая то, что язык — это инструмент, нужно понимать, что за ним есть более глобальные парадигмы. Это те же алгоритмы, дискретная математика, анализ данных, устройство ЭВМ и прочее.
Очень многие программисты, которые вырастают из Junior позиций, на работая и не обучаясь до этого в смежных областях, чувствуют нехватку знаний именно в вышеозначенных областях. И самым правильным решением будет продолжать изучение основ параллельно с совершенствованием знаний о выбранном языке и практике с ним.
Рейтинг полезности ответа:
Егор Болгов
Fullstack Developer, SEMrush
Честно говоря, для меня это два различных вопроса: «Почему не создан супер-язык программирования?» и«Почему не все языки программирования объектно-ориентированы?»
Каждый язык создаётся с определённой целью — коммуникация, взаимодействие, сохранение чего-либо. Люди создают языки издревле, и каждый из них имеет определённую цель, т.е. соответствует тому, для чего он создавался. Когда язык используется для решения задач вне своих целей — получается не очень хорошо или не получается совсем (представьте себе инженера-механика, описывающего растительный мир терминами «труба», «сосуд», «листовая поверхность»). То же самое и с языками программирования — все они создавались для решения заданного спектра задач. Часть из них именуется «универсальными» языками, но в любом случае в процессе решения задачи на основе универсального языка программист сформирует новый язык, который будет более конкретно описывать решение задачи. Ну а так как у нас множество совершенно разных задач, то и сформировать единый язык для всех этих задач весьма сложно, т.к. в одном случае язык будет слишком общим и не будет помогать решать проблемы, а в обратном — слишком сложным, т.к. будет содержать способы решения всего потенциального спектра задач, которые могут перед ним стоять.
Отвечая на первый вопрос в целом, становится ясен ответ и на второй — для некоторых задач объектно-ориентированное программирование является бессмысленным усложнением, например, надо сформировать программу для робота по выполнению нескольких фиксированных операций: передвинуть, закрыть манипулятор, передвинуть, открыть манипулятор. В данной ситуации совершенно нет необходимости описывать объекты, операции над ними и т.д.
Рейтинг полезности ответа:
Андрей Борю
преподаватель направления «Программирование» в Нетологии и Principal Engineer
Позволю себе перефразировать вопрос: «Почему до сих пор существует так много языков программирования, а не один универсальный?» Сегодня в мире существует более 30 различных языков программирования. И почти все из них появились для решения конкретных задач и лишь впоследствии эволюционировали до своих полноценных версий. К примеру, всем известный php изначально был просто шаблонизатором, а одной из целей создания современного golang было решение реальных проблем, возникающих при разработке программного обеспечения в Google.
Современный мир устроен так, что в нем нужно программировать и веб-странички, и микроконтроллеры, и обучающие приложения для школы, и высокоточные инструменты для медицинских операций. И для этого используются совершенно разные инструменты: веб-разработка востребована больше, чем программирование механизмов лазерной хирургии глаза, но при этом порог вхождения в языки, годящиеся для веб-разработки, гораздо ниже, поэтому их чаще используют. Как и язык общения характеризует особенности менталитета каждого народа, так языки программирования используются для разных целей.
Рейтинг полезности ответа:
Евгений Картавец
руководитель отдела обучения GeekBrains, Mail.Ru Group
Так сложилось исторически. В этой сфере не было монополиста — язык программирования мог создать любой, одно время это было даже модно. Создавались тысячи языков, на которых никто толком не писал. Были и попытки создать супер-язык. Java, C#, Python — в принципе, это как раз такие супер-языки, на которых можно писать все, что угодно.
Есть несколько причин того, что многообразие языков сохранилось, и все не переехали дружно на какой-нибудь Python. Некоторые языки уже прочно заняли свою нишу. У каждого языка есть сильные и слабые стороны, для одних задач он подходит лучше, для других хуже. Кроме того, язык часто обрастает инфраструктурой — фреймворками и т.д., удобных аналогов для которых может не быть в других языках.
Рейтинг полезности ответа:
Екатерина Кошкарова
ведущий специалист департамента информационных решений компании РДТЕХ
Смотря что подразумевать под супер-языком программирования. Если мы говорим о языке, на котором нужно реализовать искусственный интеллект, то почему за основу следует брать именно ООП? У объектно-ориентированных языков есть свои недостатки, такие как избыточность, сложность проектирования, относительная неэффективность. Безусловно, у ООП есть и свои плюсы: повторное использование компонент, задействование библиотек… Но, может, для супер-языка возьмем что-нибудь более гибкое? ?
Рейтинг полезности ответа:
Игорь Шеко
Front End Developer, Voximplant
Язык программирования — это инструмент, он балансирует между удобством использования и функциональностью. Как отвертка: не бывает удобных отверток, которые могли бы закручивать любые шурупы. Ее либо будет неудобно держать, либо с ней будет чемоданчик дополнительных насадок.
Еще одна проблема кроется в самом понятии ООП: с момента появления этого термина мы спорим, что именно он означает. Есть активные сторонники как Smalltalk подхода, так и более поздних идей, появившихся в C++. Кроме того, сейчас сложно найти язык с чистым ООП. Взять хотя бы TypeScript — он поддерживает и ООП, и функциональное программирование, и событийно-ориентированное, и еще несколько парадигм программирования. Такие языки называются мультипарадигмальными, и сейчас их расцвет.
Наконец, у каждого языка есть своя ниша, свое назначение. Даже если бы был создан универсальный язык, нам все равно потребовался бы, например, язык для обучения молодых разработчиков, который должен быть простым, а не универсальным.
Рейтинг полезности ответа:
Ян Орещенков
технический директор бельгийско-белорусской IT компании CactusSoft
Потому что вселенная бесконечна. ? Поясню. Почему за столько лет прогресса в химии не создано суперлекарство? Почему, за миллионы лет эволюции, не рождено суперсущество? Почему, несмотря на огромные успехи в физике, так и не создана «единая теория всего»? Почему число Пи бесконечно? Я не знаю. Но в наблюдаемой мной вселенной все процессы развития эволюционно бесконечны. Видимо, это неотъемлемое свойство той вселенной, где мы живём. Не стоит ожидать появления супер-языка, это мираж.
Рейтинг полезности ответа:
Микаэл Караманянц
директор компании-разработчика мобильных приложений Рашенсофт
Есть несколько причин.
Во-первых, существующие языки программирования, которых сейчас огромное множество, создаются под конкретные задачи, устройства и сферы. Создание супер-языка высокого уровня — очень непростая задача, поскольку нужно будет удовлетворить все потребности.
Во-вторых, не надо забывать и про финансовую сторону данного вопроса. Разработчики новой среды программирования зарабатывают деньги с продаж.
Даже если представить, что создание супер-языка будет реализовано, то это противоречит текущим компаниям по разработке и развитию языков программирования. В этом случае все разработчики языков программирования будут вынуждены слиться в одну компанию или прекратить свое существование — на уже действующем высококонкурентном рынке такая тотальная монополизация редко происходит.
Рейтинг полезности ответа:
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.