By Martin Fowler, Addison-Wesley, 1999 The reference text on Refactoring. I walked away with a true appreciation for refactoring being the “engineering” aspects of programming. It’s how you reduce complexity into simplicity. You can refactor any piece of code, if you are a good engineer.

[p53] Refactoring (noun): a change made to the internal structure of the software to make it easier to understand and cheaper to modify without changing its observable behavior.

[p54] Refactor (verb): to restructure software by applying a series of refactorings without changing its observable behavior.

[p387]Whereas applying (and possibly backing out) a series of incremental refactorings is fairly natural for Smalltalk and CLOS, the cost per iteration (in terms of recompilation and retesting) is higher in C++ programs; thus programmers tend to be less willing to make these small changes.