/ Game-Dev

Notes on "How to program independent games"

I recently watched the talk that Jonathan Blow (creator of braid) gave at UC Berkley on "How to program independent games". I found it very interesting and I thought it was worth sharing. Below are some of the notes I took as I watched it so I could go back and reference things without re-watching the video.

  • Impulse to optimize are often premature
    • Makes the code harder to use
    • Maybe become irrelevant on newer hardware or systems
    • Takes too much time up front when it doesn't matter yet. You need to be brutally effective and efficient. Don't waste time!
    • Most code is not performance-sensitive
  • Data Structures
    • Binary Tree, Hash Table, Skip List
    • Data Structures are about optimization
    • Using the right data structure is usually bad. Because it is premature optimization.
    • He uses an array of records for almost everything. Because it really doesn't matter.
    • Things you might optimize
      • Seconds per programming execution (speed)
      • bytes per program execution (size/space)
      • Instead optimize - Years of life per program implementation (life) :)
  • Complicated algorithms are not good
  • A generalized system is usually worse than a specific hard-coded one.
    •  Hard to rip out of the code later b/c its hard to know when its not used anymore
    • Requires more documentation and harder to wrap your head around which slows you down
  • Adding new systems is bad! This should be a last resort
  • Deleting code is always better than adding code.
  • Don't over-complicate your code with functions versus just doing inline computations. It adds a node of complication to your code and doesn't add a lot of value.
  • What is a good programmer?
    • Gets things done quickly
    • Gets things done robustly
    • Makes things simple
    • Finishes what he writes (for real)
    • Broad knowledge of advanced ideas and techniques (but only uses them when genuinely helpful)
  • "knowing" vs. deeply, intuitively understanding
    • Its not enough to know these things are true, but you need to practice them as you work. Integrate them as part of your daily practice.

Corey Snyder

Corey Snyder

Senior Front-End Engineer for Aver Inc.. I have independently developed & released multiple video-games. I play Ice Hockey, I race FPV Drones, and I love my Subaru WRX STI.

Read More