This document discusses refactoring and common programming diseases. It begins with an introduction to refactoring, defining it as improving the design of existing code without changing its external behavior. It then discusses reasons for refactoring like improving code understandability and design. It also discusses when refactoring should occur, such as when adding new features or fixing bugs. The document then covers common programming diseases called "code smells" including bloated code, object-oriented abuses, redundancies, and couplings. It provides examples and treatments for each smell type.