Где взять время на рефакторинг

Где взять время на рефакторинг

17.12.14

Один из самых животрепещущих вопросов начинающих идеалистов - где взять время на рефакторинг?

Он возникает и у разработчиков, и у тестировщиков. И у тех, и у других очень быстро возникает куча грязного кода и куча запутанных, медленных, нечитаемых тестов. Жить с ними всё сложнее. Разработка/тестирование всё замедляется, мотивация всё падает. Иногда удаётся что-то подчистить в нерабочее время, но… это же не по-человечески?

  • Где справедливость?
  • Это что, мне одному надо?
  • Почему начальство не даёт времени на рефакторинг?

Я знаю. Я тоже через это прошёл.

А нигде!

А теперь взглянем правде в глаза. Если кто-то придёт ко мне и попросит неделю на рефакторинг, я ему откажу.

И вот почему. Потому, что рефакторить можно бесконечно, а кто-то должен и работу делать.

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

Так что же, я разуверился в своих идеалах?

Вовсе нет.

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

Не надо ни у кого просить выделить время на рефакторинг. Рефакторинг не является каким-то отдельным от кодирования/тестирования процессом, на который надо отдельно выделять время. Рефакторинг - часть кодирования. Такая же естественная и необходимая часть, как набор, компиляция, запуск.

Вот мой рецепт:

Маленькими шагами!

Вспомните TDD. Ваш рабочий процесс должен выглядеть буквально так:

  • Написал тест (красный) - 1 час
  • Написал код (чтобы тест позеленел) - 1 час
  • Зарефакторил код (чтобы код стал проще и читаемее) - 1 час
  • Налил чаю, вернулся к шагу 1.

Это постоянный процесс. Маленькие шаги. Постоянный прогресс. Горячий чай.

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

А как начальство на это посмотрит?

Никто вас не обвинит в том, что вы тратите лишнее время, если вы будете постоянно показывать прогресс. Если с каждым днём вы будете делать новые фичи. В случае тестировщиков - новые тесты.

Никого и никогда ещё не уволили за то, что он делал очередную фичу 6 часов, а не 5.

Вдумайтесь, на самом деле начальство ведь не знает, сколько её надо делать. Стало быть, никто никогда не сможет вам доказательно предъявить, что вы зря потратили время на написание тестов или рефакторинг. Да, вы не можете доказать, что рефакторинг ускоряет процесс разработки. Но и начальство не может доказать обратное. Стало быть - делайте так, как считаете нужным.

Только не поймите меня неправильно, я вовсе не призываю саботировать сроки и делать работу дольше, чем нужно. Наоборот, этот простой рецепт позволит делать работу быстрее:

Маленькие шаги: Тест. Код. Рефакторинг.

И что, даже разрешения не надо спрашивать?

Если кто-то придёт ко мне и попросит неделю на рефакторинг, я ему откажу - по той простой причине, что он не знает мантру TDD. Он почти наверняка профигакторит эту неделю, но лучше ничего не станет.

Хороший врач не спрашивает ни у кого разрешения на то, чтобы мыть руки перед операцией. Хороший музыкант не стесняется тратить время перед (и даже во время) концерта, чтобы настроить инструмент. Почему-то все понимают, что без этого они не вылечат и не сыграют. Так чем вы хуже, дорогие мои профессиональные разработчики и тестировщики?

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

Маленькие шаги. Постоянный прогресс. Чай с имбирём.

И печенькой.


17.12.14