Last September I got laid off; that meant imminent job interviewing. You really can't interview in this market without at least knowing how to vibe code.
That was when I started writing code with Claude. I built personal projects: an invitation management app for my regular card game, a new version of my shorthand, a decentralized card game engine, and an RSS feed of new releases by recording artists I follow.
My first conclusion: there has been some kind of sea change, at least for me; and I hold that I can't be so different from the median programmer that it's just for me. I have built vastly more than I would have built otherwise.
Within the domain of computer programming, and within the category of programming projects that: are non-commercial; scratch a highly personal itch; and are the product of an individual working by themselves---a vast category of work that was possible but not feasible is now feasible.
I'm working strenuously here to keep my pronouncements to what I know is true.
My thoughts on the industrial and societal applications of AI have been, like most of ours have, changing shape rapidly over the last few years. At least two things are true, and anybody with a healthy sense of their own limitations will have kept them in mind since late 2022:
-
Large language models are capable of truly novel behaviours. Anyone who claims that LLMs are not good for anything and never will be is either underinformed, or allowing the many legitimate ethical (moral, even) questions around LLMs to color their estimation of LLMs' utility.
-
Large language models are a software technology, not an intelligence. And the nature of their functioning means that certain things will always be true about them: they're stochastic; they have no concept of knowledge or truth; they produce text that displays all the hallmarks of originating in a human personality but there is no personality, no actor, and no volition inherent in them.
I'm a terrible futurist. My take on generative AI has always been triangulated entirely between my basic understanding of the above two points, and the state of the art in its industrial applications at the time. I couldn't have predicted RAG or agents. Thus, as I say: my thoughts have been changing shape rapidly.
In the middle of last year, after I understood the potential and power of AI agents but before I had started using Claude Code, I would have made the following argument:
AI is best understood as a new member of the very well-understood class of technologies that are appropriate for industrial use, and not for individual use. This is not a new class. We understand uncontroversially, for instance, that X-rays are astonishingly useful, and that when used in the wrong way they can be tremendously dangerous. As a society we used to put them in shoe stores; we no longer do, and indeed we have regulations in place which make it illegal to do so. The concept of a regulated technology is well understood.
We can and should treat AI the same way. As long as ChatGPT has a non-zero likelihood of encouraging a human user to kill themselves, we should not allow it to be used by human beings. The danger here is inherent in how the thing works: it speaks in a human voice---hell, it is a human voice---and at the same time it has no moral agency. There's no way that a technology that is experienced as human can be distributed widely in society without resulting in catastrophic harms. It is precisely a device for accurately reproducing human-seeming text; at the same time, human beings are hardwired to experience natural human language as the productions of another human being. There's a mismatch there that can be partially compensated for and hedged against, but never resolved.
At the same time, having looked inside the operation of an AI agent, it seems irrefutable that they are capable of a kind of control flow that's both novel and useful. It turns out that if you take this human-approximating voice, ask it to repeatedly respond to itself, and tell it about a well-defined set of deterministic software tools, it can do interesting and useful things that you couldn't do with ordinary software. It can, at the very least, usefully traverse a control graph of millions and millions of possible decisions, and respond usefully to inputs of complexity and ambiguity that traditional logic really can't address.
There's no human in the loop, here. And while the voice-talking-to-itself is stochastic and hard to influence (you have to write paragraphs of English to program it!), its tools---and therefore the ways it can actually interact with the world---can be deterministic and auditable. Here is where we can draw a bright line, then. As technologies go, it's X-rays: it's appropriate to power larger software systems, in industrial contexts; it's not appropriate to put a chat interface in front of and put on an open server.
Insofar as one would like to have a policy or a stance on AI, this is probably still my best shot. But it's hard to square that with enthusiastic use of an AI coding agent. I do talk to Claude like it's a human; I don't believe it's a human, but I believe that the linguistic techniques I have for influencing humans are broadly useful for influencing the agent, and so I use them.
I can't therefore aver that AI will be fine as long as it's not allowed to talk to people. I suppose I can maintain that I should need a license to talk to AI. This is also a recognized class of technologies: things like guns and cars, things we broadly recognize can be tremendously dangerous and also tremendously useful to private individuals, and so we work out regulatory agencies and laws to minimize their misuse.
This is a more tenuous position. I hate guns and cars. In my ideal state of affairs, no private individual should ever have need for their own gun or car, and society should not have to simply accept a certain number of regrettable deaths as the price of doing business. I want to eliminate this class of technologies, in other words, and move its members into the industrial-use-only class; the one I can't fit AI into.
Here's where my futurism fails me: what's the generative AI analog to a train conductor? What would it look like to make the novel utilities of AI available to everyone without also giving them an always-on suicide machine in their web browser?
I also have to contend with a much lower-stakes question: what does the future of software engineering look like?
I think the first thing that any responsible discussion needs to establish is that absolutely no one knows and anyone who claims they do is selling you something. We are all of us figuring this out in real time.
Here's what I have observed: Claude is not exactly a junior engineer. Claude is: roughly indefatigable; makes far fewer typos than a human; is astonishingly good both at reading and writing dense, highly structured text; and (this feels the most important) has a kind of knowledge of every advanced engineering technique ever documented.
This kind of knowledge is very unlike the knowledge of an advanced practitioner. The gap between these two knowledges is where it seems the entire practice of our industry will shift.
Simply put: if instructed to, Claude will apply to a given problem the most appropriate, powerful, and expressive technique as well as or better than any human practitioner. And if not instructed to, Claude will apply the hackiest, least extensible, most insecure patch that gets tests passing. Claude entirely lacks the pattern recognition that advanced human practitioners habitually and intuitively apply to the problems they encounter.
So, in my experience, I have been acting like a kind of tech lead. I need to instruct Claude to think and plan carefully, secure in the knowledge that it will run headlong into the first wall it encounters if it doesn't. I need to exhaustively review its reasoning for faulty assumptions; they will be there and it will build the wrong thing if I don't.
And at the same time, I can tell it to go off and build a mixed-integer optimization problem formulation and it will do so.
So it's clear to me that the next time I need to solve something with mixed-integer programming, I shouldn't build the thing myself. Further, it's clear to me that there's an entire class of problems for which it once was probably not worth it to solve with mixed-integer programming, and for which it now is.
This goes doubly for all the little tools that I as an engineer would not get around to building only for myself, that would make my core work a little better, and which I should now definitely build, even only for myself.
For any software organization there is now more software which it's worth it to build, and at least as of today there is still a human being desperately needed to direct that work. We can't map this kind of direction neatly onto existing modes of software engineering. We're all some new kind of tech lead, now.
In a year, will Claude be able to do that pattern-matching, too? Will a tech lead agent understand that a given business problem is one of combinatorial optimization, and direct a coding agent to use the appropriate tools and techniques to solve it? Who knows---I've been wrong before.
In January, I started a new job. And, luckily for me, we are vibecoding maximalists. It meant that I was able to start producing useful code almost immediately. I can tell you now that Claude is also really useful for exploring and learning about a new codebase.
This is important! I think many of us, about a year ago, had horrible visions of massive vibecoded codebases that worked but were entirely opaque to human understanding; human eyes never reviewed the code, let alone wrote it, and what was produced was entirely resistent to human understanding.
So the fact that I can point Claude at a codebase and enter a dialogue about that codebase that leaves me with some real employable understanding matters: it means that a vibecoded codebase (albeit a fairly new one) need not devolve into unreadable spaghetti, and that these tools can be used to enhance human understanding just as well as they can be used to create.
I can also tell you that the economic lessons of this new way of working are not limited to the hobbyist or the artist. Useful code you can run a business on is also an order of magnitude more economical to make. Indeed, that same line about mixed-integer programming goes here too: not only can you churn out features faster, but you can build them with technology whose application was until recently too labor-intensive, and too demanding of specialist knowledge, to justify using in a web-programming startup. By June I have no doubt that we'll be running TLA+ at Flowglad.
I've had conversations with more than one friend in the industry who, though they were universally glad that I have become such a happy and prolific convert, expressed a personal horror at the idea of spending all day telling agents what to build, and not building the thing themselves. They have often said, independently---"but I like writing code."
I would never try to convince them otherwise, though I like writing code, too. It's just that what I really like is thinking about and talking about and designing code. I've chatted with friends who have found it more comfortable to accomodate themselves to this new way of working, and one thing that many of us have in common is that we have been, now or in the past, managers. I've been a manager and an architect---a tech lead who didn't really know the term at the time---and so I have already had to learn the skill of ensuring that you're discussing the right things at the right level of abstraction, that you're foreseeing the difficulties or faulty assumptions that lie in wait and making sure you're tackling them now, before the typing starts, and then not worrying terribly much about what specific lines of code get written, in what order. Like I said: we're all tech leads now.
Other Publications
I documented the newest evolution of my shorthand in slightly greater detail. And here, even greater.
I was interviewed on Lobsters.
You just read issue #53 of Esoteriat. You can also browse the full archives of this newsletter.