Gamecrash: learn games programming in one week!

A few months ago, I was discussing new opportunities over Skype with Jean-Paul Boodhoo from Develop with Passion® fame. He came up with an intriguing concept I wouldn’t have thought of: why not offer developers from different backgrounds a hyper-intensive bootcamp on games development? A one-week bootcamp at that? And have developers who have no background in games programming become actual game developers n one week?

See, JP has been teaching greatly successful bootcamps on advanced development techniques for years. Over 1,000 students across the globe can attest to the efficiency of such a course – feedback often ranges from “amazing” to “life-changing”. The concept is great: you set everything up at a hotel or similar venue, and decide to dedicate EVERYTHING during 5 days to transmitting the relevant knowledge. Days last 12 hours or more. The idea is that people should leave everything aside, and put all their effort into advancing to the next level in their software development skills and careers. With a passionate and experienced instructor, and focused and motivated students, it can truly be an amazing learning experience.

JP suggested that with my games background, it could be an interesting idea to offer such a course, to teach games development to developers from other fields. With JP’s experience in setting up such courses successfully, and my knowledge of games development, we could provide something incredibly valuable that hasn’t be available before. This meshed up nicely with a lifelong interest of mine, which is teaching. Back in the day, I taught an assembly-language programming course online, and then turned it into a book, actually, the book I would have liked to have when I was learning assembly language myself. Then, I’ve taught courses several times, and starting last year, I have been directing a Master’s degree in games development in a new high-end university in Madrid.

There were several principles neither JP nor I were willing to drop:

  • We want to get students to master fundamentals. We don’t want them to learn any tool are method that is useful today, or for limited-scope projects, and have their skills be useless when technology advances or they tackle larger projects.
  • We want to have students create actual games at the course. Even if fundamentals are about understanding the theory and the basics, we want them to actually apply the skills, and especially in games, you want to see an actual game using those principles. Nothing like teaching the geometry of how entities collide, and then writing an example that shows balls realistically bouncing around the screen with sound effects!
  • We want the games students create to be a realistic first step towards writing games that can be published. We don’t want to work with a language which is great for learning (say, Python), and then, have very few options of turning what they write into an actual product. Be it free or commercial, players will need to download and install the games on the platforms they usually play on. So Python, no matter how much we love it (and I really love it!), is not an option.

We wanted to create a course that would provide incredible value in fundamentals of games development, and practical tools to create games that can actually be published. We wanted to set students on their path of writing games. All this, for students with no previous experience in games. And what’s more, all in one week! Definitely a tall order. Could we find a way? Such goals required choosing very carefully the set of concepts that are included, limiting the scope so that we can cover things well, but not limiting it so much that we don’t obtain the course goals. Some aspects were key to a successful course:

  • Game type: definitely, the games covered have to be 2D games. It will already take quite some time to cover the math/geometry/graphics tools to write rich 2D games – there is just not enough time to cover 3D. The good thing is that all the game fundamentals are the same, and students will be able to apply them to 3D games when they take up 3D math/geometry/graphics. And, also, even today, many of the most popular games are 2D, so it’s clear that 2D is a rich enough medium for great games!
  • Programming language: it took a while to reach a good solution here. Very nice and very high-level languages such as Python are not a viable medium to write a complete, redistributable game. For C# or Javascript, there are options to use specific frameworks, but then you are completely tied to that framework. HTML5 is eternally almost there. Also, if you want to write games for most platforms, and even work your way towards a career in games development, most real work is done in C/C++. But this is a problem: we couldn’t count on students knowing C/C++, as they may come from a background like Java, C#, VB, PHP… And it’s simply impossible to teach C++ classes, inheritance, etc… in a short amount of time. A first strange thought made me think of using C, as a way of simplifying things. But even if we go for C, this involves pointers, and it’s not easy for people to pick up pointers. I don’t want students wrapping their head around pointers for a week, I want them wrapping their head around games! What could we do? I spent many hours pondering this, and came up with an option that sounded radical and weird, but which seemed to solve the problem: we could use plain old C, and get rid of the biggest obstacle, pointers, by simply not using them. We would need to use arrays for most things, and code can be a bit more verbose because of this, but C without pointers is simple enough to use and understand for developers of any background. And not only that, using pure C, you can write games for Windows, Mac, iOS, Android, and even for consoles! Students can complement this in the future by learning more advanced C and C++, and this is much easier to take up on their own once they are actually writing games. So, the answer was clear, the course was going to use the weird but wonderful C without pointers.
  • Platform: desktop platforms are the most immediate platforms to work on for a first stint in games programming. Both Mac OS X and Windows are great environments for developing games, and not only that, you can use C for both of them. Together with OpenGL for graphics and OpenAL for audio, you have a quite nice common platform. A bit of system-dependent glue-code is necessary to set up OpenGL and read input events on each platform, but this is about 100-200 lines of code which can be easily covered. Thus: Mac OS X and Windows are our chosen targets. Good thing: we can have some students working on Macbooks and other students working on Windows laptops, and apart from a a couple of hours at the beginning for each of them to write their OpenGL set-up code, all the rest of the course is 100% identical!

One important comment with regards to the platform: mobile platforms are probably the most attractive platform to develop games for right now, but setting everything up for iOS or Android development on the course, for people without previous experience, would not be feasible in the time available. I took the following approach: I’ve made sure that you can easily jump to mobile development after the course. Games for both iOS and Android can be written in the type of C we are learning. Once you set up the development environment, and learn how to adapt from standard OpenGL to the mobile dialect (OpenGL ES), you will be writing games for mobile in no time.

With these three big decisions (2D games, written in C without pointers, running on Windows+Mac OS X), it seemed like the main axes of the course were ready. I had to prepare the content and all example code to make sure things fit and make sense. For the past few weeks, I have been preparing the course contents, detailing the core concepts to focus on, and writing all these tiny, little, beautiful samples and mini-games, using only C without pointers, and making sure everything can be grasped by the intended audience in the limited time available.  It’s been a pleasure to work on the code, writing in C without pointers has turned out to be surprisingly a pleasant experience, and the samples look good, too! It’s good to know that during the course, students themselves will be able to write these (or variations thereof). Here are a few cool screenshots:

Newtonian physics, collisions,  sound, and character jumping around

Newtonian physics, collisions, sound, and cute character jumping around!

Fire particle effects for fun and profit

Fire particle effects for fun and profit

Hard-to-control spaceship clearing a minefield

Hard-to-control spaceship clearing a minefield

Software development in general is still a young and informal discipline. Unlike architecture, where it’s mostly well known what you have to do to plan and build a building that won’t top over, in software development we are still figuring what the key elements are to build a solid system. I hesitate to call it “software engineering” since, well, frankly, I don’t think it can still be called “engineering” most of the time, more than cooking can be called “meal engineering”.

Thus, the way knowledge is communicated is over informal media: web sites, blogs, work experience, and good habits communicated from one generation to the next. This is even more so for games than for other types of software. Even today, if someone asks me what they should study to become a good games developer, I would have a hard time choosing what materials to recommend.

But what remains true is that many developers, no matter if they work on web projects, internal company IT applications, or mobile applications, would LOVE to develop and create their own games. Games are a really exciting medium: as an entertainment just for playing them, as a commercial product that can be either a direct revenue generator or  an industry where to build a career, and as a creative medium to enjoy delving in.

Games development has remained a difficult area. It can be quite hard to get started, with a myriad options of languages, engines, APIs and platforms to choose from, some math to learn too which can be intimidating if you don’t know where to start, and many other difficulties inherent in a medium that covers creativity, graphics, physics, music, sound, and so many other disciplines. But if you knew exactly what road to go, it’s attainable, and not necessarily too time-consuming.

All in all: I think there are many developers out there who have the inclination, the motivation, and the background to tackle games programming, but who haven’t really done it because the way to get started is not easy or clear. And I feel we can really help them jump-start their games-development career.

I think we have found a very interesting area here, a type of project that can be very interesting and satisfying for us and for students, and that Gamecrash courses will be very successful, turning scores of students into game developers with this ambitious but realistic plan. I’m really eager for the day I’ll be posting an article here announcing a game released by one of the students. And I’d say that is just a few months away!

We are holding the first edition of the course in Austin, Texas, from February 18 to February 22, just two weeks from now. Several students have already registered, but there still are seats available. You can sign up here. If you want to develop your own games, and you have a non-games background as a developer, I can’t think of a faster or better way to do it. You’ll save a ton of time exploring the wrong ways to do things, and get started straight with the approach that works. If you’d like to attend online, virtually, we are thinking on offering it too at a discounted pricing – let us know. Get in touch with us if you’re interested in attending, online or virtually, or if there is any other areas where you’d like to get our input!

More info:


PS: Graphics courtesy of the following artists: Tyrian and other graphics by Daniel Cook (http://www.lostgarden.com/), Fuzed graphics by Marc Russell (http://www.spicypixel.net), Zombie sprites by Clint Bellanger (http://opengameart.org/content/zombie-sprites). Thanks guys!