This document provides an overview of reflection in programming languages and systems. It discusses structural reflection, which models program structures like classes and methods as objects, and behavioral reflection, which allows intercepting and modifying program execution. It presents sub-method structural reflection, which provides an abstract syntax tree representation of methods that supports annotations and extensibility. Finally, it discusses partial behavioral reflection frameworks that allow selectively intercepting and modifying execution at a fine-grained level using meta-objects and hooksets.