Что такое рефакторинг кода?

Частенько слышу в контексте программирования когда говорят что код нужно отрефакторить, провести рефакторинг и тд. Что означает этот рефакторинг? Это значит просто переписать код сначала, добавить функционал, оптимизировать, или что?

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

Рефакторинг - это не дополнение функционала в программе. Это - редактирование кода с целью его уменьшения, локализации, понятности, уместности и правильной структуры. Как правило, именно для удобства последующего рефакторинга и говорят писать код правильно и по структуре изначально, а не "на месте разберёмся". По этому при устройстве на работу, собственно, и требуют "умение правильно писать код и разбираться в нём".

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