Юрий Белк – Full stack Developer (страница 20)
– проект может долго собираться;
– тесты могут быть «тяжёлыми», если поднимают контекст целиком;
– локальный запуск может требовать много ресурсов.
Это всё решается практиками (нормальные тестовые слои, модульность, профили сборки), но поначалу ощущается как «почему так сложно».
3.5. Когда выбирать Java
Сценарий 1. Долгоживущие системы, большие команды, высокая нагрузка
Java особенно хороша, когда вы строите систему, которая будет:
– жить 5–10 лет,
– постоянно развиваться,
– обслуживаться разными командами,
– иметь строгие требования к стабильности.
В таких условиях «чуть больше церемоний» превращается в «чуть меньше хаоса».
Сценарий 2. Банки, энтерпрайз и сложные домены
Java традиционно сильна в доменах, где:
– много бизнес-правил,
– сложные интеграции,
– требования по безопасности,
– аудит, контроль, регламенты,
– устойчивость важнее скорости эксперимента.
Плюс в этих сферах часто уже есть:
– инфраструктура под JVM,
– готовые библиотеки,
– опытные команды,
– стандарты разработки.
Сценарий 3. Когда важна наблюдаемость и эксплуатация
Если вы понимаете, что продукт будет «болеть» и его нужно будет лечить:
– расследовать деградации latency,
– ловить утечки памяти,
– разбирать thread dumps,
– анализировать GC,
то Java даёт хорошую базу и зрелые инструменты.
3.6. Вывод по Java
Java – это не «самая быстрая в написании», но одна из лучших для:
– предсказуемого роста,
– высокой нагрузки,
– больших команд,
– систем, которые нельзя «положить на пару часов».
Если вам нужен язык, где архитектура держится на типах, а эксплуатация поддержана инструментами – Java обычно оправдывает свою репутацию.
Глава 4. Go – плюсы/минусы
Go (или Golang) часто выбирают люди, которые любят, когда всё просто, предсказуемо и быстро. Это язык, который создавали с идеей:
«давайте писать серверы и утилиты так, чтобы их легко было собирать, деплоить и поддерживать».
Go редко восхищает «красотой абстракций», но часто восхищает тем, что:
– сервис собирается в один бинарник,
– работает стабильно,
– жрёт мало,
– и не просит от вас философии на тему DI-контейнеров.
4.1. Что обычно значит «Go-бэкенд»
Типичный Go-сервис:
– Go 1.21+ (или близко к актуальному).
– HTTP API на стандартной библиотеке `net/http` или на роутерах/фреймворках (их много, но часто берут минимум).
– Работа с БД через драйвер + тонкий слой репозитория.
– JSON, gRPC, очереди – всё по ситуации.
– Лёгкий контейнер/деплой: один бинарник + конфиг.
Go-сервисы часто выглядят «прямолинейно». И это не недостаток: это стиль.
4.2. Что поставить для работы
Минимально:
– Go (официальный дистрибутив).
– Редактор:
– VS Code + Go-плагин,
– или GoLand (если хотите «как в Java мире, но для Go»).
– Docker (БД, Redis, брокеры).
– Утилиты:
– `golangci-lint` (сборный линтер),
– `go test` (встроенные тесты),
– `pprof` (профилирование),