Vibe Coding Is Not What You Think It Is (Premium)

Vibe-coding clown

There is no evidence that the speed at which AI advances has slowed in the slightest. Almost every day, there is some new milestone, usually in the form of ever-more-capable new AI models or services that take advantage of them. These advances span every use case imaginable, making it ever more difficult for AI deniers–and, yes, they’re still out there, nervously collecting random AI fails that they believe support their Luddite views–to continue the charade.

AI is interesting on many levels. We’ve learned that interacting with an AI chatbot is different from the typical Google search, where being very specific–the more the better–will lead to superior results. We’ve learned that so-called reasoning models, which show the user how it “thinks” through a problem, are both more trustworthy and more accurate. And we’ve learned that grounding AI isn’t just important, it’s ideal: The more finite the learning set, the better, whereas AI that just looks at the entire Internet is more prone to “hallucinations” because the body of opinions online is overwhelmingly contradictory despite the existence of objective facts.

?‍? AI and coding

It is not coincidental that the first major use of AI–as we know it today–was GitHub Copilot, a developer product that’s grounded in the programming languages and frameworks that developers use to write code. (It is likewise not coincidental that Microsoft, which owns GitHub, seized on the Copilot brand for its other AI offerings, which are likewise expanding unabated as I write this.) Software development and AI are the Reese’s Peanut Butter Cup of modern technology, two great ideas that just go together naturally.

This makes sense. The specification for any programming language–C, C++, C#, Java, JavaScript, whatever–is, by definition, finite, as are the specifications for the various frameworks that developers use with them. There are also years–and in some cases, decades–of online interactions on sites like Stack Overflow in which experienced developers answer questions for beginners or anyone else confused by specific issues, usually with source code examples. All this data, combined, represents a body of work that is both finite and extensive. It is a near perfect grounding on which train AI models. And it is not surprising, then, that when new models emerge, as they do every week right now, that software development expertise is routinely touted alongside more mainstream use cases like text summaries and rewriting, text-to-whatever content creation, and so on.

In recent months, AI has gotten so good that this perfect combination of ease and sophistication has caused non-programmers to experiment with software coding. Or, more specifically, to ask AIs to create software code for them. And there are many examples of software programs, including games, that have been created this way, sometimes by non-coders. On a recent episode of the Scott & Mark Learn To… podcast, for example, Microsoft Azure CTO Mark Russinovich explained that he will never need to learn the Perl programming language because AI is so good, and he knows enough about programming–and how to test for the correct results in AI-produced code.

Granted, Russinovich is an expert and more experienced with AI than most. But with more and more non-technical users and non-programmers using AI to create not just lines of code but actual programs, there is this growing belief in certain circles–the overly optimistic AI cheerleaders at the other end of the spectrum from the AI deniers–that we won’t need programmers anymore. And that seeking a formal education in software development is suddenly as pointless, career-wise, as a degree in art history.

? Enter vibe coding

The short heard ’round the world in this field arrived in February when OpenAI co-founder Andrej Karpathy coined the term “vibe coding,” noting that AI models are “too good” and can write code that exceeds his ability to understand it. In that sense, he was just channeling Russinovich–like him, Karpathy is an AI and software development expert–but then he was also less famously heading towards this conclusion for months ahead of this declaration. In January, for example, he tweeted that “the hottest new programming language is English.” The implication being that English–probably, any human spoken language–is all you really needed to write code using AI.

As a term, vibe coding caught on for all the obvious reasons. But like so much else in life, it’s also widely misunderstood. Karpathy wasn’t actually claiming that non-developers could write programs with AI. He was claiming that developers could write better code, and thus better programs, with AI. He went on to support his opinions by citing sources, something AI is often accused of not doing. But I don’t really need that evidence to understand what he meant. Instead, I can just read it.

And what he claimed can be broken down like so, using his words where it makes sense:

  • Vibe coding is a new kind of coding in which you–a developer–“fully give in to the vibes, embrace exponentials, and forget that the code even exists.”
  • Vibe coding is possible because of advances in AI models.
  • A developer can “talk” (speak, literally, but more commonly type) to AI and use plain English to fix problems with existing code–he uses the example “decrease the padding on the sidebar by half”–because they are too lazy to research this topic online, as they’ve had to in the past. (I call that being efficient, not lazy.)
  • AIs used as “pair developers” (like GitHub Copilot) typically provide their suggested changes side-by-side with the original code, so the developer can review them and then optionally accept them. But Karpathy argues that the AI is so good he just always chooses “Accept all” and no longer reviews the changes.
  • Doing this isn’t perfect: The AI will produce bad code, which doesn’t compile. So the developer can then just “copy/paste the error messages” to the AI, and “that usually fixes it.” In other words, when the AI makes a mistake, he tells the AI, and the AI usually fixes it on the next pass. Not always, but usually.
  • When the AI can’t fix a bug that it caused with bad code, Karpathy recommends “asking it for random changes until it goes away.” This, too, channels the Russinovich conversation, though Mark was smarter about it. He noted that he would simply tell the AI to keep improving the code until it got better. He didn’t accept the initial output blindly.
  • Vibe coding is “not really coding,” Karpathy admits, but “it’s not too bad for throwaway weekend projects” and “quite amusing.” “I just see stuff, say stuff, run stuff, and copy/paste stuff, and it mostly works,” he claims.

Based on this, I can only conclude that almost no one promoting vibe coding read or understood what Karpathy was describing. And that almost no one promoting vibe coding understands software development in the slightest.

Given how quickly AI is evolving, and given my remarks about the finite but comprehensive body of work that exists to train AI on software development tasks, there is only one obvious conclusion. And it’s as obvious as it is banal. Software development is changing forever thanks to AI, of course it is, but software developers are still in demand, and still required. But software development as a career or expertise is not going away.

? What developers really do

In slowing adopting AI to improve my .NETpad project this year, I have experienced what I believe to be a fairly normal reaction to this capability. Developers are as set in their ways as anyone else–writers, system admins, lawyers, whatever–and as with experts of any kind, there’s a natural skepticism at first. But that skepticism disappears with experience, and as is the case with kernel developers not just adopting Rust but preferring it over time–oddly another example involving Russinovitch–it turns to acceptance. And to this understanding that maybe they shouldn’t have waited so long to make this shift. Why didn’t we adopt this earlier?

I’ve confirmed this finding with a few developer friends, not that I needed to do that either. In my .NETpad articles, I often stress that I’m not a professional developer as a kind of shield against criticisms of my code quality. But I have been writing software code for decades, I was professionally trained, and I wrote books, a dozen or so, about software development, for crying out loud. I have a grounding in this topic.

And what I know is this.

Good developers haven’t memorized specific language constructs, APIs, or frameworks. Good developers know where to look to get answers as quickly as possible so they can get on with the job at hand.

Good developers–no, all developers–long ago shifted to the Internet as the source of research, and that takes them to the same couple of sites, starting and ending with Stack Overflow in most cases, to find answers. In my case, with C#, .NET, and WPF, I also find myself reviewing the formal documentation on Microsoft Learn. But those are the two primary sources for help that I find.

Getting an answer sometimes takes a long time. There are decades worth of WPF-related questions and answers on Stack Overflow and elsewhere online. And there are rarely conversations that exactly mirror what I’m trying to do. And so you have to read and read, and understand, and pick bits of wisdom out of years of discussions and source code.

And now, that’s all easier. Thank God.

⌚ AI makes software development more efficient

Now, you can use tools built into the IDE–Visual Studio in my case, but also Visual Studio Code and others–to examine your code, review it in real time, or answer questions. You can be very specific, and the answer you get will be precisely what you need. You never have to Google anything or read the documentation. The AI is very complete, it offers explanations for the code it creates. AI, in short, saves developers time. It is a boon to productivity. And yes, it can write some code for them, for us. But it is not writing the entire application. It is my partner or, as Microsoft might say, my copilot. The developer is in control.

What’s most interesting to me here is that the term “vibe coding” describes the very problem with vibe coding: Code correctness is one thing, but software development involves many people skills that don’t translate well to the objective world of coding or engineering. The phrase “look and feel” is as fuzzy as the phrase “vibe coding,” our understanding of what constitutes a “modern” app–by function or design–changes regularly, and this is something AI struggles with or just fails completely. We can tell AI to make images or write text in some style, to be “like” an existing work. But sometimes what’s in our heads is difficult to describe. And if it’s a truly independent, original work, it may be as simple as “I know it when I see it.” That is, AI can be correct, but it’s not always right.

But that’s almost beside the point. Using the description provided by the person who invented the term “vibe coding,” he’s describing how AI can help real developers, not how AI can replace them. It may lessen the need for developers, meaning fewer developers will be able to create bodies of code that, in the past, required more. That’s the nature of any technology advance. But developers are still necessary. I think they always will be.

? But, but, but …

To be clear, there are examples of people who tell an AI to create a game, or whatever, to whatever level of detail, and it works. It creates that thing. These exceptions always exist. But if there is a bug, if you play that game for an hour and suddenly can’t continue because of whatever issue, yes, you could frig with it and hope it spits out something workable eventually. Sure. You could use a random number generator and hit the lottery, too. That doesn’t make playing the lottery a wise career choice. It’s just luck, a beguiling possibility that will disappoint most who try it.

Software developers figured out the fallacy of this line of thinking years ago. We have a joke that goes like this: “If it compiles, ship it!” And then we all laugh and turn back to our debuggers.

The truth is, compiling an app successfully is just the first step in a long process, and it’s when the real work starts. Then, you have to test the app, make sure it works in every way imaginable, can handle any issues, many of which may not be obvious. This is another area where AI can and does help, of course. And as a developer of sorts, I love it for that. I will never go back to the pre-AI era in which I was alone, in the dark, Googling for help, cursing because no one seemed to ever ask the questions I needed answers. But this isn’t “vibe coding.” It’s not even a vibe. It’s just coding.

Today, coding is done by humans who are augmented by AI. Coders who don’t use AI will decline and then disappear for the most part, because those people will be less efficient and the code they write will be worse. The use of AI will increase, of course. It will get even better. And maybe there is a science fiction future in which the AI turns on us for our frailty and frequent errors. But it is more likely that we trust AI more as that quality improves, and we use it more as building blocks in what are essentially creative endeavors that are, at heart, quite human. And that’s true for almost everything we’ll do with AI. It’s just that software development is the ideal initial use case.

Gain unlimited access to Premium articles.

With technology shaping our everyday lives, how could we not dig deeper?

Thurrott Premium delivers an honest and thorough perspective about the technologies we use and rely on everyday. Discover deeper content as a Premium member.

Tagged with

Share post

Thurrott