Introspection is the programmatic "navel gazing" which allows programs to dynamically reason about the types and properties of libraries and functions. Java and Python have introspection features and functional languages such as Scheme and LISP often get it for free as a side effect of using the same structures for program and data.

Introspection is very useful for dynamically adapting a program by adding new libraries and functionality.