**Advanced Programming** - Programming language paradigms (particularly functional and declarative languages) - Metalinguistic Abstraction - Interpreters,