Найти в Дзене

Аскетизм как архитектура: Почему в Go отсутствие фич — это фича

После многих лет в Java-мире, где на каждую задачу есть три библиотеки, пять аннотаций и паттерн «Абстрактная Фабрика Фабрик», Go поначалу кажется... пустым. Когда я только начинал погружаться, мой внутренний архитектор кричал: «Где перегрузка методов? Где нормальное наследование? Как я буду жить без Optional?» Но спустя сотни часов ревью я понял: то, что в Java считается «мощью», в больших проектах и командах часто становится «проклятием». В Java одну и ту же функциональность можно реализовать десятком способов. В итоге, приходя на новый проект, ты тратишь недели только на то, чтобы понять, какой именно «диалект» Spring или Hibernate здесь используют в этот раз. В Go философия иная. Язык намеренно ограничен. В 90% случаев задачу можно решить только одним, самым очевидным способом. Тимлидский профит: Java Enterprise обожает магию. Ты ставишь @Transactional, и под капотом начинают крутиться шестеренки прокси-объектов и аспектов. Это удобно, пока всё работает. Но когда транзакция «протек
Оглавление

После многих лет в Java-мире, где на каждую задачу есть три библиотеки, пять аннотаций и паттерн «Абстрактная Фабрика Фабрик», Go поначалу кажется... пустым. Когда я только начинал погружаться, мой внутренний архитектор кричал: «Где перегрузка методов? Где нормальное наследование? Как я буду жить без Optional

Но спустя сотни часов ревью я понял: то, что в Java считается «мощью», в больших проектах и командах часто становится «проклятием».

🧩 Когнитивная нагрузка: Правило одного пути

В Java одну и ту же функциональность можно реализовать десятком способов. В итоге, приходя на новый проект, ты тратишь недели только на то, чтобы понять, какой именно «диалект» Spring или Hibernate здесь используют в этот раз.

В Go философия иная. Язык намеренно ограничен. В 90% случаев задачу можно решить только одним, самым очевидным способом.

Тимлидский профит:

  • Легкое ревью: Тебе не нужно гадать, почему разработчик выбрал именно эту магическую аннотацию или сложную иерархию. Весь код — перед глазами.
  • Быстрая ротация: Новый человек вкатывается в проект за дни, а не за месяцы, потому что код на Go везде выглядит одинаково.

🪄 Магия против Явности

Java Enterprise обожает магию. Ты ставишь @Transactional, и под капотом начинают крутиться шестеренки прокси-объектов и аспектов. Это удобно, пока всё работает. Но когда транзакция «протекает» или ломается контекст, ты отправляешься в ад отладки стектрейсов на 200 строк.

-2

Go — это принцип WYSIWYG (What You See Is What You Get). Ошибки обрабатываются явно, зависимости передаются явно. Да, это требует больше строк кода. Но этот код читается, а не угадывается.

📉 Цена «умного» кода

Как тимлид, я знаю: самый дорогой код — это «умный» код. Тот, который написал гений архитектуры, уволившийся два года назад. В Java слишком легко построить многоуровневую абстракцию, которую спустя время все боятся трогать.

Go буквально бьет по рукам любителей строить «авианосцы» там, где нужна «лодка». Аскетизм языка заставляет нас проектировать просто. И в долгосроке это экономит ресурсы на поддержке и нервы команды.

Вывод Тимлида

Go — это не про «бедность» синтаксиса. Это про гигиену разработки. Иногда, чтобы построить что-то действительно надежное и масштабируемое, нужно не добавлять новые фичи, а научиться вовремя отказываться от старых привычек.

Понравились мысли? Еще больше практического опыта перехода с Java на Go, разборов архитектуры и будней тимлида читайте в моем телеграм-канале:

👉 🐹 Go после Java: Записки Тимлида

Заходите, там мы обсуждаем, как перестать бояться простоты и начать писать поддерживаемый код.