Teaching Programming Languages by Experimental and Adversarial Thinking: https://cs.brown.edu/~sk/Publications/Papers/Published/pkf-teach-pl-exp-adv-think/ A fascinating approach to teaching programming paradigms. Implement different language semantics in the same syntax, and ask students to write programs that distinguish between them!