Commercial software development was stressful even before generative AI. I’ve gone through massive burnout twice. It can easily take over a year to recover; the first time, I wasn’t sure I’d ever write code again. It’s the industry epidemic that ought to be talked about more. Instead, everyone’s talking about how AI will enable developers to go even faster.
Suddenly experienced developers are expected to spend most of their time reading and debugging terrible generated code — the slowest and most unpleasant part of software development. The rest of the time will be dicking around with Markdown files to try to get the random text generators to generate something that meets the bare minimum requirement of passing tests — tests which are increasingly poor because they’re also generated by an LLM. Then there are the documents generated by bloviating bots, which you’re also expected to read. This will all be done in “agentic” style, meaning multitasking all day, every day. I can’t imagine a more miserable and ultimately doomed way to build software.
The AI proponents say that bots write great code now, and that humans writing code is old fashioned and unnecessary. I disagree, because to me creating software has always been a deeply interactive process. Even if the bots can generate reasonably clear bug-free code, I can’t just write up the design and give it to a bot to implement, because part of the design process is implementing pieces of design, exploring how they work, and sometimes throwing them away in favor of something else. This interactive exploration, to me, is how the process happens, from the smallest function up to the main application skeleton. It’s why I think programming is more art than science.
“Look at this beautiful image,” the AI proponent will say. “How can you criticize it, when it looks as good as a human-generated one?” The artist will try to explain that the process is a vital part of getting to the output, even if you can’t directly see the process in the output. This seems to be something that AI proponents can’t grasp. If you can push a button and get something that looks good, isn’t that enough? Why does it matter how it was made?
We used to have a software development methodology where you wrote up a set of detailed instructions, and then programmers mechanically translated those instructions into code. We called it Waterfall Development, and it was a disaster. I’m not convinced that having a bunch of small waterfalls, and swapping the code generator from a human to a machine, is going to work any better.
A codebot doesn’t understand anything, so it’s not going to decide that the usual (statistically likely) approach won’t work well in a particular situation, and that there’s a need for a different design pattern or different algorithm. It isn’t going to sit and think about the best naming for functions and variables. It isn’t going to look at a function and make the judgement that in the context of a specific project, it should be dropped and replaced.
In fact, the bots seem very bad at removing code at all. With a large enough codebase and multiple developers, it’s hard to avoid having multiple redundant implementations of something, and that’s with human developers who hopefully care about the issue even if they don’t look harder to see what’s already there. From what I’ve seen so far, the bots will just go ahead and reimplement everything. Eventually the humans looking at the output will just merge it as long as it passes the tests, because they no longer understand the codebase either, and the amount of code being generated is too much for proper review.
An LLM can build you an API; it can probably even build you one that works. What it can’t do is build an API that’s designed to suit the specific problem domain, and designed to make it easy for people to use. You probably can’t do that either, without sitting and trying to use the API yourself. That’s why so many projects started using GraphQL — it’s a way to provide an API without actually having to make any design decisions. That’s why it leads to resource usage problems that you then have to come up with hacks to work around.
In summary: I don’t think you can separate design from coding. Well, maybe some people can, but I sure as hell can’t. Perhaps that makes me a bad programmer? If so, fine, I’ve never claimed to be some sort of code genius.
People also say that talking to the chatbots helps them learn to write code and design systems. Maybe for some people it does, but I’m skeptical, because I know from long experience that I can’t learn anything about computers without actual hands-on experience. I have books about programming, but when I read them I have to stop at the end of each chapter — and often during each chapter — to try things out. I have to actually do the thing in order to learn the thing. Are people actually learning more by chatting to LLMs? Or is that something they tell themselves so that they can feel better about having the LLM write the code as well?
Maybe none of this matters. Software already had a quality crisis before AI, and it had been bloating up since the 1990s. People kept buying crap and the industry kept growing. Perhaps enshittification and surveillance capitalism can keep the whole edifice propped up for a few more decades?
In the mean time, I feel deeply sorry for everyone who’s still trapped in tech full time because they need to pay the mortgage and send the kids in college. I don’t know how I’d cope with that situation.