The Law of Leaky Abstractions

Here’s the magic part: TCP is built on top of IP. In other words, TCP is obliged to somehow send data reliably using only an unreliable tool.

Every time I relearn this I stand amazed in the presence of TCP/IP.

What is a string library? It’s a way to pretend that computers can manipulate strings just as easily as they can manipulate numbers. What is a file system? It’s a way to pretend that a hard drive isn’t really a bunch of spinning magnetic platters that can store bits at certain locations, but rather a hierarchical system of folders-within-folders containing individual files that in turn consist of one or more strings of bytes.

What is a language? It’s a way to pretend we can understand the same concepts in a world of imprecision and subjective experience.

One reason the law of leaky abstractions is problematic is that it means that abstractions do not really simplify our lives as much as they were meant to.

Conceptual compression allows ideas to travel faster and further. Ideas need play with each other to be remixed into something new. Decompressing an idea into its component parts creates opportunities for new compounds. Everything in its time.

Code generation tools which pretend to abstract out something, like all abstractions, leak, and the only way to deal with the leaks competently is to learn about how the abstractions work and what they are abstracting.

This was written in 2002! Long before LLMs were going to take our jobs.

It was true then and it’s true now: writing code is not the hard part of the work. Reading and comprehending and safely transforming the code to achieve refined and emerging desired outcomes is the hard part.

So the abstractions save us time working, but they don’t save us time learning.

This is why curious programmers are the best programmers. They have an insatiable hunger for learning how things work.