Языки программирования для backend

Уже есть несколько заметок на похожую тему:

Хочется спустя год немного это переосмыслить и описать по другому.

Во-первых, мы говорим о разработке API. Server-side rendering уже не актуален (во многом из-за популярности мобильных приложений), а значит и все с ним связанное (RubyOnRails/Django и их JS/PHP-клоны).

Во-вторых, для микросервисов часто обновление/улучшение качества проекта по времени занимает как то же самое, но еще и с переходом на другой язык / платформу. Поэтому важно иметь целевую архитектуру в виду. И уже довольно скоро большинство проектов будет на ней. Понятно, что скоро – это не месяц, все зависит от кол-ва микросервисов, но это вряд ли более 2х лет.

Далее, более-менее актуальный список:

  • Kotlin + Spring
  • Java + Spring
  • Python + FastAPI
  • JS/TS + …
  • Golang
  • PHP + Yii / Lavarel / Symfony / …

Остальное либо легаси, либо что-то маргинальное (странное решение, просто потому что захотелось).

Теперь представим, что нужно начинать новый проект. Или выбираем / обновляем целевую архитектуру.

Что самое главное? Наличие программистов. И их возможность и желание писать на стеке. Почему? Да, технологии отличаются, но не на порядки.

А если все-таки посмотреть технические аспекты? Это прям выжимки-выжимки, детали по ссылкам в начале статьи.

Node:

  • JS/TS вызвал когда-то фурор в бекенде с их асинхронным подходом. С того времени все платформы обзавелись этим.
  • А вот проблемы JS/TS никуда не делись.
    • слабая типизация, а из-за этого проблемы с багами и скоростью. У меня есть опыт, когда переписывание микросервисов (не одного, нескольких) с JS на Kotlin+Spring приводило к существенному снижению задержки (порядка 2x раз).
    • море фреймворков: 2 проекта на TS, скорее всего, будут совершенно разными, только “бренд” Node один.
  • Вполне может использоваться для serverless (только отдельный вопрос зачем serverless, но иногда нужно).

Java:

  • Она ни чем не лучше Kotlin, только хуже.
  • Тогда зачем? Только для консервативных сред, где боятся брать ответственность за изменение любой вещи.
  • Единственная техническая причина – разработка библиотеки для Java. Но это везде так: хотите делать библиотеку для Golang – используйте Golang, для Kotlin – используйте Kotlin.
  • Плюс, не требуется сразу весь проект переводить. Можно по 1 классу. Есть тесты в этих ваших интернетах, что при этом технических проблем нет (ни по памяти, ни по производительности).

Python:

  • Плохая типизация, плохая работа с коллекциями.
  • Технических плюсов нет.
  • Язык любят AI-разработчики (ибо университетский язык на Западе), так что выпускают разные специфические библиотеки. И в этом случае имеет смысл.

PHP:

  • Крайне слабый и странный как язык в 2024, более-менее как платформа.
  • Технических плюсов нет.

Golang:

  • Крайне слабый и странный как язык в 2024, более-менее как платформа.
  • Golang можно в каких-то редких проектах использовать (типа Caddy – замена NGINX на Golang вместо C).
  • В целом, народ как-то не понял Golang. Это для приложений типа NGINX или Kubernetes, для cli-утил, а не для бизнес-микросервисов.
  • Можно писать бизнес-микросервисы на Golang? Да, но это не лучший инструмент из-за особенностей языка, не платформы.
  • Может быть какой-нибудь язык получше на эту платформу заведут (типа TypeScript для JS: чтобы и с коллекциями работал удобно, и обработка ошибок бизнесовая, и остальное). Уже много времени прошло: не имеет смысла говорить, что язык хорош, но его гениальность не понимают.

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

Понятно, что многих подобная позиция возмутит. Просто откройте сайт https://kotlinlang.org/ и в секции Why Kotlin? посмотрите примеры. И напишите это же на другом языке. Получилось лучше? Нет. А теперь представьте насколько разница накопится на размере проекта.

Небольшая оговорка: я вообще не фанат Kotlin, но технически сильных альтернатив на данный момент нет. Сейчас по работе пишу микросервисы на TypeScript, Python и Kotlin. Ранее на работах писал (более года на каждом стеке) на C++, Java, C#, Ruby. Персонально еще на Golang, Basic, Pascal, PHP. Стаж программирования где-то 26 лет (еще со школы), из них по трудовой 19 лет.