
Latest issue
Pattern Matching Isn't Syntax Sugar — It's a Different Theory of Control Flow
7/29/2026
Lesson 21: What Elixir's approach to branching reveals about how we think about data --- Most programmers learn control flow as a sequence of questions: Is this value equal to X? Is it greater than Y? Does this condition hold? The code interrogates data from the outside. Elixir i…
Recent posts
Lesson 20: What Rust's compile-time resource model teaches every programmer, regardless of language --- Most programmers encounter Rust's ownership system and immediately frame it…
Lesson 18: What the BEAM's design philosophy actually promises — and where it stops --- When WhatsApp was acquired by Facebook in 2014, the number that made engineers sit up wasn't…
Lesson 18: What the HAMT debate reveals about the gap between design philosophy and performance reality --- When I wrote about immutability in Clojure last month, I focused on the…
Lesson 17: Why pure functional programming is a design philosophy, not a restriction --- There's a moment in Simon Peyton Jones's recent interview on The Developing Dev where he ex…
Lesson 16: What Rust's ownership model reveals about the hidden cost of "letting the runtime handle it" --- A note before we start: I covered Rust's borrow checker in Lesson 13 fro…
Lesson 15: What Erlang's actor model teaches us about building systems that expect to fail --- A telephone switch that handles 30–40 million calls per week cannot afford a maintena…
Lesson 14: What Clojure's persistent data structures reveal about the nature of change --- There's a moment every developer hits when working with shared mutable state: you're debu…
Lesson 13: What Rust's ownership system reveals about the cost of trusting programmers --- There's a number that keeps appearing in conversations about memory safety, and it's wort…
Lesson 12: What Homoiconicity Teaches Every Programmer --- There's a moment that happens to almost every programmer who first encounters Lisp. They see something like (+ a ( b c))…
Lesson 12: When the Language Is the Architecture --- Most distributed systems frameworks start with a lie: that you can make a network of machines behave like a single machine, if…
Lesson 11: What a 1970s Government Contract Teaches About Modern Language Design --- The United States Department of Defense surveyed its own software in the early 1970s and found…
Lesson 10: What Embedding Philosophy Teaches About Language Design for Hostile Environments There's a design principle hiding inside Lua that most programmers walk right past. They…
Lesson 10: The Vision That Mainstream OOP Left Behind --- Alan Kay has said, more than once, that most of what gets called "object-oriented programming" today isn't what he meant.…
Lesson 9: The Design Decisions That Made APL Simultaneously Brilliant and Impenetrable --- Last week we looked at APL's philosophy — the idea that notation shapes thought, and that…
Lesson 8: When Notation Becomes the Language --- Ken Iverson had a complaint. It's 1962, and most programming languages, in his view, were "decidedly inferior to mathematical notat…
Lesson 7: Declarative Thinking and the Logic Programming Model Here's a question that reframes how you think about code: what if you never told the computer how to find the answer…
Origins: One Programmer's Refusal to Accept Overhead In 1969, Charles Moore was writing software to control radio telescopes at the National Radio Astronomy Observatory. The machin…
Lesson 7 of 12: Concurrency as Architecture Here's a number that should bother you: the Ericsson AXD301 telephone switch, built on Erlang, was reported to achieve nine nines of ava…
Lesson 4 of the Language Archaeology curriculum Here's a design constraint that most programmers never face: your software controls telephone switches. A single switch handles tens…


















