A Game Development Curriculum

Along with every other hacker on the planet, I got into programming because I wanted to write games. It wasn’t long at all, though, before I learned that the greatest game of all is teaching the machine to do your will and get things done. I lost interest in game development pretty quickly and moved on to systems and application programming.

My son J. is almost 16, and he wants to write games too. However, in his case I have reason to believe he’s a lot more serious about the “games” aspect than I ever was. So I’m trying to put together a curriculum with an emphasis on game programming. This is a little tricky, since it’s a sub-field I have little connection to.

Here’s what I have so far, with many thanks to the folks on Twitter who helped me narrow down the list: (Book links include my Amazon affiliate code.)

Learn to Program, by Chris Pine. While I already have him working on Hackety Hack, I honestly hesitated to make Ruby his first language. Ruby is a programmer’s language; it has an enormous amount of syntax and many ways to do something. I worry that, as with C++, it will make learning the basics more difficult because it will be hard to separate the fundamentals from the incidentals.

After thinking about it for a while I came around, though. My reasons:

  1. Ruby is the language I’m most fluent in at the moment. I’ll have no trouble helping him with any roadblocks he might run into.
  2. He’s going to run into OO programming eventually, and I want his first contact to be with a strongly Alan Kay-inspired language. Rather than having to come around to that understanding the long way round, as I did. So no C++, Java, or Python as a first OO language. That pretty much means Smalltalk or Ruby, and of the two Ruby is probably more generally useful these days.
  3. Finally, there are some Ruby game development bindings like Gosu that will let him have some fun even before diving into the more hardcore C/C++ stuff.

I suppose Javascript would fit the bill as well, and has the advantage of being ever-so-accessible inside the nearest browser. That said, for all that there is a beautiful language hidden in it, Javscript has more than it’s share of warts. I think in some ways Javascript might have even more of a fundamentals-obscured-by-incidentals problem than Ruby. Tough call though; I could definitely see starting with Javascript, especially if the student were most interested in programming for the web.

Land of Lisp, by Conrad Barsky. A timely book: it’s our next Ruby Rogues book club book. It’s about Lisp, which I want to give J. early exposure to, for ever so many reasons. And it’s about writing games. Win!

C Primer Plus, by Stephen Prata. For someone interested in web applications I might wait C until much later. But if it’s games you want to build, you simply can’t avoid C. Eventually you’re going to find yourself writing OpenGL or DirectX code. Even if you’re writing it in a higher level language, chances are the API documentation will be for the C/C++ API, so a basic understanding of C is essential.

And anyway, a little C goes a long way towards understanding just what the hell the computer is up to.

Blender Foundations, by Roland Hess. J. is particularly interested in modeling. I don’t know jack squat about 3D modeling, but I know Blender is free, Open Source, and widely used. I suspect I won’t need to give him much guidance in this area beyond giving him the tools he needs to get started.

Some C++ book, TBD. I suspect this will be a necessity for understanding later OpenGL texts and working with various game SDKs. If he does well with the earlier languages I’ll probably give him Accelerated C++; or maybe I’ll just go over the basics with him myself without resorting to a text.

OpenGL SuperBible: this one seems to come reasonably well recommended. And honestly I would love to learn some OpenGL along with him.

That’s what I’ve got so far. Any other suggestions?