Виммельбух, 3, перетяжка
Виммельбух, 3, перетяжка
Виммельбух, 3, перетяжка

Реально ли создать супер-язык программирования — отвечают эксперты

Аватар Анастасия Витвицкая
Отредактировано

Наш подписчик прислал вопрос в редакцию Tproger: «Почему до сих пор не создан супер-язык программирования?» Предоставляем вам ответы экспертов.

10К открытий10К показов
Реально ли создать супер-язык программирования — отвечают эксперты

В мире так много языков. Более 7 тысяч естественных языков, например, русский, английский и пр. Языков программирования не намного меньше, под 3 тысячи. И сейчас, пока вы читаете эту статью, какой-то школьник уже кодит на своем собственном языке. Если у естественных языков есть много общего, то сходства можно найти и в языках программирования. Наш подписчик задался вопросом, которым мы хотим поделиться с вами:

«Среди языков программирования очень много общего. Почему, используя принципы ООП, до сих пор не создан супер-язык язык программирования?»

Мы обратились за разъяснением к нашим экспертам, а полученные ответы предоставляем вашему вниманию.

Реально ли создать супер-язык программирования?

Области применения языков программирования очень разнообразны: интегральные схемы, веб, системное ПО и т.п. Уникальный супер-язык это универсальность, а, как известно, универсальность ведёт к потере каких-то «фишек», что не всегда приемлемо. Кроме того, принципы ООП очень хороши, но не являются «серебряной пулей». Сейчас быстрыми темпами всё большую популярность набирает Функциональное программирование, которое отлично подходит для параллельного/конкурентного программирования, особенно в эпоху производительности, большого объёма данных и остановки роста частот, на которых работают процессоры. Сейчас целенаправленное создание супер-языка не имеет смысла из-за отсутствия целевой аудитории. На данный момент уже есть огромное количество специалистов, умеющих работать в существующих языках. Массово всем изучать, переучиваться на новый язык экономически нецелесообразно. Кроме специалистов, есть много наработок, библиотек и инструментов, которые нужно будет переписывать на новый язык, что тоже вряд ли будет хорошим решением. Сейчас просматривается плавная эволюция: одни языки сменяются другими, появляются улучшенные варианты (примеры — Java в Kotlin или Scala, JavaScript в TypeScript), делаются попытки объединить языки (прим. JavaScript и Scala в Scala.js). Приведёт ли это к созданию универсального языка (особенно ООП)? Мне кажется, что нет, но время покажет.

Рейтинг полезности ответа:
3.6

(ответ подготовлен совместно с Михаилом Субботиным, преподавателем израильской высшей школы IT и безопасности HackerU)

ООП — не панацея, есть еще и функциональное программирование, и process-oriented programming, и логическое программирование, и много всяких парадигм и подходов. Не будем забывать, что каждый язык программирования был создан для лучшего решения конкретной задачи. Универсальных решений нет нигде, почему они должны быть в программировании?

Рейтинг полезности ответа:
1.3

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

Для разных людей и разных задач лучшими будут разные языки с разным функционалом, нет единого критерия. Язык C работает быстро, но не поддерживает автоматическое управление выделением и освобождением памяти, Python его поддерживает, но медленнее C++. В Go гораздо лучше многопоточность (что позволяет эффективнее писать производительные и сетевые приложения), чем в Python, но нет понятия «класса» из ООП (из-за чего сложнее быстро прототипировать или описывать бизнес-логику).

C++ поддерживает ООП и быстро работает, однако на нём не пишут веб-сайты, на Ruby пишут веб-сайты, но не пишут firmware для роутеров.

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

Большинство программ для Linux написано на C, хотя C++ может то же, что C, и, кроме того, лучше поддерживает ООП. Есть два одинаковых по функционалу языка — Ruby и Python, но только один выбивается в лидеры.

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

Изъять внедрение PHP кода прямо в HTML (кстати, в своё время этот функционал считался крайне полезным, сейчас же считается очень вредным), GIL из Python, Monkey patching из Ruby (да, и определить, какие черты худшие, сложно — всё субъективно: не всем нравится, что в Go нет классических исключений). И самое главное, добавить слишком много лучших черт в один язык не получится, только выбрать некоторые из них, ибо слишком много функций — тоже плохо (пример — Perl6).

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

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

Рейтинг полезности ответа:
8.7

Количество компьютерных языков постоянно растет. Потому что:

Во-первых, потому что меняется техника (hardware).

Во-вторых, потому что меняются технологии и инструменты – когда-то программисты использовали перфокарты, потом консоли, потом появились IDE, системы контроля версий и многое другое.

В-третьих, потому что меняются решаемые задачи – началось все с вопросов обороны (расчеты таблиц для артиллерии, взлома шифров ENIGMA, расчета атомных бомб и траекторий ракет), потом подтянулась экономика, потом компьютер заменил телефон, потом телефонокомпьютер (смартфон) заменил фото и видео камеру, стал распознавать образы, добавилась дополненная реальность и т.д.

В четвертых, потому что ИТ компании через создание языков создают свои собственные платформы, на которую «подсаживают» весь мир. (Sun, а позже Oracle – платформа на Java, Microsoft – платформа на C#) Есть еще в пятых, в шестых и т.д.

Это все заставляет языки программирования плодиться и размножаться, а не только изменяться и исчезать. И хотя последние 30 лет ООП – господствующая методология, но существует множество компьютерных языков, в которых изначально заложена другая методология. Например, с одной стороны это старые добрые ассемблер и Си, а с другой стороны вполне современные HTML, SQL, Erlang и тысячи других. ООП так или иначе оставляет свой след в современных языках, но даже в сравнительно близких языках (например Java и C#) ООП реализован по разному.

Резюмируя – по множеству причин миру не грозит единственный супер язык. И поэтому студенту, чтобы стать программистом, приходиться знакомиться по крайней мере с десятком разных языков.

Рейтинг полезности ответа:
1.2

В замечательной книге Дугласа Адамса «Автостопом по Вселенной» есть прекрасный эпизод, в котором огромный компьютер в течение семи с половиной миллионов лет вычислений искал ответ на «главный вопрос жизни, Вселенной и всего такого».
В результате он выдал ответ «42». Но, как сказал сам компьютер: «Мне кажется, если уж быть с вами абсолютно честным, то всё дело в том, что вы сами не знали, в чём вопрос».

С языками программирования история очень схожа. Что есть супер-язык программирования? Чем он должен отличаться от существующих языков? Мне кажется, мало кто может на это ответить.

В существующем мире IT языки программирования — это инструменты, каждый из которых призван решать свою задачу. Так, множество Enterprise систем пишутся на Java, который зарекомендовал себя именно отточенностью на этот слой приложения.
Актуальные в мире Highload микросервисы отлично пишутся на Go и том же Java, потому что вновь эти инструменты оказываются удобными для создания подобного рода вещей. Порядка 80% сайтов используют PHP, который так любит погонять сообщество. И это тоже неспроста — это говорит о пригодности инструмента. А пригодность складывается не только из того, насколько хитроумную абстракцию Вы сможете написать на нём, а ещё и на экономической составляющей.

Из всего этого следует один важный вывод. Осознавая то, что язык — это инструмент, нужно понимать, что за ним есть более глобальные парадигмы. Это те же алгоритмы, дискретная математика, анализ данных, устройство ЭВМ и прочее.

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

Рейтинг полезности ответа:
1.4

Честно говоря, для меня это два различных вопроса: «Почему не создан супер-язык программирования?» и«Почему не все языки программирования объектно-ориентированы?»

Каждый язык создаётся с определённой целью — коммуникация, взаимодействие, сохранение чего-либо. Люди создают языки издревле, и каждый из них имеет определённую цель, т.е. соответствует тому, для чего он создавался. Когда язык используется для решения задач вне своих целей — получается не очень хорошо или не получается совсем (представьте себе инженера-механика, описывающего растительный мир терминами «труба», «сосуд», «листовая поверхность»). То же самое и с языками программирования — все они создавались для решения заданного спектра задач. Часть из них именуется «универсальными» языками, но в любом случае в процессе решения задачи на основе универсального языка программист сформирует новый язык, который будет более конкретно описывать решение задачи. Ну а так как у нас множество совершенно разных задач, то и сформировать единый язык для всех этих задач весьма сложно, т.к. в одном случае язык будет слишком общим и не будет помогать решать проблемы, а в обратном — слишком сложным, т.к. будет содержать способы решения всего потенциального спектра задач, которые могут перед ним стоять.

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

Рейтинг полезности ответа:
0.9

Позволю себе перефразировать вопрос: «Почему до сих пор существует так много языков программирования, а не один универсальный?» Сегодня в мире существует более 30 различных языков программирования. И почти все из них появились для решения конкретных задач и лишь впоследствии эволюционировали до своих полноценных версий. К примеру, всем известный php изначально был просто шаблонизатором, а одной из целей создания современного golang было решение реальных проблем, возникающих при разработке программного обеспечения в Google.

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

Рейтинг полезности ответа:
0.0

Так сложилось исторически. В этой сфере не было монополиста — язык программирования мог создать любой, одно время это было даже модно. Создавались тысячи языков, на которых никто толком не писал. Были и попытки создать супер-язык. Java, C#, Python — в принципе, это как раз такие супер-языки, на которых можно писать все, что угодно.

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

Рейтинг полезности ответа:
0.0

Смотря что подразумевать под супер-языком программирования. Если мы говорим о языке, на котором нужно реализовать искусственный интеллект, то почему за основу следует брать именно ООП? У объектно-ориентированных языков есть свои недостатки, такие как избыточность, сложность проектирования, относительная неэффективность. Безусловно, у ООП есть и свои плюсы: повторное использование компонент, задействование библиотек… Но, может, для супер-языка возьмем что-нибудь более гибкое? ?

Рейтинг полезности ответа:
0.0

Язык программирования — это инструмент, он балансирует между удобством использования и функциональностью. Как отвертка: не бывает удобных отверток, которые могли бы закручивать любые шурупы. Ее либо будет неудобно держать, либо с ней будет чемоданчик дополнительных насадок.

Еще одна проблема кроется в самом понятии ООП: с момента появления этого термина мы спорим, что именно он означает. Есть активные сторонники как Smalltalk подхода, так и более поздних идей, появившихся в C++. Кроме того, сейчас сложно найти язык с чистым ООП. Взять хотя бы TypeScript — он поддерживает и ООП, и функциональное программирование, и событийно-ориентированное, и еще несколько парадигм программирования. Такие языки называются мультипарадигмальными, и сейчас их расцвет.

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

Рейтинг полезности ответа:
1.3

Потому что вселенная бесконечна. ? Поясню. Почему за столько лет прогресса в химии не создано суперлекарство? Почему, за миллионы лет эволюции, не рождено суперсущество? Почему, несмотря на огромные успехи в физике, так и не создана «единая теория всего»? Почему число Пи бесконечно? Я не знаю. Но в наблюдаемой мной вселенной все процессы развития эволюционно бесконечны. Видимо, это неотъемлемое свойство той вселенной, где мы живём. Не стоит ожидать появления супер-языка, это мираж.

Рейтинг полезности ответа:
1.2

Есть несколько причин.

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

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

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

Рейтинг полезности ответа:
0.5

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

Следите за новыми постами
Следите за новыми постами по любимым темам
10К открытий10К показов