Чтобы улучшить код, удалите его
(В оригинале - Improve Code by Removing It)
Лучше меньше, да лучше. И как бы избито это не звучало, иногда это действительно так.
Одно из улучшений, которое я сделал с нашим кодом в течении последних недель, было удаление значительных его кусков.
Мы писали софт, следуя принципам ХР, в том числе и YAGNI (You Aren't Going to Need It — «Вам это не понадобится»). Однако люди есть люди, и в нескольких местах мы потерпели неудачу.
Я заметил, что отдельные задачи выполняются слишком долго. Простые задачи, которые должны были бы выполняться практически мгновенно. Это происходило из-за того, что они были избыточно реализованы, с кучей свистулек и колокольчиков, потребности в которых не было, однако они были добавлены, потому что тогда добавить их казалось хорошей идеей.
Так что я упростил код, повысил производительность и снизил уровень энтропии всего кода, удалив проблемные куски. К счастью, юнит-тесты подтвердили, что при удалении ничего другого не сломалось.
Простой и безусловно полезный опыт.
Итак, почему же ненужный код оказывается в репозитории? Почему программист чувствует необходимость писать лишний код, и почему этот код проходит через фазу ревью? Практически всегда причины следующие:
- Это было прикольно, и программист хотел это сделать. (Подсказка: Пишите код, потому что он добавляет ценность, а не потому что он вас развлекает).
- Кто-то решил, что это понадобится в будущем и поэтому лучше всего закодировать это прямо сейчас. (Подсказка: Это не соответствует принципу YAGNI. Если вам эта функциональность не нужна прямо сейчас, то и не надо ее прямо сейчас реализовывать).
- Это не казалось чем-то большим и сложным, поэтому было проще это реализовать, чем идти к заказчику выяснять, надо ли им это или нет. (Подсказка: Написать и потом сопровождать написанное в любом случае сложнее. И с заказчиком всегда можно договориться. Маленький кусочек кода имеет тенденцию превращаться в снежный ком, требующий серьезного сопровождения).
- Программист «придумал» дополнительные требования, которые не были ни задокументированы, ни обсуждены, что оправдало новую функциональность. Ведь требования – это все. (Подсказка: Программисты не должны составлять требования, это задача заказчика)
Да, над чем вы сейчас работаете? Вы уверены, что это точно необходимо?
Автор оригинала - Pete Goodliffe