Software 1.0 vs 2.0

Andrew Karpathy's framework distinguishes between traditional programming and AI-based approaches, highlighting a fundamental shift in how software is created.

Software 1.0 vs Software 2.0

  • Software 1.0 is traditional programming with deterministic, predictable outcomes

    • Uses programming languages, data structures, and algorithms
    • Engineers write explicit for loops and recursion
    • Everything is controlled and deterministic
    • Engineers know exactly what the software can and cannot do
    • PM gives tickets with clear specifications
  • Software 2.0 is based on neural networks and probabilistic approaches

    • Still uses foundations of computer science but makes the process stochastic
    • Relies on training models with data instead of writing explicit code
    • Output resembles what a traditional program might do
    • Has "magical emergent properties" not explicitly programmed
    • Engineers don't have to write every if-else branch or think of every corner case

Key differences in approach

  • Software 1.0 is fully understood by its creators

    • Developers know exactly what it can and cannot do
    • Functionality is explicitly defined and limited to what was programmed
  • Software 2.0 contains unexpected capabilities

    • Even creators don't fully know what's possible
    • Users and creators "discover the latent space" of possibilities
    • Each new model release reveals unexpected capabilities

Applications and examples

  • Image generation: Creating diagrams with ChatGPT 4.0 instead of traditional diagramming tools
  • V Zero: AI platform that generates full web applications from natural language prompts
  • Game development: Using AI to create video games with minimal coding
  • Sound creation: Using models like Eleven Labs to generate audio effects

Practical implementations

  • Combining Software 1.0 and 2.0 approaches for optimal results
  • Creating platforms that leverage AI capabilities while providing structure
  • Using AI to handle creative aspects while traditional code handles infrastructure
  • Building frameworks that work well with LLMs to enable broader creation