Almost four decades ago, Parnas advocated modularity for the sake of changeability, independent development, and comprehensibility. The recipe for modularization is to define a clean interface, hide an implementation detail, keep low coupling and high cohesion. Although modules have taken many forms over the years from functions and procedures to classes, no form has been capable of expressing so-called crosscutting concerns in a modular way. Over a decade ago, aspect-oriented programming (AOP) was proposed to modularize the un-modularizable . Since then, aspect-oriented (AO) languages have been providing new abstraction and composition mechanisms to deal with concerns that could not be modularized because of the limited abstractions of object-oriented programming. Nowadays, the AO paradigm pervades all areas of software engineering. With its growing popularity, practitioners are beginning to wonder whether they should start looking into it. However, every new paradigm makes claims that managers want to hear. In this dissertation we find out how much of what has been written about AOP is true and how much is hype.