Top Vibe Coding Techniques from the Past Six Months

Explore Andrej Karpathy's insights on Vibe Coding, AI tools, and effective coding strategies in the post-code scarcity era.

Top Vibe Coding Techniques from the Past Six Months

Andrej Karpathy’s Vibe Coding 2.0: Post-Code Scarcity Era.

Last week, Andrej Karpathy, a founding member of OpenAI, shared a lengthy tweet on X, elaborating on his practices in Vibe Coding.

He straightforwardly stated that one should not fantasize about a universal AI tool that can solve all programming problems. A more feasible approach is to establish a three-layer structure, allowing different tools to play their roles in various scenarios, completing development tasks like a relay race.

Image 2

From my understanding of his insights:

1

In Karpathy’s daily development, he still relies heavily on Cursor’s autocomplete for about three-quarters of the time. Interestingly, he does not depend on natural language prompts to drive AI coding but prefers to write comments and snippets in the code, demonstrating what he wants to the model. This method has higher bandwidth and clearer intent, avoiding deviations caused by context loss. However, he also admits that sometimes Cursor is too “enthusiastic,” completing a long segment of unnecessary content, disrupting his thought process. Therefore, he frequently toggles this feature, maintaining distance like with a “talkative partner.”

2

When faced with larger functional requirements or unfamiliar domains, Karpathy hands over the stage to Claude Code or Codex. These tools are better suited for quickly generating large segments of usable code, especially when writing in languages like Rust or SQL, allowing for immediate construction of complex logic, debugging, and visualization. He introduced a new term—“post-code scarcity era.” In this era, generating and deleting code has become effortless; code is no longer a scarce resource, and the cost of experimentation and exploration has significantly decreased. Want to try a new idea? Just let AI write a version, if it doesn’t work, delete it and start over.

However, the quality of AI-generated code is often “not elegant.” Karpathy provided specific examples: it tends to pile on complex abstractions, misuse try/catch, and be lengthy and redundant, lacking engineering taste. In such cases, he needs to manually clean up, akin to conducting a code review for a novice, removing parts that do not align with his style. Interestingly, he also attempted to have Claude “teach” while coding—explaining why certain choices were made or assisting with hyperparameter tuning—but it simply did not work; it genuinely wanted to write code, not explain anything. This indirectly indicates that while AI is proficient at writing, its explanatory and teaching capabilities are still lacking.

3

When autocomplete and Claude are ineffective, Karpathy’s “ultimate weapon” is GPT-5 Pro. His approach is simple: he inputs an entire challenging problem, lets the model “ponder for ten minutes,” and then reviews the answer. Often, GPT-5 Pro can provide clues to bugs that are difficult for humans to discover or offer unique insights in abstract optimization and literature reviews. In other words, it serves as his “firefighter.”

This three-layer structure makes Karpathy’s workflow resemble an ecosystem. Lightweight needs are addressed by autocomplete, large-scale generation is handled by Claude or Codex, and tough problems are assigned to GPT-5 Pro. Compared to relying on a single tool, this approach is closer to real development scenarios and aligns better with the current state of AI development.

In his tweet, he also discussed the anxiety of the “post-code scarcity era.” While code is no longer scarce, human energy remains limited. Tools are evolving too quickly, leading to concerns about whether one is falling behind or missing out on cutting-edge possibilities. He termed this state as “Sunday musings.”

This reflects the common mindset of many developers today. We are excited about the dramatic increase in productivity yet fear we cannot tame this wild stallion.

For ordinary developers and users utilizing Vibe Coding, I believe there are several takeaways:

First, abandon the fantasy of finding the perfect tool and build your own toolset. Different task difficulties require different AIs, like mobilizing a virtual team—use whoever excels at what.

One must establish their own toolset; I am currently doing this, and this topic deserves a dedicated write-up.

Second, learn to drive the model using “intent in code” rather than “vague natural language,” treating comments and snippets as the communication language for higher efficiency.

Lastly, do not overlook the cleaning process. AI-generated outputs often resemble rough drafts, requiring you to refine them with an engineer’s intuition and aesthetic.

As I write this, I recall an old saying: “To do a good job, one must first sharpen their tools.” However, today, tools are no longer just a hammer or an IDE, but multiple rapidly iterating AI tools. They are no longer static instruments but more like a group of distinct partners. We need to learn to collaborate with them, maintain judgment amidst the noise, and find our rhythm in the torrent.

Was this helpful?

Likes and saves are stored in your browser on this device only (local storage) and are not uploaded to our servers.

Comments

Discussion is powered by Giscus (GitHub Discussions). Add repo, repoID, category, and categoryID under [params.comments.giscus] in hugo.toml using the values from the Giscus setup tool.