Already much of my job is writing documents for Claude explaining precisely what I want it to build. Mostly I do this with words, sometimes adorned with XML to give Claude extra clues about what’s important.
This works, but it’s hard. Human language is imprecise by nature, and removing that imprecision takes a lot of work. At the end, you have a prose description of what you want, but when you need to debug production issues, you didn’t write the code, so you don’t have the Fingerspitzengefühl that comes with having written it. As more and more of our systems are built by AI, the gap between how we envision the system operating and how it actually operates grows.
What if there were a better way to specify what you want? Not prose, not code, but something in between: a language designed for precision that also works at the level of ideas rather than implementation details. That’s roughly what abstract math offers. Category theory, type theory, and their relatives give you tools to describe structure—how things compose, what transformations preserve, what properties hold—without getting lost in the details of any particular implementation.
I don’t know if this will actually work, but I want to find out. Over the coming posts in this series, I’ll work through category theory from the ground up—starting with what a category is, what a functor is—and building toward the bigger ideas like adjunctions and monads, trying to connect each one back to something practical. The goal isn’t to turn software engineers into mathematicians. It’s to see whether learning to think in these structures makes us better at telling machines what to build while maintaining a real understanding of how the parts fit together.
Expect a new post in the series every Monday.