It didn’t take long for me to slip. “I built…” Pause. “Claude built…” I don’t remember exactly when it first happened, but it’s happened many times since. I’m not ashamed to admit when I’ve been helped by AI, but I find myself tripping over my words when I describe my work with it. Just now, I wrote and then deleted “our work.”
I am deeply suspicious of anthropomorphizing LLMs too much. I do not dwell on questions like “is ChatGPT conscious?” Still, I can’t bring myself to treat them like tools the way I do my text editor (NeoVim, btw). I say “please” and “thank you” when talking to them. I also feel suspicious of claiming too much credit for the code they write. Though they do not write code without human instruction, however abstracted that instruction is from fleshy fingers touching a keyboard or a fleshy brain choosing every character, it seems wrong to say that I built something when they produced the code. Like I’m changing the meaning of the word “build” to puff myself up.
In my last post, I wrote:
After smoke helped me build itself, I have some new respect for LLMs’ abilities.
Set aside whether my harness or the model deserves credit. It took me a while to decide on “helped me build itself.” I have never once pondered, after hours clacking away on my keyboard, whether it was NeoVim or the Go compiler that really produced the artifact that represents my project in the purest form. I don’t credit syscalls as collaborators.
“This is silly and pedantic,” you say. “Obviously, LLMs are [or are not] different.” Obvious to you, maybe. I’m still uncomfortable taking a strong stance.
It is popular these days to liken LLMs to compilers. I disagree with this view. One cannot statically analyze a Markdown spec. And while you might argue that different models’ translations of that spec are like different compilers’ translations of source code to machine code, there’s at least one fundamental difference. When you make another spec for another feature, the source code from the last spec matters much more than the machine code from your last compile. “Taste” (whatever that word means) in source code still matters when maintaining and modifying a project. Crummy source code will make future edits harder, wherever they come from. It matters that the LLMs have bad taste. And in my view, this means that they contribute to my codebases in a meaningfully different way than my text editor does.
So I try not to take credit. Not to avoid taking responsibility, but because it just seems inaccurate. I feel certain that this will change with time, though. Even if we translate it “Caesar built a bridge” rather than “Caesar caused a bridge to be built,” the meaning is clear. Eventually, the idea of hammering keys will seem as absurd as Caesar wielding a hammer to bridge the Rhine. And we will “build” with Markdown, or whatever else the LLMs prefer.