For me Dan Grossman's course on Programming Languages takes the cake. Best course I've ever done. Taught SML, Racket and Ruby enough to touch on so many concepts (FP, recursion, algebraic datatypes, polymorphism,... the list goes on). For the assignments a small programming langauge was implemented in almost all of these, showing different ways of solving the expression problem. It was amazing.