"Vibe Coding is a Slot Machine" - Jeremy Howard

fast.ai founder Jeremy Howard critiques the 'vibe coding' illusion, arguing that AI-assisted tools create a slot machine-like experience that erodes true software engineering skills. He revisits the origins of ULMFiT, champions interactive programming for building intuition, and reframes AI risk from existential threats to the dangers of power centralization and human enfeeblement.

6 min read
"Vibe Coding is a Slot Machine" - Jeremy Howard
source: https://www.youtube.com/watch?v=dHBEQ-Ryo24

The Genesis of Modern Fine-Tuning: ULMFiT

The current paradigm of pre-training and fine-tuning language models, now taken for granted, was pioneered with the ULMFiT paper. The core hypothesis was that a model trained to predict the next word on a general-purpose corpus would have to build a hierarchical understanding of the world—from objects to people to societal structures—to compress the information effectively.

The key technical insights that made this work were:

  1. General-Purpose Pre-training: Unlike previous attempts, ULMFiT was pre-trained on a broad corpus (a custom-cleaned Wikipedia dataset), allowing it to learn general knowledge about language and the world.
  2. Architecture and Regularization: It used a highly flexible AWD-LSTM network with five different types of regularization. This approach, controversial at the time, favored constraining a very flexible model rather than using a smaller, less capable one.
  3. A Three-Stage Process:
    • Pre-training: The model was trained overnight on a single gaming GPU (e.g., a 2080 Ti) to predict the next word of Wikipedia.
    • Domain Adaptation: It was then fine-tuned for about an hour on a more specific corpus (e.g., movie reviews) to learn the domain’s vocabulary and style.
    • Downstream Task: Finally, a classifier head was added and fine-tuned for a few minutes to perform a specific task, such as sentiment analysis, achieving state-of-the-art results on what was then considered a very difficult dataset.

A crucial part of this success was a sophisticated fine-tuning methodology developed at fast.ai, which recognized that different layers of a network learn different things. This included using discriminative learning rates (different rates for different layers) and gradual unfreezing (first training only the last layer, then the last two, and so on). This built upon the intuition that early layers capture general features that should be altered less, while later layers capture more task-specific features.

The Illusion of AI-Assisted Coding

While AI coding assistants can type code, they often fail to enhance true productivity in software engineering. Despite the feeling of being more productive, studies show only a “tiny uptick in what people are actually shipping.” The process is compared to a slot machine: it provides an illusion of control through prompt engineering but ultimately relies on a stochastic process with occasional “wins” (a working feature), making it addictive and draining.

This dynamic is particularly misleading when it comes to creativity. LLMs excel at what can be called “compositional creativity” or interpolation within their vast training data. For example, when Anthropic prompted Claude to create a C compiler in Rust, it wasn’t a “clean room” implementation. The model interpolated between its knowledge of LLVM (created by Chris Lattner), the Rust programming language, and existing compiler designs. It even replicated design choices from LLVM that are now considered mistakes, a clear sign of copying rather than novel creation. LLMs can do very creative-seeming things, but they cannot extrapolate outside their training distribution. When they hit that boundary, they go from “incredibly clever to worse than stupid.”

Software Engineering vs. “Vibe Coding”

A critical distinction must be made between coding and software engineering.

  • Coding is the act of typing code, which can be viewed as a “style transfer problem”—translating a specification into the syntax of a target language. LLMs are very good at this.
  • Software Engineering is the discipline of designing solutions, creating new abstractions, and building robust, maintainable systems. This often requires moving outside existing patterns to create something genuinely new.

LLMs are “horrible” at software engineering. They tend to provide designs that look superficially similar to what’s requested but are often fundamentally flawed or inappropriate for a novel problem. The vast majority of work in software engineering is not typing the code, a point made decades ago by Fred Brooks in his essay “No Silver Bullet.” Organizations that bet their futures on AI’s ability to automate software engineering are taking a massive speculative risk based on a misunderstanding of where the real work lies.

Cognitive Science, Learning, and “Desirable Difficulty”

Delegating cognitive tasks to AI has a paradoxical effect: it can erode the knowledge within an organization and the skills of individuals. Learning requires friction, a concept known in education as “desirable difficulty.” We form strong memories and deep understanding when we are forced to struggle with a problem. AI tools that remove this friction can prevent learning from occurring.

This leads to several risks:

  • Enfeeblement: Developers, especially those in the middle of their careers, risk having their skills atrophy. Without the experience of writing code and debugging problems, they may never develop the deep intuition required for senior-level software engineering.
  • Loss of Organizational Knowledge: Knowledge is not an abstract, perspective-free entity on Wikipedia; it is embodied, alive, and evolves within the people of an organization. Automating processes can cut off the feedback loops (e.g., edge cases from a call center) that allow an organization to adapt and evolve its understanding.
  • Focusing on Intercept over Slope: Over-reliance on AI focuses on short-term output (the “intercept”) at the expense of long-term growth in capability (the “slope”). For an R&D-focused company or a growing professional, prioritizing the slope is paramount.

The Case for Interactive Programming

The most effective way to combine human and artificial intelligence is through rich, interactive environments like Jupyter notebooks, REPLs, and tools inspired by Smalltalk and Lisp. This philosophy, championed by figures like Bret Victor, emphasizes creating a direct, visceral connection with the objects of computation.

“The idea that a human can do a lot more with a computer when the human can like manipulate the objects inside that computer in real time and study them and move them around and combine them together.”

Working in this way allows a developer to build up a strong mental model of a system incrementally, testing each small piece as it’s created. This leads to fewer bugs and a deeper understanding. In contrast, the current trend in AI-assisted coding pushes developers further away from the code, interacting only through a text-based prompt, a workflow described as “inhumane” and “disgusting.”

Common criticisms of notebooks (e.g., being bad for software engineering, hard to use with git) are dismissed as solved tooling problems. With tools like NBDev and proper git merge drivers, notebooks can be a superior environment for creating production-quality, well-tested, and well-documented software because the exploration, implementation, tests, and documentation all live in one place.

The Real Risks of AI: Power Centralization and Enfeeblement

The narrative around existential risk from a superintelligent, autonomous AI is a distraction from more immediate and tangible dangers. The primary threat is not a hypothetical paperclip maximizer but the centralization of power.

Throughout history, powerful technologies (from the printing press to the internet) have led to struggles between those who want to monopolize them and those who want to democratize them. If AI becomes incredibly powerful, the worst possible outcome is for that power to be centralized in the hands of a few corporations or governments. This creates a single point of failure that power-hungry actors will inevitably seek to control.

The more pressing, current risks of AI are:

  1. Privacy: The ability of corporations and governments to surveil and collect data on citizens is massively enhanced by AI.
  2. Enfeeblement: The atrophying of human skills and knowledge, as discussed previously, poses a significant long-term threat to our collective capabilities.

Share post

Stay In The Loop! Subscribe to Our Newsletter.

Get updates straight to your inbox. No spam, just useful content.

Recommended for You

“Engineers are becoming sorcerers” | The future of software development with OpenAI's Sherwin Wu

“Engineers are becoming sorcerers” | The future of software development with OpenAI's Sherwin Wu

Sherwin Wu, head of engineering for OpenAI’s API platform, discusses the radical transformation of software engineering. He shares how 95% of OpenAI engineers use Codex to manage fleets of AI agents, cutting code review times from 15 to 3 minutes. Wu explores the widening productivity gap, the changing role of managers in an AI-first world, and why "models will eat your scaffolding for breakfast", urging developers to build for where AI is going, not where it is today.

Lessons from Building Open Source Libraries

Lessons from Building Open Source Libraries

Thomas Wolf, co-founder of Hugging Face, discusses his journey from physics to AI, the power of open-source models to accelerate innovation, the practical challenges of productionalizing AI demos, and why the biggest opportunities for founders now lie in the application layer on top of powerful foundation models.