8 parts · 8 chapters

Programming Languages and Paradigms

The ideas that every language is a different arrangement of. Once you can name them (static or dynamic, nominal or structural, garbage-collected or owned, eager or lazy, threads or actors), a new language stops being a new world and becomes a set of choices you already understand.

Eight parts: values and types; type systems (static and dynamic, strong and weak, nominal and structural, inference, generics and variance); memory models (manual, garbage collection, reference counting, ownership); functional programming; object-oriented programming honestly; concurrency models; evaluation strategies; and a method for learning any language fast. Examples run across TypeScript, Go, Rust, Python, Java, Elixir and Haskell.

values and types · type systems · memory models · functional programming · OOP honestly · concurrency models · evaluation strategies · learning any language fastmid → senior · engineers who use several languages
typesWhat a type system promises and what it costs.
memoryWho frees memory, and when.
functionalPure functions, immutability, higher-order functions, algebraic types.
objectsEncapsulation and polymorphism without inheritance worship.
concurrencyThreads, async, CSP, actors, and the languages that chose each.
learningA repeatable two-week plan for any new language.
Ties the language courses togetherDraws on the Go, Python, Rust, Java and Rails courses and prepares for Compilers and Interpreters.