The magician leaves the apprentice with a chore: “sweep up the workshop.” The apprentice, now alone, starts the task, but soon gets bored. They use a spell they’d heard the magician cast that causes the broom to start cleaning on its own. But the broom soon gets out of control, spilling water everywhere, and the apprentice doesn’t know that incantation to stop it. Everything else the apprentice does makes things worse. Eventually, the magician returns and order is restored.
Goethe’s poem was written in 1797. The story is acting out today, 230 years later.
Be Careful What You Wish For
In the modern world, the coding LLM is the magic, the prompt is the spell, and the unfortunate developer is the apprentice.
All too often, we hear stories where developers invoke a prompt: “write a program that …” and the AI obliges. But the developer doesn’t understand what they’ve asked for, or what the AI produces. It’s all just magic.
And because they don’t understand, they have no way of knowing if it is correct. They don’t know if it is a reasonable implementation, whether it will fit in with the rest of the company’s infrastructure, whether it will be maintainable. They are just passengers, along for the ride. And they better hope that there’s a sorcerer somewhere in the background who can dig them out of whatever mess their magic creates.
I normally hate rules, but here’s one I can get behind:
The AI Rule
Never get an AI to write code
that you couldn’t have written yourself.
AI is a tool that amplifies your ability to code. It does not replace your understanding of what needs to be done, and it won’t take the blame if what it produces is wrong.
You have to know the basics. You have to know design, and techniques, and performance, and the thousand other things, both large and subtle, that make you a developer.
And all that comes from doing the work up front—from experience and judgement.
AI is not deskilling development: if anything it requires more skill of us.