Development

Чтобы улучшить код, удалите его

(В оригинале – Improve Code by Removing It)

Лучше меньше, да лучше. И как бы избито это не звучало, иногда это действительно так.

Одно из улучшений, которое я сделал с нашим кодом в течении последних недель, было удаление значительных его кусков.
Мы писали софт, следуя принципам ХР, в том числе и YAGNI (You Aren’t Going to Need It — «Вам это не понадобится»). Однако люди есть люди, и в нескольких местах мы потерпели неудачу.

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

Так что я упростил код, повысил производительность и снизил уровень энтропии всего кода, удалив проблемные куски. К счастью, юнит- тесты подтвердили, что при удалении ничего другого не сломалось.

Простой и безусловно полезный опыт.

Итак, почему же ненужный код оказывается в репозитории? Почему программист чувствует необходимость писать лишний код, и почему этот код проходит через фазу ревью? Практически всегда причины следующие: – Это было прикольно, и программист хотел это сделать. (Подсказка: Пишите код, потому что он добавляет ценность, а не потому что он вас развлекает). – Кто-то решил, что это понадобится в будущем и поэтому лучше всего закодировать это прямо сейчас. (Подсказка: Это не соответствует принципу YAGNI. Если вам эта функциональность не нужна прямо сейчас, то и не надо ее прямо сейчас реализовывать). – Это не казалось чем-то большим и сложным, поэтому было проще это реализовать, чем идти к заказчику выяснять, надо ли им это или нет. (Подсказка: Написать и потом сопровождать написанное в любом случае сложнее. И с заказчиком всегда можно договориться.

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

Программист «придумал» дополнительные требования, которые не были ни задокументированы, ни обсуждены, что оправдало новую функциональность. Ведь требования – это все. (Подсказка: Программисты не должны составлять требования, это задача заказчика)

Да, над чем вы сейчас работаете? Вы уверены, что это точно необходимо?

Автор оригинала – Pete Goodliffe