Эссе о разработке игр, мышлении и книгах

Мысли о языках программирования

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

Покопавшись в Julia решил зафиксировать мысли о текущем состоянии популярных языков программирования и их будущем. Без сильной аргументации и очень субъективно.

C

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

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

C++ vs Rust

Rust претендует на роль лучшего C++, но занять её сможет только если C++ сам это место отдаст. Судя по принимаемым стандартам C++, тот не против подвинуться.

Из-за ориентированности на безопасность и убогий синтаксис, Rust может претендовать только на кусок индустрии, где безопасность критичнее скорости разработки. То есть весьма небольшой кусок.

Если вдруг появится C++ 2.0, пожертвовавший обратной совместимостью в угоду удобству, Rust свернётся.

В любом случае, захватить новые области сверх уже занятых C++ ни один из них не сможет.

Область применения C++ будет сужаться под давлением молодых языков, в том числе динамических. Постепенно будут теряться позиции в области разработки GUI (в пользу более простых и / или молодых ЯП) и, возможно, в области разработки безопасного софта (в пользу Rust).

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

Интересно сравнить рост популярности Rust с Go. Оба языка появились одновременно, одной из задач ставили увеличение надёжности разработки, но выбрали разные пути её достижения.

C

Тёмная пони для меня. Популярен в геймдеве и, видимо, в области GUI для Windows.

Обе области не гарантируют стабильное будущее языку:

  • Геймдев не ограничивается одним Unity. Завязываться на ЯП из-за единственного софта не рационально. Эволюцию никто не отменял, Unity не будет топовым движком вечно.
  • GUI для Windows хоть и обширный рынок, но всё-таки испытывает на себе сильное давление со стороны веб-интерфейсов. Плюс, C# в нём не монополист.

Предполагаю, что будет на слуху, пока будет на слуху Unity. По крайней мере в моей части вселенной.

Семейство Java

Огромные наработки корпоративного софта позволят Java успешно существовать ещё десятки лет.

Зачем её использовать, если нет необходимости поддерживать совместимость с миллионами старых строк кода или со старым / редким API не знаю.

Использование Java в Android добавляет ей живучести, но одним Android мобильники не исчерпываются и софт для них хочется делать кроссплатформенным. Тем более, даже на Android её пытаются заменить на Dart за счёт фреймворка Flutter.

Отдельно маячат дочки JVM, вроде Kotlin и Scala, которые выглядели бы интересно как самостоятельные проекты, но всё-таки разрабатываются как наследники инфраструктуры Java с целью поддерживать совместимость со всем кодом платформы. А значит к ним применима та же логика, что и к родительскому языку.

Отдельной ниши для них не вижу.

PHP

Как Java, только в вебе.

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

Ruby, Perl

Умирающие старички.

Ruby слил Python-у в чистую. Ну или точнее Python сделал Ruby с помощью превосходной инженерной культуры, приложенной к дизайну языка.

Perl — уникальный язык — мечта цифрового археолога. Без системы впитывал в себя все модные штуки из 90-ых и 00-ых из-за чего его стало невозможным использовать.

Имел удовольствие писать на нём год в начале карьеры, очень интересные ощущения.

Swift

Чисто корпоративный язык, как и Objective C.

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

Пока не выберется, перспективы у него будут не радужные. Никакая поддержка Apple не поможет ему наработать тех же «батареек» столько, сколько у кроссплатформенных языков.

Julia, R, MATLAB

Языки для математики.

R и MATLAB особо не пытались выбраться из этой ниши.

Julia имеет все шансы стать популярным языком общего назначения. Но для этого ей потребуется сделать много всего:

  • Решить свои детские проблемы.
  • Оторвать большую часть пользователей у R, MATLAB.
  • Убедить сообщество, что на ней проще писать математику, чем на Python.
  • Построить форпост, в виде хорошего фреймворка, в области GUI или разработки серверов / сервисов.

Подробнее про Julia я писал в отдельном посте.

Как миниму, Julia может существенно подвинуть старые языки в области разработки «числодробилок».

Семейство JavaScript

JavaScript* — JavaScript и всё, что он породил или что в него компилируется: TypeScript, Dart, CoffeeScript, etc.

Объединил их вместе, так как они стоят в тени общего родственника, даже если просто компилируются в его код. А значит несут отпечаток его недостатков.

Массовое распространение JavaScript*, его экспансия в область интерфейсов и, о боже, серверов — неизбежное зло, с которым придётся жить.

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

На текущий момент JavaScript* предъявляет претензии на почти всю сферу разработки GUI. Его даже в космических кораблях используют.

Поэтому знать что-то из семейства необходимо. Я бы сказал, что разумно смотреть на связку «современный JavaScript» + (TypeScript или Dart).

В пользу Dart говорят поддержка Google и фреймворк для кроссплатформенного GUI Flutter.

В пользу TypeScript говорит более широкая поддержка в web. Тот же Vue переходит на TypeScript.

Мечтаю о том, чтобы кто-нибудь из больших игроков набрался храбрости и заменил JavaScript в вебе на какой-нибудь Python.

Функциональщина

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

На мой взгляд, причина в императивной природе нашего мира, мышления и железа.

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

Поэтому в будущее преимущественно функциональных языков я не верю. Они хорошая площадка для экспериментов, не более.

Go и Python

Про Go и Python я уже писал в эссе о статической типизации в Python. Поэтому тут повторюсь кратко.

Естественным образом Go и Python соперничают за область разработки (веб-)сервисов.

На стороне Python гибкость и батарейки (пока что).

На стороне Go — простота.

Поскольку большинство сервисов упирается в IO и в работу сторонних сервисов (кэша, базы, etc), а не в процессор, рискну сделать следующие предположения.

Go будет нужен, если у вас много людей, которым необходимо писать очень много очень простого кода. То есть если вы «Google». Или если вы упираетесь в процессор и JIT в Python эту проблему не решает, но тогда и Go может быть не лучшим вариантом.

Если вас мало и / или проект экспериментальный, новый, то использовать Python выгоднее. Выигрыш от лаконичности, метапрограммирования, батареек будет выше, чем от простоты кода на Go.

Go отъест у Python кусок рынка, на котором нет творческой работы или творчество находится на других уровнях абстракции, например, на уровне высокой архитектуры. Это довольно большой кусок, но далеко не весь веб.

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

Подвинуть его с этого места может только динамически типизированный язык со встроенным JIT и какой-нибудь новой фичей, а-ля множественная диспетчеризация в Julia.

Итого

Внезапно (но всё-таки до написания этого поста) обнаружил, что передо мной не стоит задача перехода на новые ЯП для продолжения карьеры разработчика. Хотя по всем срокам уже пора бы.

C++, Python и JavaScript* всё ещё хорошее и сильное сочетание технологий, которое позволит мне сделать всё, что необходимо. Или быстро переключиться на новый ЯП, если потребуется делать что-то нишевое.

Это хорошо для меня, но плохо для индустрии.

За этот год я посмотрел на Julia — единственный новый язык, который меня действительно заинтересовал. Посмотрел также на актуальное состояние JavaScript. Чтобы закрыть тему, надо будет глянуть внимательно на TypeScript или Dart.