The great thing about RefactorMercilessly is you don't even need to learn what the code does, first. ''I like it! And when you're done refactoring, you can have wonderful, informative names and comments like:'' // This code has been Braindead Refactored if(IReallyDontKnowWhatThisChecks()) { AndIHaventAClueWhatThisDoes(); } Both are wrong. Proper (non-braindead) refactoring is one of the best ways to learn a code base. But you need to be prepared to think and learn while refactoring.