Reportedly, the first occurrence of the term "vibe coding" is attributed to Andrej Karpathy, one of the founders of OpenAI, on X in early 2025.
Andrej Karpathy @karpathy Feb 2, 2025
There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. ... I ask for the dumbest things like "decrease the padding on the sidebar by half" because I'm too lazy to find it. I "Accept All" always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I'd have to really read through it for a while. Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away. It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.
source: https://x.com/karpathy/status/1886192184808149383
I don't know Karpathy, but I do know people who use the approach "can't fix a bug so I just work around it until it goes away". I also know people who stop after "it mostly works". Now for "throwaway weekend projects", that's fine--as long as it's thrown away. I do take offense that "webapp" is not really coding. If anything is not real coding, it's "vibe coding".
But I've been thinking about what we do with the code generated by AI and comparing it to older methods of improving programming. Programming languages have been described using generations. The following definitions are adapted from Wikipedia. With AI in early 2026, the generative-AI LLMs are used to write 3GL languages. The 3GL code becomes the persisted, maintained content. Whereas the 3GL language compiles down to a 2GL and ultimately a 1GL language. The the 2GL and 1GL content (e.g., exe, lib, obj) is not maintained. It is always regenerated from the higher-level language. At some point, I expect AI prompts/plans to become a 6GL written in natural language (like COBOL hoped to be).
First generation (1GL)
A first-generation programming language (1GL) is a machine-level programming language. The instructions in 1GL are expressed in binary, represented as 1s and 0s.
Second generation (2GL)
Second-generation programming language (2GL) is a generational way to categorize assembly languages.
Third generation (3GL)
Examples: C, C++, Java, Python, PHP, Perl, C#, BASIC, Fortran, COBOL
3GLs are much more machine-independent (portable) and more programmer-friendly. 3GLs are more abstract than previous generations of languages, and thus can be considered higher-level languages than their first- and second-generation counterparts. Most 3GLs support structured programming. Many support object-oriented programming. Traits like these are more often used to describe a language rather than just being a 3GL.
Fourth generation (4GL)
Examples: Unix shell, SQL, Oracle Reports, R
Fourth-generation languages tend to be specialized toward very specific programming domains. 4GLs may include support for database management, report generation, mathematical optimization, GUI development, or web development.
Fifth generation (5GL)
Examples: Prolog, OPS5, Mercury, ICAD, Geometry Expert, LISP
A fifth-generation programming language (5GL) is any programming language based on problem-solving using constraints given to the program, rather than using an algorithm written by a programmer. They may use artificial intelligence techniques to solve problems in this way. Most constraint-based and logic programming languages and some other declarative languages are fifth-generation languages. Fifth-generation languages are used mainly in artificial intelligence or AI research.

