Programming paradigms
Evaluation strategy
Software design patterns
Reactive programming
Esterel
Scala
Observer pattern
Combinatory logic
Time