The document introduces aspect-oriented programming (AOP), which aims to increase modularity by allowing separation of cross-cutting concerns. It is not a programming language, solution to all problems, or replacement for object-oriented programming, but rather a programming pattern and tool. Aspects in AOP can exist encapsulated and be attached to code constructs. Cross-cutting concerns are aspects of a program that affect other concerns and are difficult to separate cleanly. AOP uses interception or IL weaving to inject execution of concerns. The document discusses AOP styles, constructs, tools, arguments against it, and considerations for new and existing projects.