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

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

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

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

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

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

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

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

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

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

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

Автор оригинала - [Pete Goodliffe](http://programmer.97things.oreilly.com/wiki/index.php/Pete_Goodliffe)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/ru/thing_94.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
