Programming Languages
Semantics, type systems and the lambda calculus.
Syntax, Semantics & the Lambda Calculus
Lambda calculus is the 50-line mathematical model that secretly IS every functional programming language — master it and you understand the foundations of Haskell, ML, Scheme, and the type-theoretic universe.
Operational & Denotational Semantics
Formal semantics gives programs unambiguous mathematical meaning — making compilers, verifiers, and type systems provably correct.
Type Systems & Type Checking
Type systems are the mathematical discipline of classifying program expressions so that a compiler can prove, before running a single line, that certain classes of runtime errors simply cannot happen.
Polymorphism & Type Inference
Polymorphism and type inference reveal how a language can be simultaneously flexible and safe — writing one function that works for all types while a compiler proves it correct without a single annotation.
Advanced Type Features
From simple tags to proofs-as-programs: master the type-level abstractions that make compilers your ally instead of your enemy.
Memory Management & Garbage Collection
From malloc/free to generational GC to Rust's borrow checker — every strategy for who controls memory, how it works under the hood, and what guarantees it buys you.
Concurrency Models
Master the five major models for managing concurrent computation — shared memory, CSP, actors, STM, and async/await — understanding not just their mechanics but the deep tradeoffs that determine which model belongs in which system.
Paradigms & Metaprogramming
From Turing machines to Lisp macros: how the way you think about computation shapes the programs you can write — and the languages you can build.