AI is like TV
AI is like TV (or books before that). It started some years ago with asking ChatGPT about code constructs, then suddenly we were here: running agents in several terminals, producing more code than before, the programmer reduced to someone who just presses “accept” / “reject” / “think harder”.
What happened to challenging side projects? (just let an agent do it, but where’s the fun in that!)
Socrates thought writing would weaken our minds (because people would read and retrieve information without understanding it). When television came, people said it would dull our minds. Today it is not hard to predict the same thing about our use of AI.
A programmer functions as an intermediary between business people and hardware, by writing software. A programmer’s job is to “deliver code you have proven to work” (in the words of Simon Willison). Our job is not to write code, but to deliver code. Or to be even clearer: our job is to deliver systems that function well1 (systems that someone is willing to pay for).
To stay useful in the “knowledge sector”, one must produce and learn at the same time. Sometimes these forces are not compatible. You will produce more code if you skip testing, but in the long run your project will stall. Pure vibe coding will get you very far, but as systems tend to grow in complexity, one needs more and more resources to keep developing.
My Norwegian teacher used to say books should be a struggle to read. Books should fight against you. At the time I couldn’t possibly see what the point of willfully fighting a book was, but there is value in opposition. Hard books often end up being the most rewarding books.
How do programmers learn? By experiencing the hard way that this choice was a bad choice, that tests are helpful, that breaking schemas is bad, that nullability is a pain, that any type of migration should be done in several steps, that logging should be done before something happens (rather than after), that more code is bad2.
When programming with AI, code flows on the screen, maybe you read it, maybe you skim it, but you did not write it. Programming suddenly feels more like scrolling Instagram than a craft.
Claude wrote plenty of tests, let me skim through them…
As AI writes more of the codebase, cognitive debt takes over from technical debt. As long as we still care about the codebase, one must spend more effort, not less, keeping the codebase tidy in order to understand it (especially important is readable tests), unless one has gone full “gas town.”
My hope is that AI will lead us to a situation where we as programmers will spend more time thinking about the problem domain3 and less time typing code. We must not fall into the temptation of writing even more code. The AI (Claude, Github Copilot CLI, Gemini CLI, etc etc) is our very helpful partner, and it should help us review, create, and simplify. AI’s are very good discussion partners, but unless chastised, they are still overly verbose.
This demands some discipline. The same kind of discipline one has when one reads the whole newspaper article and not only the first paragraph. Or closer to home: the same kind of discipline one has when one writes the test before the implementation.
I’ll end my little stream of thought by a quote by Kelly Clarkson4:
What doesn’t kill you makes you stronger.
-
For some definition of well. ↩
-
In my experience, some things aren’t really taught. Some knowledge is earnt over time. ↩
-
Meaning talking to domain experts, stakeholders, but also turning off the screen and trying out hammock-driven development. ↩
-
I’m trying to be funny, it’s Friedrich Nietzsche. ↩