AI canโt replace bad developers because it only works for good developers. Recognizing when code from an LLM will fail requires skill and experience.
โAI models currently shine at helping so-so coders get more stuff done that works in the time they have,โ argues engineer David Showalter. But is that right? Showalter was responding to Santiago Valdarramaโs contention that large language models (LLMs) are untrustworthy coding assistants. Valdarrama says, โUntil LLMs give us the same guarantees [as programming languages, which consistently get computers to respond to commands], theyโll be condemned to be eternal โcool demos,โ useless for most serious applications.โ He is correct that LLMs are decidedly inconsistent in how they respond to prompts. The same prompt will yield different LLM responses. And Showalter is quite possibly incorrect: AI models may โshineโ at helping average developers generate more code, but thatโs not the same as generating usable code.
The trick with AI and software development is to know where the rough edges are. Many developers donโt, and they rely too much on an LLMโs output. As oneย HackerNews commentator puts it, โI wonder how much user faith in ChatGPT is based on examples in which the errors are not apparent โฆ to a certain kind of user.โ To be able to use AI effectively in software development, you need sufficient experience to know when youโre getting garbage from the LLM.
No simple solutions
Even as I type this, plenty of developers will disagree. Just read through the many comments on the HackerNews thread referenced above. In general, the counterarguments boil down to โof course you canโt put complete trust in LLM output, just as you canโt completely trust code you find on Stack Overflow, your IDE, etc.โ
This is true, so far as it goes. But sometimes it doesnโt go quite as far as youโd hope. For example, while itโs fair to say developers shouldnโt put absolute faith in their IDE, we can safely assume it wonโt โprang your program.โ And what about basic things like not screwing up Lisp brackets? ChatGPT may well get those wrong but your IDE? Not likely.
What about Stack Overflow code? Surely some developers copy and paste unthinkingly, but more likely a savvy developer would first check to see votes and comments around the code. An LLM gives no such signals. You take it on faith. Or not. As one developer suggests, itโs smart to โtreat both [Stack Overflow and LLM output as] probably wrong [and likely written by an] inexperienced developer.โ But even in error, such code can โat least move me in the right direction.โ
Again, this requires the developer to be skilled enough to recognize that the Stack Overflow code sample or the LLM code is wrong. Or perhaps she needs to be wise enough to only use it for something like a โ200-line chunk of boilerplate for something mundane like a big table in a React page.โ Here, after all, โyou donโt need to trust it, just test it after itโs done.โ
In short, as one developer concludes, โTrust it in the same way I trust a junior developer or intern. Give it tasks that I know how to do, can confirm whether itโs done right, but I donโt want to spend time doing it. Thatโs the sweet spot.โ The developers who get the most from AI are going to be those who are smart enough to know when itโs wrong but still somewhat beneficial.
Youโre holding it wrong
Back to Datasette founder Simon Wilisonโs early contention that โgetting the best results out of [AI] actually takes a whole bunch of knowledge and experienceโ because โa lot of it comes down to intuition.โ He advisesย experienced developers to test the limits of different LLMs to gauge their relative strengths and weaknesses and to assess how to use them effectively even when they donโt work.
What about more junior developers? Is there any hope for them to use AI effectively? Doug Seven, director of AI developer experiences at Amazon Web Services, believes so. As he told me, coding assistants such as Amazon Q Developer, formerly CodeWhisperer, can be helpful even for less experienced developers. โTheyโre able to get suggestions that help them figure out where theyโre going, and they end up having to interrupt other people [e.g., to ask for help] less often.โ
Perhaps the right answer is, as usual, โIt depends.โ
And, importantly, the right answer to software development is generally not โwrite more code, faster.โ Quite the opposite, as Iโve argued. The best developers spend less time writing code and more time thinking about the problems theyโre trying to solve and the best way to approach them. LLMs can help here, as Willison has suggested: โChatGPT (and GitHub Copilot) save me an enormous amount of โfiguring things outโ time. For everything from writing a for loop in Bash to remembering how to make a cross-domain CORS request in JavaScriptโI donโt need to even look things up anymore, I can just prompt it and get the right answer 80% of the time.โ
Knowing where to draw the line on that โ80% of the timeโ is, as noted, a skill that comes with experience. But the practice of using LLMs to get a general idea of how to write something in, say, Scala, can be helpful to all. As long as you keep one critical eye on the LLMโs output.


