Чистый код: о чем молчат сеньёры

Меня изначально учили писать чистый код. Я только-только объявила свою первую переменную, а старшие товарищи уже говорили:

“Без тестов твой код не работает!”
“Пиши код так чтобы любой разработчик который ничего не знает о проекте мог его открыть и сразу понять, что он делает”.

Еще я читала умные книжки, слушала конференции, подписалась на блоги. В моем неокрепшем джунском мозгу создалось впечатление, что все более-менее нормальные программисты вылизывают свой код так, что девки завидуют. Все об этом говорят: ООП! TDD! Паттерны! Чистый код! Рефакторинг!

Поначалу обучение вгоняло меня в ярость: “Мой модуль работает! Какого черта в нем что-то менять? Я его за N дней выстрадала. Как это ВСЁ переписать?!”. Потом я перестала бояться, полюбила вот это все и пошла с таким багажом устраиваться на свою первую программерскую работу.

Интервьюер: могут ли юнит-тесты друг от друга зависеть?
Я (Я знаю, я знаю! Он меня проверяет!): Нет! Тесты всегда должны быть независимы друг от друга!
Интервьюер: Нет. На самом деле, в реальной жизни могут.

Упс.

Так я оказалась в компании единственным программером, кто умел писать юниты. Мне дали задачку покрыть тестами все ключевые алгоритмы продукта. Методы алгоритмов занимали до 3000 строк кода. В них подавалось с десяток сложносочиненных аргументов, а авторы не брезговали баловаться статик вызовами. Чтобы победить этих монстров кто-то из моих предшественников воткнул в проект PowerMock, который уделывал Classloader-ы. И да, чьи-то сиротливые тесты действительно запускались в правильном порядке.

Оказалось далеко не все и не всегда тестируют код. Например вот эти все люди вокруг. Это такое ощущение… как когда идешь с коллегами обедать и вдруг обнаруживаешь что ты единственный, кто моет руки перед едой.

Beauty is no longer a goal or even a virtue, it is a moral obligation

Но дело не только в тестах. Недавно я обнаружила, что многие простые рабочие задачи, где хотелось сделать простое и очевидное решение, уже через неделю превращаются в адскую хрень. Начинаешь все красивенько: тут паттерны, там наследование, потом в одном месте оказывается что какой-нибудь класс с бизнес-логикой не укладывается в общую структуру проекта. И еще один. И еще. Находятся такие места куда как не тыкайся не присунуть ни паттерны, ни делегирование, ни прости, господи ООП.

Иногда уже из постановки задачки видно, что получится хрень: консольная утилита которая берет xml файлы и данные из MySQL базы и кладет их в виде графов в Redis. (Больные ублюдки, зачем вам это нужно?)

Иногда мне кажется что я могла бы все-таки сделать это хорошо, просто туплю.

Плачет девушка на стоянке, 
Сидя в новеньком BMW, 
Вся в слезах и губной помадке —
Три педальки, а ножки — две.

Тогда я переписываю свой модуль снова и снова и снова и все равно находится что-то, что не укладывается в мою идеальную симметричную схему (хорошо что я не работаю в каком-нибудь интеграторе и надо мной не стоит менеджер с секундомером). Коллеги надо мной смеются. Но у меня в голове есть выстраданная установка, что код должен быть очевидным, красивым, объектным, модульным с пони и радугами. Но мой проект получается страшным. Страшным! Не то что пони, зайчики пробегая мимо, падают замертво.

Еще есть один большой проект, в котором вообще нет никаких паттернов. Есть просто куча чужого кода которую надо дописать и заставить работать. В некоторых местах есть такие граничные кейсы, где приходится выкручиваться и изворачиваться, чтобы вообще хоть что-то реализовать по требованиям.

То чувство, когда приглашают поработать в интересном проекте

Теперь книжки и статейки про чистый код вызывают у меня приступы негодования. Красивый код постулируется как обязательная вещь к которой нужно стремиться. Однако писать его получается только если у тебя очень хорошо продумана архитектура, а такое возможно только в идеальных для разработчика условиях. Т.е. или когда ты работаешь один, или если тебе повезло и ты работаешь в идеальной команде единомышленников, где никто не наворачивает в него всяких странных извращений.

А в реальной жизни ты не просто попадаешь в компанию где перед обедом никто не моет руки, а идешь их мыть сам и узнаешь что в здании нет водопровода. Возможно, мне нужно просто вырасти и научиться расслабляться и думать об Англии, но.. не так я себе это представляла, не так.

Периодически я с чувством стыда показываю свой код товарищам и спрашиваю: ну как так-то? Как еще это все переписать, чтобы стало красиво? Но товарищи уже познали Дзен и отвечают: “Да чего ты так расстраиваешься? Работает же!”