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.
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.
00
Values and Types
The same line, different languages
1 ch · ~8 min01Type Systems
Making illegal states unrepresentable
1 ch · ~8 min02Memory Models: Manual, GC, Reference Counting, Ownership
Who frees, and what it costs
1 ch · ~8 min03Functional Programming
Functional ideas in everyday code
1 ch · ~8 min04OOP Honestly
Interfaces and composition
1 ch · ~8 min05Concurrency Models
Five languages, one fan-out
1 ch · ~8 min06Evaluation Strategies
Eager, lazy and passing
1 ch · ~8 min07How to Learn Any Language Fast
Questions to ask of any language
1 ch · ~8 minTies the language courses togetherDraws on the Go, Python, Rust, Java and Rails courses and prepares for Compilers and Interpreters.