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:
- 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.
- 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.
- 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.
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?
I interviewed André LaMothe about the topic when I was back at a University contemplating developing a program, and he suggests that a strong math/physics component be a part of any program. Most schools don’t want to hear that…cause they want to set up game programs for driving student registration rather than preparing them properly (imagine that).
If the goal is developing a solid game program, I would suggest including some basic Physics, Algebra and Geometry courses. Game Physics by Eberly might be a good start text-wise.
Good point. In this case I’m probably going to save it for later; judging by how he feels about math right now, I think it will be better if he “pulls” the knowledge as he needs to understand building a physics engine rather than having it pushed on him.
Incidentally, the book you mentioned lead me to this book: http://www.amazon.com/Essential-Mathematics-Interactive-Applications-Second/dp/0123742978/ref=pd_sim_b_3 which seems like a pretty nifty-looking primer on the necessary math.
And some exposure to linear spaces via matrix operations.
I’m glad that “I wanna make games” story is that popular. I was carrying feelings recently and considering the shift I made.
Now as for games, how about after he gets the basics of programming, you throw him at the iphone. Since anything else will be hard to market, and usually has much higher requirement to compete. Iphone has many popular short simple games, and with good game, can easily market himself, and make money, you abuse him, and retire early.
PS: I agree totally about the physics and math suggestion here by Mr. Scott. There are some nice videos on Lynda and Oreilly to get started in gaming as well. I’d suggest you introduce him to gasification. See the book from oreilly as well
I think it’d be cool to include some DirectX as well. It’s been a very long time for me, but I have some faint memories of DirectX being much more pleasant to work with. Like I said, it’s been a LONG time so things may have changed a lot since then.
On a related note, it might be fun to look into XNA http://create.msdn.com/en-US/home/membership … I don’t know how the PS3 realm works, but for the Xbox, you can make your own games and deploy to play on your console. There is more to it if you actually want to publish to others, but for me it was so thrilling to play my own work on a console. It’s like listening to your own band on CD versus in the rehearsal room — such an awesome experience.
Last comment I promise
+1 to the mechanical physics suggestion. (And you probably need the math to understand it fully)
I would encourage you to use a few exercises from Accelerated C++. The C++ programming style from that book is a lot nicer than the style taught in most books, and it encourages the reader to use the standard libraries.
Yeah, I have strong feelings about how to learn C++ and I want to teach it as it’s own thing rather than as an extension of C.
Obligatory vote for K&R
Obligatory “no”. Fantastic book but not for someone new to programming.
The O’Reilly “AI For Game Developers” book is actually very approachable if you have a basic grasp of C++, and covers a lot of useful approaches to pathfinding, decision-making, etc., that are essential for games with computer-controlled characters. (Alternately, the series of articles on “Amit’s Game Programming Info” cover a lot of the same material for free: http://www-cs-students.stanford.edu/~amitp/gameprog.html)
I really enjoyed reading Core Techniques and Algorithms in Game Programming, more so for the concepts than the code. http://www.amazon.com/Core-Techniques-Algorithms-Game-Programming/dp/0131020099/
Going off on a tangent slightly, a curriculum for game devs should also urge getting involved in the indie game dev scene. Whether locally with like-minded friends, an IGDA chapter, or global events such as Ludum Dare, the cross-pollination of ideas and general support is useful.
“Essential Mathematics…” does look pretty good. Wishlisted!
This book is fantastic for teaching data structures within the context of games, http://www.amazon.com/Structures-Programmers-Premier-Press-Development/dp/1931841942/ref=sr_1_1?ie=UTF8&qid=1327608973&sr=8-1
It’s not on sale anymore, but I’m sure you’ll be able to grab it from a library or second-hand or some such.
The easiest ways to learn game-specific math I’ve found is the following:
Andre LaMothe – Chapter 8 of “Tricks of the Windows Game Programming Gurus” and Part II of “Tricks of the 3D Game Programming Gurus”
The code is in C, but it is explained clearly with quality diagrams. It’s still heavy math.
I’d second the OpenGL Superbible once you get some basic experience with the game loop and want to dive into graphics.
XNA along with C# is a great way to get your feet wet with game programming. I know, I know…it will require Windows, but you can get up and running very quickly!
I think that if you really want to develop Game at present days, you don’t need to concentrate from the beginning on understanding low level fundamentals , rendering and C++. Today we have a lot of ready to use Game Engines which will help to concentrate on Game Logic itself, and start building actual Game but not a Game Engine and tools. I would recommend to have a look on Unity3D http://unity3d.com/ which can help to understand all modern concepts of Game Development as well as will allow to use Java Script or C# or Boo for writing game logic. And it’s cross platform as well.
Ruby is a fantastic language to learn OO programming and games development techniques, it’s fairly low barrier to entry and is powerful enough to make some pretty cool games. It would also be a good chance to introduce TDD into the game dev process, something I wish I had been taught in University.
I would certainly look at C++ after that and learn about the graphics pipeline, advanced AI, maths and physics (really important).
Programming languages, Mathematics algorithms, 3D libraries… but we all are forgetting the most important thing: what is a game? what make a game to be remarkable? which is the architecture of a game? what make it to be fun?… targeted to this matter: http://artofgamedesign.com very recommendable.
Books and languages are important. So also is a personal “game plan” for the new programmer – actually a first priority given what’s being attempted here.
There’s a risk of the new programmer becoming frustrated and discouraged with the time and effort needed to become a game developer – perhaps permanently discourage.
Pretty much any tough learning curve can be overcome by anyone . Generally speaking, that doesn’t happen – many people don’t make the “grade” when faced with a steep learning curve – why? – IMO opinion it’s the failure to develop personal endurance skills as a first requirement.
Who am I to disagree with Larry Wall- but I will 🙂 . Personal endurance lives off many things but three of its more important needs are patience, a willingness to fail and try try again and a type of humility that is both accepting of some level of failure and that also helps one avoid the pitfalls and jackpots hubris can get you into and that can be discouraging to the point of giving up.
I think Larry Wall’s recommendation for programmers to practise “laziness, impatience and hubris” has some truth to it but in a different context – maybe when being creative – but usually not when implementing.
Here’s an example of a “game plan” for someone who wishes to be a game developer that will require good amounts of patience and endurance.
First become proficient at programming small utilities (both C and Ruby – prototype it in Ruby then implement in C e.g. todo list), next become proficient at developing text based apps (again Ruby and C – e.g. a small text editor), next model some simple physics in 2D then 3D and so on and so on – incrementally, patiently with endurance. It ain’t easy and neither is being a good game developer. They’re a special breed.
There are times to just dive in and quickly get acclimatized to the cold water – there are times that can be a mistake. A good teacher is able to teach when it’s appropriate to just go ahead and dive in and get the thing done versus convincingly showing the student that for a specific case (developing games??) the longer and tougher road that requires good levels of endurance is the only way forward.
Is endurance an innate skill? – maybe – but I believe it can be learned when their is both a motivating “end game” and a good “small successes” feedback loop to encourage the student to move on to the next level of the learning curve.
A Theory of Fun for Game Design by Ralph Koster
It is about what makes games fun.
The company I work for makes games professionally. We started being asked to work on standards for game development curriculum and we found that there is a strong need for more advanced game development material, especially for career and technical academies. We were getting asked so much for help that we decided to build a game development curriculum. You can check it out at http://www.gginteractive.com.
Currently, I think the most important part of a game development curriculum is that it both dives deep into topics and is easy for teachers. There’s so much information to cover, its unrealistic to think that teachers have enough time to become professional game developers.