Definition of Vibe-Coding
Versus Programming
Before explaining more about my own work and game, I would like to define what means developing a software with or without generative AI,
and what concepts such as vibe coding truly mean.
Because, to put it bluntly, I’ve seen all sort of non-sensical made-up definitions, completely out of touch with the reality or realms of software development.
I’ve read things such as “searching with Google is vibe-coding” (I literally saw that 🤡) to “if you’re not using books and YouTube videos, you’re vibe-coding” (what 😂?!?).
But there’s a crystal-clear, technical definition of vibe-coding versus creating from scratch.
Vibe Coding Definition
The definition of vibe coding is extremely simple: it’s the process of generating a code that is not understandable for the person who’s generating it,
used to build a software without or by partially understanding the code.
Thus, in order to do any modification whatsoever, that person will have to ask LLMs again, because they cannot or can only partially modify the code.
This fact will create a gigantic technical debt, where the code become a gargantuan black box and where vibe-coders become entirely dependant on a system… That doesn’t even understand its own input (the AI).
Let me give a first example with a simple, intentionally “bad” Standard C++ GameCharacter class (not Unreal C++) for a basic game character.
Let’s assume the entry point is somewhere else, and I don’t use the conventional header source segmentation just to make the example simpler.
#pragma once
#include <string>
class GameCharacter
{
public:
GameCharacter() = default;
~GameCharacter() = default;
void Heal(int Amount) { Health += Amount; }
protected:
private:
std::string Name { "Generic Character" };
int Health { 100 };
float Armor { 250.0f };
};
In that specific case, a vibe-coded version means that the person doesn’t understand the syntax, and the meaning of the whole script.
That person might not understand a single word of what is written here, or perhaps that person have a very limited knowledge of C++.
Perhaps that person might know what a class is, what access specifiers like public, private, and protected are, and what the fundamental data types are.
Thus, that person won’t know that, if she wants to have a derived class and will generate the same Heal() method (or member function in C++ lexicon),
it’ll call the parent class unless adding the virtual keyword (and same for the destructor).
Maybe that person won’t even understand that healing should be capped so the Health bar is limited.
Perhaps that person doesn’t even know that it’s possible to create parametrized constructors to generate a new game character with a default health of 250 and armor of 999.9f.
And the list can go on and on.
Knowledgeable Person
On the other hand, a developer will perfectly know the meaning of every keyword, or will try to ask an AI or look up to understand the whole code.
This person can not only write a good code, following good practices, but also prepare the codebase for future iterations of the game.
That developer can write a class specifically designed for a game in mind, within many constraints (platforms, scope, etc.).
Some say “AI can still iterate and fix problems”. Sure thing, but AI won’t be able to scope a class.
Now that we’re clear on the definition, let’s talk more about the effects.
The effects of vibe-coding
Is vibe coding bad?
The million-dollar question is rather simple: is it bad to vibe-code?
Well, my stance is pretty clear: for a learner or a hobbyist, vibe coding is perfectly fine.
Not everyone on Earth can spend years learning and practicing a programming language or using game engines to create a simple recipie app! Why would they?
And, for those who are saying freelancers exist, why would they spend hundreds or thousands of dollars to ask a very simple app they might use only a dozen of times?
Those are valid use-case scenarios.
However, I do believe that, on professonal and commercial contexts, vibe-coding is very dangerous,
because people expect a commercial software to work flawlessly and the developers to understand their codebase.
In the end, vibe-coding instead of developing will dramatically lower the quality.
But even so, it’s none of my business to tell how people should do. I’m not an activist.
The fallacy of the ignorant
As a Computer Science instructor/Professor, I think the discourse about vibe coding or autonomous agents to replace developers or programmers is a fallacy.
When I’m teaching C++ or Python to beginners, I always use a simple example for explaining why vibe coding seems magical to the beginner.
It’s like a non-Spanish speaker will generate a whole novel in Spanish. Is it possible? But of course!
For a non speaker or someone barely coherent in Spanish, it’ll look absolutely perfect. But for a native speaker and someone who’s trained to write,
that person will see all the problems of that generated novel.
Understanding: the Key difference
To roughly explain what deterministic compilers are doing, they subdividing the text into tokens, liek the smallest meaningful part of each sentence.
Thus, vibe-coded is both based on the person AND the way of writing the code.
For instance, for some of my students, I can’t directly know if they actually wrote the code all by themselves. Maybe they used generative AI, maybe not.
I also never trust any AI checker, which in my opinion would never be reliable and would always have false positive (again, that’s my opinion).
Thus, the only way I can evaluate my students is by checking if they actually understand the code, if they know abou the syntax, from the basic things like the semicolon, the constructor and destructor keywords to more complex stuff like inheritance rules for accessors or pointers.
Abstraction & time
Some people tend to use the evolution of video games as an example why developers should “move” to AI-generated content, which has a massive misunderstanding.
In my PhD Thesis, I’ve talked about the fact that, with time, systems tend to be more abstract and game developers can focus more on gameplay systems rather than low-level technical details.
For instance, all games during the 4th generation era, such as Super Nintendo and Genesis, were made with the assembly language. Then, during the 5th generation, especially with PlayStation, games were made in C, with some cases still using assembly for optimizations. Still, they were mostly creating game engines.
Then, came the idea of using C++, and using an existing framework or engine.
So, some people wrongly assume that generative AI is the “next step”. However, this tend to ignore a pretty massive difference: each time abstraction was higher, control was still possible. It wasn’t about losing control over the ouput, but more about not caring about small technical implementations of some stuff.
And, by the way, simplified tools always existed: RPG Maker, GameSalad, FPS Creator.
These tools always had the same premise: make games simpler and faster, but with much less control. Generative AI in vibe-coding cases is just the extension of these tools, although they can be used on everything, including low-level stuff.
The Executive vision
Now, in game development, some people just don’t play games. They see them as interactive software or experience where any automated workflow can easily replace a human workflow.
Some might even say generative AI can produce high-quality models, animations, and gamepaly scripts.
This vision tend to completely ignore what handcrafted means.
Handcraft is not about perfection, which is a common fallacy with both anti-AI and pro-AI crowds. I’ve played games since the SUPER Nintendo, and there was a lot of “imperfect” games.
Handcraft is about having a coherent vision, with an excellent technical knowledge of how to design things for not only the current use-case scenario, but how the game will evolve in the future.
There’s a million ways to model a 3D car.
Is it a prop? An interactive system? How interactive? Is it driveable? Can the player use the hood or the trunk? For what?
That will dramatically change how to make a car, and the modularity required is most of the time very different based on the interactivity required, the art style, the game engine, and many other parameters that would be hard to explain to an AI, but that you instinctively know when you’re used to create 3D models.