
Однажды Диоген увидел, как разработчик читает требования и плачет, а слёзы смывают грязь с его лица. Диоген перестал ходить к реке умываться, сказав: «Мальчик превзошёл меня в простоте жизни».
В мире разработки программного обеспечения, как и в философии, существуют различные школы мысли, подходы и мировоззрения. Каждый архитектор и разработчик — осознанно или нет — следует определённым принципам, которые, для нужд этой статьи, удивительным образом перекликаются с древними философскими учениями. Давайте рассмотрим эти параллели.
Я нагуглил некоторое количество философских школ и спешу предложить вам такую аналогию:
Киники — просто и минималистично.
Платоники — невыносимо сложно и идеалистично.
Стоики — надёжно, но рано или поздно всё упадёт.
Софисты — красиво, но непрактично.
Прагматики — работает, и ладно.
Схоласты — бесконечные обсуждения архитектуры, но ни одной строчки кода.
Теперь давайте остановимся подробнее на каждой школе мысли.
Киники
«Зачем нам фреймворк? Есть же bash!»
Документация? «Читайте код».
CI/CD? git push --force решает все проблемы.
Docker? systemd нам в помощь.
Намеренно пишут неортодоксальный код, чтобы «встряхнуть» команду.
Проводят демонстрации багов прямо на проде.
Платоники
Реальный код — это лишь несовершенная тень идеального дизайна.
Каждый баг — это лишь тень несовершенства реального кода.
Нам нужен ещё один слой абстракции между абстракциями.
Простое решение не может быть правильным по определению.
В идеальном мире каждый метод — это интерфейс.
Настоящая архитектура существует только в UML-диаграммах.
Стоики
Падение прода неизбежно, а каждая ошибка может стать последней.
Стремление важнее результата — «Ничего не получилось, но мы сильно старались».
Никто не ощущает баги — о них только думают.
Не облекай свой код в пышные абстракции.
Люди пишут код с багами невольно.
Являюсь ли я частью проблемы или её решения?
Если вы слышите, как кто-то читает молитву о безмятежности, то перед вами стоик: «Боже, дай мне душевный покой принять тот код, который я не могу изменить, мужество изменить тот, что могу, и мудрость отличить одно от другого».
Софисты
Красота кода важнее его практичности.
На код-ревью больше обсуждают стиль, чем функциональность.
«Да, это медленнее работает, зато посмотрите, какая архитектура!»
Могут убедить заказчика, что баг — это фича.
На код-ревью побеждает не самый правый, а самый красноречивый.
Прагматики
«Работает? Не трогай. Не работает? Почини как можешь».
Документация? «Код сам себя документирует».
Архитектура — это то, что получилось в итоге.
Технический долг? «Будущие проблемы решим в будущем».
«Лучшее — враг хорошего, а рефакторинг — враг работающего».
Схоласты
Команда может месяцами обсуждать «идеальную архитектуру».
Создаются сложные диаграммы и документация.
Проводятся бесконечные митинги по дизайну.
Каждое решение требует согласования на архитектурном комитете.
Но реальный код так и не пишется.
Заключение
Возможно, главный урок, который мы можем извлечь из этой аналогии — это то, как много вокруг людей с неправильными подходами и мировоззрениями. Но не унывайте и помните мудрые слова Марка Аврелия:
Сегодня мне придётся столкнуться с людьми навязчивыми, неблагодарными, заносчивыми, коварными, завистливыми, неуживчивыми. Эти свойства проистекают от незнания ими добра и зла. Я же, познавший прекрасную природу добра и постыдную — зла, понимаю и природу тех, кто заблуждается.