In early August I got a new job, a fact I’ve mentioned several times on this blog. What I talked much about is how my game development career (short as it was) has affected my ability to be successful at said job. I learned a lot doing game development; a lot about game development, but just as much about software development in general. I learned so much, in fact, that I’ve come to believe that creating a game should be a part of every software developer’s education.
It articulates programming concepts very well.
Many programming concepts are difficult to explain in the context of business software. Sure, they make sense in a general way, but those concepts can be far easier to understand when you see how they work using objects that you can physically see. Game development gives a physical nature to a lot of these ethereal ideas in a way that no other type of development can.
Everything, from for-next loops and if-then-else statements up through object oriented design concepts like inheritance and polymorphism. Everything that you try to do in a game has an effect either on the screen or through your speakers. Let me give you an example…
If you’ve done much object oriented programming, you’re probably familiar with inheritance. It’s a pretty simple concept to understand, but it’s one that can often get lost in your learning because it’s usefulness isn’t always apparent in simple programs. In games though, inheritance is incredibly powerful. Inheritance allows you to create a single base class for something like an enemy, and then sub-class that into different families of enemies, and further into the individual enemy types themselves. But, you can still go back, make an alteration to the base class, and have that change automatically cascade down through all of your sub-classes. This makes it incredibly easy to make fundamental changes to large portions of your game without doing massive amounts of work. In fact, inheritance was so useful in my game development odyssey that it’s a concept I’ve used heavily in every project I’ve worked on since then.
Game development encourages performance tuning.
Games are performance driven in ways that typical business applications simply aren’t. Unless you’re working for Google, managing billions of website hits per day, you’re almost certainly not that concerned with application performance. In fact, if you’re a professional developer, how often do you even really consider performance, when making design decisions? My guess would be, not very often. That doesn’t make you a bad programmer, either. It’s simply the way of the world.
The average business application simply doesn’t require the type of performance that even simple games can demand. That’s ok if you never have to write a large-scale app. If that day should come though, are you prepared to develop an application for a performance intensive environment, or will your code crumble under the weight of any serious demands.
Game development helps teach about performance in the sense that games scale like enterprise apps, without the enterprise overhead. You can’t exactly test your website’s ability to handle a million hits if you can’t get a million hits. What you can do is create a game where you fight a single enemy, and then see what happens when you fight one hundred, or one thousand enemies. Does that bring your system to a crawl? If so, are there things you can do in your code to improve that performance? If you can figure out how to performance-tweak your game, you can apply the same concepts to enterprise-level software design to great success.
Games are sexy.
Let’s be honest, there’s nothing cool about business software. There’s nothing inherently intriguing about writing business software. Here’s the funny thing though; once you start writing software of any kind, it all starts to become interesting. If you can get into programming by writing a game, you can certainly stay in the field doing business development.
Games are a great way to visualize your code in a way that feels cool, and by doing so, you can help yourself to stay motivated to keep learning. Games also represent something fun, and beautiful. They’re easy to imagine, and magical to create. Game development accentuates all the best, most satisfying things about programming because the product created is something that everyone can appreciate.
Code is code.
Finally, writing a game isn’t really that much different than writing business software. Even if you’re a 3D graphics programmer, your skills still translate to many fields outside of game development. For virtually every other aspect of game programming, this is even more true. Games are just a subset of software and as such, all but the most game-centric concepts are applicable to a great many areas.
Coding a game can help keep a new programmer engaged, and an old programmer excited. It can help give us a reason to strive to learn new concepts and paradigms. It helps us remember why code is cool. Games are beautiful pieces of artwork that take an immense amount of technical skill to create. They represent the most artistic part of computing, and the part that most often speaks the loudest to us.