Epistemic Status: Blooming
Disclaimer
Since I now work for an AI research group, I should make clear that everything I write about AI are my own thoughts and do not reflect the opinions or positions of those I work with or my employer.
I’ve been thinking a lot about how LLMs are changing the software engineering world. In the span of a few months, vibe coding has become a common practice in many parts of my profession. I’ve tried using tools like CoPilot and Cursor, but I always come away from the experience feeling like it takes more away than it adds. I wanted to try to take a moment and explain — to myself, if no one else — why I feel this way.
LLMs for prototyping
I occasionally use LLMs like ChatGPT for prototyping ideas. I’ve written before about how I’ve used them to speed up developing ideas. I often have an idea of what I want to do but don’t remember the details, e.g. what language features I need, but it would be faster to ask an LLM to throw something together than to look up the documentation and remind myself how to do it. But one of the key differences is that it’s not in my editor. If it comes up with something I want to use, I then have two choices:
- Copy-paste the code it has generated for me into my editor
- Manually type out the code it has generated into my editor
I find I prefer the latter approach for a few reasons. First, by manually typing out the code, I end up learning and retaining the information better than if I just read it and copy-paste the code. Second, usually during the manual copy process, I end up finding mistakes or coming up with better ways to write the code. That sometimes leads to further feedback cycles with the model and starts the process over.
“We want the work!”
All of this reminds me of something I read recently in a completely different context that I think applies to this one. I’ve been doing hand-tool woodworking as a hobby for a few years now. I haven’t made many pieces of furniture, but I have a few that I’m proud of.
One of the places I learned what I know is from videos of Paul Sellers. He advocates for using hand-tools for a variety of reasons, and he’s frequently getting people who are only familiar with working with machines and power tools that think he’s missing something. In a recent blog post, he wrote (paragraph breaks added for clarity):
This week, in conversation with a close work friend, something came up about crosscutting lengths of wood with a handsaw in a place where other woodworkers, not me, were working. I think that they were machinists, and came at things from a different angle with a different perspective. That’s a common and most usual thing.
My friend was sawing away as per normal when someone popped their head around the door and said, “Here, let me do that for you. I’ve got a chop saw out here.” The answer went back to the offer. “No. It’s fine. I don’t need any help, thank you.” The intrusion went on, but my friend remained firm. The training of a near decade held firm, and the ‘misunderstood’ others just ‘DIDN’T QUITE GET IT!‘ How can it be that anyone can prefer the high-demand woodworking of hand sawing, hand planing wood and such with hand tools when, ‘There are great machines out there to do it all for you?’ And there’s the workman willing to take over the event altogether to deliver pristine crosscut ends? Surely, it’s what’s now called a “No-brainer.” And then there is the, “Let me pass that through the planer for you.” and on it goes.
The truth is, they cannot think like we do. They can never understand what we understand and truly think that they have the ultimate solution to what they perceive to be our real problem of physical work, when in reality we don’t have any kind of problem.
Imagine going to the gym and saying to someone on the elliptical/cross trainer, ‘Hang on, let’s take some of the pressure down here! Let me do that for you. Or, better still, I’ve got some hydraulics here that will take the strain and then some counter-pulleys as well. Have those weights lifted in a jiffy, no probs!’ Well, we say politely, WE WANT THE WORK! along with all the physical workouts it takes to achieve!
I think his analogy to someone trying to make a gym workout easier highlights the absurdity. When we hand off our thinking to machines, when we stop doing the work ourselves, we stop learning, we stop growing.
There are degrees to which a tool can help us. In woodworking I use a band saw to rough dimension lumber before finishing them up with hand-tools.
I’m not against using tools that understand my code base and can help me with things like import statements and code completions. I have a JetBrains Toolbox subscription1. I use their tools all the time, but I don’t like their AI offerings. They get in the way more than they help.
I would even go so far as to say that even if you’ve reviewed the code, and tested it, and understood it all2, you still don’t know it nearly as well as if you wrote it yourself. I’ve reviewed thousands of lines of other people’s code during code review, but that doesn’t mean I know it. Review so often misses the finer details that you catch when writing the code yourself3.
I worry that vibe coding is going to make a whole generation of engineers dependent on the machines, unable to think for themselves. Their curiosity killed by the work environment that demands ever more productivity and faster results. It also makes them dependent on the creators, the owners, of the machines.
Once men turned their thinking over to machines in the hope that this would set them free. But that only permitted other men with machines to enslave them.
~ Frank Herbert, Dune
Footnotes
-
I wish LSP servers were better at some of these things, but they still consistently miss features that I get out of the box from a JetBrains IDE. I hope they improve enough to cover the use cases, but until then I’m willing to pay for a tool that makes my work easier, at least for the languages they support.
-
From Simon Willison, “If an LLM wrote every line of your code, but you’ve reviewed, tested, and understood it all, that’s not vibe coding in my book—that’s using an LLM as a typing assistant.” source
-
On the other hand, I’ve so often discovered errors in my own code at the moment of opening the PR, something about the different context seems to activate different thought patterns, and I see the code in a new light.