Skip to main content

Vibe Coding vs AI Coding

·1836 words·9 mins
By 
DrProton
Table of Contents
Vibe Coding vs AI Coding - This article is part of a series.
Part 3: This Article

In the first post in this series, I described how I used AI to create a little app that helped me get past a minor problem I encountered while pursuing my music production hobby. In the second post, I gave my take on how well AI performed for me during that little exercise and made the claim that AI has surpassed humans in its ability to write code. This post attempts to explain and qualify that statement, and to comment on what I think it means for (human) software development.

Saving Some Ego

The realization that AI has surpassed humans at writing quality code quickly was a difficult one for me, since I made my living for 30+ years by being the guy who could quickly produce large volumes of quality code from very loose, vague specifications (I have never worked in an environment with formal ‘contract-style’ software requirements). I think I did the ‘write good code quickly’ part of my job better than most of my human peers, and I admit that this was a source of pride for me. But AI has now surpassed me in this arena, and by a lot, which is why I feel pretty confident extrapolating from the realization that AI surpassed my ability to write code to the more general statement that AI has surpassed human ability to write code.

…at least in some situations. There are caveats that soften that conclusion and save a little ego.

For example, this particular project was a standalone ‘weekend project’ with very few external constraints – pretty much anything that worked was acceptable. The software did not have to extend or mesh with existing software or hardware. This is probably where AI coding shines most, but greenfield software projects like this are rare in the software industry.

The stakes were also very low: the AI code and app performance only had to please me, not other reviewers, QA testers, marketing folks, or thousands of customers. Under different circumstances, I might not be quite so thrilled with AI’s performance.

Another ego-saving thought is that maybe AI coding worked so well for me because I guided it well. A person with less knowledge about software might get inferior results. I like this thought because it implies only the lower-level code creation part of my skillset has been made obsolete, while the higher-level judgment and intuition that I built over the years is still relevant for steering AI toward quality finished software.

One simple example from this effort: while I was trying to get AI to produce code that properly segmented the image for OCR (described here), the AI really wanted to hardcode row and column positions within the image. I would point out where image segmentation failed, and it would tweak the hardcoded values and claim success. But it still didn’t work across all cases, and the loop repeated. After a few rounds, the human in the loop (me) realized hardcoding the positions wasn’t going to work and that a smarter approach was needed. I directed AI to segment by finding horizontal and vertical lines in the image instead, and that worked well. Without that change in direction, I think the AI would have gone in circles indefinitely. It was smart enough to understand the problems I pointed out at each step, but it didn’t have the wherewithal to realize that more than minor tweaks were required.

This hints at the reason why I somewhat carefully worded my statement that AI surpassed humans in its ability to write code. I did not say that AI has surpassed humans in its ability to produce software. Writing good code is only a part (though a significant part) of what it takes to produce successful software.

Vibe Coding vs AI Coding

In the previous post, I referred to how I used AI to create the code as ‘vibe coding’. But it seems the terminology surrounding the use of AI to produce code has evolved a bit (or at least my understanding of it has), such that what I was doing to produce my little utility app wasn’t really ‘vibe coding’; it was probably closer to what is now being termed ‘AI coding’ by some industry pundits. The distinction is perhaps subtle, but I think it is significant.

In these updated definitions, ‘vibe coding’ means the human blindly accepts all code that the AI produces, to the point where the human doesn’t even look at the code. The human just repeatedly runs the app and tells the AI what to do next, until the human is satisfied that the app is finished and working correctly. The requests to the AI are all in terms of changes to the app’s appearance or behavior, not changes to the codebase. Vibe coding can be done by humans who do not know anything about code.

Whereas ‘AI coding’ refers to an experienced human software developer using AI to assist in producing quality code. It can only be done by humans who know code - the human both acts as a user running the app and as a developer producing the code for the app. In AI coding, the human software developer generally pays attention to the detailed changes the AI is making at each step, and may even reject some of the changes proposed by the AI. In effect, the human software developer treats the AI as a coding assistant that helps write the code, but the code is still ‘owned’ by the human. With AI coding, some requests to the AI may involve rearranging, refactoring, or streamlining the code itself to improve organization and quality, even if app behavior does not change noticeably.

So I would classify what I did for the drum mapping app as a lite version of AI coding. The vast majority of the final app’s code was written by AI and left unchanged by me. I generally changed code manually only when it was easier for me to make the change directly than to type a prompt to get the AI to make it. I only rejected or backtracked on a couple of the AI’s proposed changes. I did read and verify almost all the code produced by AI, except for some really straightforward bits that I trusted the AI to get right.

When a human software developer does want to ’take the reins’ and manually produce code, AI can still help a lot through code completion (akin to auto-complete while typing text), early error detection, documentation, code reviews, and test code generation. AI can even act as a partner in pair programming, which was all the rage in the software industry for a while. I never did pair programming during my career, but I can see how it is a great way for senior developers to mentor junior developers.

The production of test code perhaps deserves special mention. Good test code requires knowledge of how software works and how it is prone to fail, and possibly detailed knowledge of the code itself (for white-box testing). Test code is likely not even a consideration when non-coders produce software via vibe coding, but the consensus in the software industry is that writing test code is critical to having a reliable software product. Even so, many human software developers despise writing test code, myself definitely included. I certainly did not write any test code for the drum map project, but that was mostly because the stakes weren’t high enough - if I were releasing the software to the world, I would have written test code. So this seems like a perfect example of where AI coding can really help a developer: when guided by a human’s experience and intuition about software failure modes, AI coding can produce quality test code very quickly.

Implications

Industry pundits claim that this distinction between vibe coding and AI coding is critical; they often state bluntly that AI coding works, vibe coding doesn’t. And they claim AI coding will save the future for human software developers. They picture a future where AI takes over the low-level ‘code monkey’ work, while a human with years of experience in the trenches stays in the loop to guide AI toward good results. This makes some sense, and could well be what happens in the next few years, but here are three somewhat ominous thoughts:

  • In some software shops, low-level code production is done by junior developers as they gain experience, perhaps via pair programming. If AI takes over that role, fewer junior developers will be hired. If fewer junior developers are hired, fewer developers will gain the experience needed to become senior developers who can successfully guide AI to produce quality software, or even verify that AI has produced good code.

  • I think it is clear that AI will make experienced software developers much more productive. A single developer using AI can potentially produce the code that previously would have taken a team of developers. This means fewer developers will be required. Some claim that making software development less expensive in terms of required developer headcount means software solutions can be built for situations where it is not cost-effective now, which could increase demand for software developers. While this little software project may itself be an example of that (I would not have created the software at all if I had to code it without AI), I am dubious that this effect will create full employment for software developers.

  • It seems AI will continue to improve its ability to produce good code from the vague “I want software to do…” specifications that sometimes come from non-coding product managers and domain experts. You can find many articles about companies that laid off all their human software developers because they thought AI was already at the point where non-developers could guide AI to produce good software. In those same articles, you may also read that those companies then rehired human developers because AI is not yet really up to this task. But at the rate AI is improving, I think it is very possible that AI coding becomes good enough to truly squeeze out human software developers in the not-so-distant future.

Taken together, these trends are why I think software development careers are entering a genuinely disruptive transition, not just another tooling shift. I don’t believe that software developer jobs will become extinct overnight, but I feel the writing is on the wall. Things seem especially bleak for software developers who refuse to embrace AI - their employment options will be limited to ‘holdout’ software shops where management can’t or won’t adopt AI, either because of distrust or ignorance of what AI can do for software production.

If you are currently employed writing software and not actively using AI to assist you, I urge you to start. If you are a young person just starting out in the software industry, I… don’t know what to tell you. Except that you probably shouldn’t be spending your time on retirement-oriented websites.

Author
DrProton
Retired software developer, ex-physicist, wannabe musician and lifelong learner.
Vibe Coding vs AI Coding - This article is part of a series.
Part 3: This Article

Comments

Tags

AI Coding Technology Personal Story

Related

AI Coding Performance Appraisal
·1182 words·6 mins
By 
DrProton
Artificial Intelligence
AI Coding Technology
Vibe Drum Mapping
·2836 words·14 mins
By 
DrProton
AI Projects Coding Technology
Physics vs AI
·2258 words·11 mins
By 
DrProton
Projects Coding Technology Physics
Pool Temperature Physics
·2618 words·13 mins
By 
DrProton
Projects Coding Technology Physics
Weather Data Science
·2219 words·11 mins
By 
DrProton
Projects Coding Technology Physics