







I believe having good abstractions is key to writing good code. But as a coder, I often write code in an effort to find those abstractions…
We have Traits at Home | Mesoloop
I have had more time recently to write code in Zig[1], and it has been good for my soul. I wanted to share some insights I have arrived at regarding abstractions in Zig, including some techniques that I have found useful but not seen employed more broadly.
Learning To Write Software… Is Hard - Zicklag's Leaflets
But it's also good — Musings about the last year of Roomy development, and more.
Live Coding with Quint
Systems programming the model
This paper examines the status of the language model object in generative AI, arguing that what we call a ‘model’ is inseparable from the systems deploying it. I first theorize how these objects emerge from systems-level interactions between trained artifacts, prompting mechanisms, and sampling methods, drawing on the philosophy of digital objects as well as software studies to show how models gain their objective character. Such interactions converge on programming, not prompting, language models, and I illustrate how critical code studies can therefore track these dynamics. In an overview of language model programming approaches, I discuss how prompt and program converge, demonstrating how this confluence tends toward the production of new feedback loops wherein models become models of and for themselves. Understanding these feedback loops is essential in view of recent efforts to infrastructuralize AI, in which multiple models cascade into compound systems that abstract toward a unified model of models. Thus the need, I argue, for a systems-level view that can address this new order of abstraction and complexity by identifying where and how the model emerges from the system.

The peril of laziness lost | The Observation Deck
In his classic Programming Perl — affectionately known to a generation of technologists as "the Camel Book" — Larry Wall famously wrote of the three virtues of a programmer as laziness, impatience, and hubris: If we’re going to talk about good software design, we have to talk about Laziness, Impatience, and Hubris, the basis of good software design. We’ve all fallen into the trap of using cut-and-paste when we should have defined a higher-level abstraction, if only just a loop or subroutine. To be sure, some folks have gone to the opposite extreme of defining ever-growing mounds of higher level abstractions when they should have used cut-and-paste. Generally, though, most of us need to think about using more abstraction rather than less.
A Philosophy of Software Design
This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then d...

where good ideas come from (for coding agents)
(and the part where users have to level up)

Agentic Engineering Patterns - Simon Willison's Weblog
Patterns for getting the best results out of coding agents like Claude Code and OpenAI Codex. See my introduction for more on this project.
Practical Foundations for Programming Languages

Modern software quality, or why I think using language models fo…
How to make better software with systems-thinking
GATlab: Modeling and Programming with Generalized Algebraic Theories
Categories and categorical structures are increasingly recognized as useful abstractions for modeling in science and engineering. To uniformly implement category-theoretic mathematical models in software, we introduce GATlab, a domain-specific language for algebraic specification embedded in a technical programming language. GATlab is based on generalized algebraic theories (GATs), a logical system extending algebraic theories with dependent types so as to encompass category theory. Using GATlab, the programmer can specify generalized algebraic theories and their models, including both free models, based on symbolic expressions, and computational models, defined by arbitrary code in the host language. Moreover, the programmer can define maps between theories and use them to declaratively migrate models of one theory to models of another. In short, GATlab aims to provide a unified environment for both computer algebra and software interface design with generalized algebraic theories. In this paper, we describe the design, implementation, and applications of GATlab.

Building software on top of Large Language Models
I presented a three hour workshop at PyCon US yesterday titled Building software on top of Large Language Models. The goal of the workshop was to give participants everything they …

Crafting a good (reasoning) model
A recent talk I gave on model training, reasoning, and the next frontier.

quint-co/quint
An executable specification language with delightful tooling based on the temporal logic of actions (TLA)
Agent Design Is Still Hard
My Agent abstractions keep breaking somewhere I don’t expect.
