Никто не любит плохо написанные программные продукты. Огромное количество сильно связанного, ригидного кода из которого состоит большинство проектов. Особенно плачевная ситуация там, где мало внимания уделяется тестированию в пользу внедрения новых фич в результате чего накапливается технический долг. Часто в таких условиях тяжело себя мотивировать на изменение ситуации. Мне помогает подход пропагандируемый Бобом Мартином, который выражается в правиле бойскаута:
Оставь место стоянки чище, чем оно было до твоего прихода.
У многих программистов есть мнение, что рефакторинг это что-то объемное, на что нужно регулярно выделять отдельный большой кусок времени (которого нет, так как с новой неделей уже нужно внедрять новые фичи). В итоге долг растет (как и количество ошибок), ничего не предпринимается и все демотивированы. Хотя, именно регулярные маленькие изменения часто вносят решающий вклад. Что-то вроде ныне модного кайдзен. При выполнении задачи всегда можно сделать чуть больше и добавить коду гибкости.
При этом важно ничего не сломать. Помогает простой алгоритм:
- Удостовериться, что функционал работает (написать автотесты);
- Произвести мелкие улучшения;
- Проверить, что ничего не сломалось.
В идеальном мире перед тем как применять алгоритм выше, следует предпринять меры к тому чтобы бардак не накапливался. Однако никто не мешает начать с малого и сделать код проще без вероятности его сломать. Скорее всего можно:
- Переименовать методы и классы в более семантичные;
- Уменьшить связность в коде;
- Написать комментарии там где их нет, чтобы другим программистам в будущем было проще;
- Побить классы на более мелкие по принципу единственной ответственности;
- Вынести повторяющийся код в отдельные методы;
- Просто описать какой-то модуль или код в документации;
- Удалить неиспользуемый код.
Тем кто хочет встать на нелегкий путь борьбы с бардаком полезно полистать такие книги как “Чистый код” Боба Мартина, “Совершенный код” Стива Макконнелла. Если читать много лень, то есть куча ресурсов с описанием таких популярных концепций как DRY, SOLID, GRASP, KISS, YAGNI. Этого вполне хватит на первых порах.