Уже есть несколько заметок на похожую тему:
- Почему Kotlin вместо Java
- Почему не Golang
- Выбор среди платформ разработки серверных приложений
- Сравнение Kotlin и Python
- Улучшенный синтаксис Golang
Хочется спустя год немного это переосмыслить и описать по другому.
Во-первых, мы говорим о разработке 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 лет.