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