John Henry and the large language model
John Henry told his captain
A man ain’t nothing but a man
But before I let your steam drill beat me down
I’d die with a hammer in my hand, Lord, Lord
I’d die with a hammer in my hand
The story of John Henry is a famous American fable about pride. To build railroad tunnels, men would hammer a chisel-like drill into the mountain rock, so that explosives could be placed inside for blasting. John Henry, a “steel-driving man”, couldn’t accept that a steam-powered drill could hammer better than him. He proved his point by outworking the machine - only to die from exhaustion with a hammer in his hand.
I think about John Henry when I read lobste.rs commenters telling Simon Willison that he’s not a very good programmer because he thinks LLMs are more conscientious about test coverage than he is. I think about the railroad boom when I hear engineers lamenting the death of software craftsmanship. At long last, the industrial revolution is coming to our industry. Whether this is good or bad for the world, it’s certainly bad for the John Henrys of the software world, who are proud of their superiority to machines1.
If you are personally invested in the idea that you can write code better than any LLM, I suggest that you’re in John Henry’s position. Right now you might be correct, but you’re fighting against the current of progress. The early steam drills weren’t quite as good as a skilled steel-driving man. They couldn’t clear the chips of stone that formed around the drill bit, so the bit would get stuck and break down. That sounds kind of familiar.
I’m not trying to convince you that LLMs will eventually become super-intelligent software engineers. They will or they won’t. What I am saying is that in the battle between skilled craftspeople and automated mass-production - whether it’s about drilling holes, sewing fabric, making cars, or writing software - the automated mass-production typically wins, no matter how proud the craftspeople are of their skills. It might be sensible to consider what you’ve got going for you besides producing artisanal hand-crafted lines of code.
It’s possible that you’re paid to write software that a LLM could never write. There are some rare cases where people are still paid to drive steel by hand. Like most of my colleagues, I spend my time writing web apps and services: in Ruby, Golang, and React, mostly. With a bit of taste and guidance, I can pilot a LLM2 through about three-quarters of it (though in practice only about one-third of my code is first drafted by a LLM agent, since sometimes it’s just quicker and easier to drive myself). A year ago, that figure was closer to one-tenth. The steam drill is coming for me, too.
-
Software engineers are particularly prone to believe ourselves superior to machines, because we spend our days telling machines what to do. The idea that a machine just does what it’s told is deeply internalized in the engineering mindset - when I was learning to code as a child, I remember my father telling me over and over again that the computer only does what I tell it to do.
↩ -
I use Copilot Agent mode (out of solidarity with my employer), but I’m sure any agent-based tooling would work equally well. If you disagree, I would recommend trying the new Claude models.
↩
If you liked this post, consider subscribing to email updates about my new posts.
June 3, 2025 │ Tags: good engineers, ai