Привет!
Предлагаю вашему вниманию перевод статьи "Too Clean?" автора Robert C. Martin (Uncle Bob).
Я только что посмотрел выступление Сары Мэй: Жизнеспособный код. Это было очень хорошо. Я полностью согласен с основными моментами ее выступления. С другой стороны, темой ее выступления было то, что я раньше должным образом не рассматривал.
Но прежде, чем я доберусь до этого, у меня есть придирка. В какой-то момент в своем выступлении она раскритиковала движение мастеров за то, что оно слишком сосредоточено на индивидуальном, а не командном поведении. К сожалению, это неправильная характеристика ремесленного движения, которое всегда было сфокусировано на создании профессиональных и этических команд.
В этом случае, идея о том, что программные системы должны быть «пригодными для жизни» представляет собой интересное понимание. По мнению Мэй, для того чтобы быть „пригодной для жизни“, организация системы программного обеспечения должна лежать где-то между крайностями ужасающего запутанного беспорядка накопителей кода и антисептической чистотой, наблюдаемой на страницах журналов по оформлению интерьеров и брошюр по продаже домов.
Это не то, что я рассматривал или выражал ранее; хотя это всегда было то, что я застенчиво практиковал.
Может ли система быть слишком чистой? Можно ли настолько сосредоточиться на чистоте, что в системе никто практически не сможет работать?
Вот фотография моего офиса, сделанная сегодня. Что вы видите?
Он относительно чистый. В этом есть явная организация. Вы можете видеть мое рабочее место, с ноутбуком и двумя экранами в центре. Вы также можете видеть мою станцию имитации полета справа. Здесь есть корзины, кубические отверстия и вся обычная организационная атрибутика.
Но вокруг также имеется немного беспорядка. Рядом с принтером, расположенным в крайнем левом углу, находится BUG-A-SALT, готовый справиться с вторгшейся мухой. Справа, на вершине Тардис, выглядывающей через крайний правый экран, находится рулон туалетной бумаги. На случай, если я пролью свой кофе или захочу чихнуть. Вы сможете найти ерундовый спиннер? Видите, кучу инструментов для рисования слева? А как насчет всех этих стикеров, фотографий и… А что в мире внутри всех этих дырок в шкафу?
Чистота и организация офиса делают его пригодным для использования. Я знаю, где находятся все вещи. И знаю, как получить к ним доступ. Не связанные между собой элементы не мешают друг другу. Не существует ненужных зависимостей.
Небольшой беспорядок в офисе полезен. Беспорядок существует из-за временных проблем. Мухи, кофе, чихание, каракули, праздные моменты, изменение рабочих приоритетов, и просто общие места, чтобы положить вещи, с которыми я не знаю, что делать. Без этого бардака мне было бы сложнее пользоваться рабочим местом. И очередное использование офиса снова вызвало бы беспорядок!
Так что, очевидно, я позволяю небольшому беспорядку проникать в мой офис. Эта неразбериха позволяет решить временные проблемы. Но, так же ясно, что я борюсь за то, чтобы держать этот бардак под контролем. Я борюсь за чистоту офиса. И это непросто!
Применимо ли это правило к коду? Это абсолютно так! Когда я пишу код, я изо всех сил стараюсь держать его в чистоте. Но есть и небольшие места, где я нарушаю правила именно потому, что эти нарушения дают возможность решить временные проблемы.
Например, я очень стараюсь отделять ведущих от зрителей. Код, который помещает данные в презентабельную форму, не должен находиться рядом с кодом, который выводит эти данные на экран. С другой стороны, когда вы пытаетесь заставить экран выглядеть и функционировать должным образом, очень сложно переключаться между двумя различными файлами. Иногда просто имеет смысл снова объединить код, получить все, что работает так, как вам нравится, а затем повторно разделить код. Эта техника известна под названием „Хуже, чем лучше“.
В любом случае, я думаю, что есть смысл в том, что код должен быть пригодным для жизни. Нам не должно быть стыдно, если наш код выглядит немного прожитым. С другой стороны, мы должны тщательно следить за собой и не допускать, чтобы беспорядок вышел из-под контроля.
Автор: Харченко