After the excellent response to the programmer’s personality test I wrote I thought I’d look a little more into the beast that is a games programmer. Rather than giving a list of questions to be answered I thought I’d give a list of the qualities I’ve seen in good game programmers over the years. Some of these qualities extend to general software development and others to people in general. As usual feel free to leave comments or email me here with any thoughts.
1. Make many mistakes, but only once
I thought I’d start with the controversial one. On the surface it would seem better to say that good programmers shouldn’t make mistakes at all, however I believe this is not the case. I first heard this idea used at flight school with the Australian Air Force where my instructor told me that fighter pilots could make as many mistakes as they liked so long as they didn’t make the same one twice. He used the analogy of a large bag which holds all the mistakes you’ll make in your life. He said to make sure every time you make a mistake you take it out of the bag, sloppy people then just put it back in and wait till they make it again. Successful people take it out, analyse it, and make sure they completely understand where it came from and what they can do to stop it in the future. This is some of the best advice I’ve received over the years, and those that follow it often turn out to be better programmers. Everyone’s deleted a file from the build machine by mistake or incorrectly integrated a file before checking it in removing previous work done to it. The important thing is that we stop and realise what we’ve done wrong and make sure we understand the problem, discuss it with others if need be, and file it away to make sure we remember it in the future. This is particularly important for game programmers as we have short schedules, complex work and an unforgiving customer base. In a business app a mistake may simply mean a debit or credit isn’t bolded correctly, but for us it may mean Fatal1ty (Johnatahn Wendel) may not go quite high enough with a rocket jump and lose a match. Or more likely, 40% of your gamers will encounter the problem tell all their friends your game sucks because rocket jumps are inconsistent and you’ll lose a lot of sales. Either way we’re only human, so making mistakes is fine, so long as we learn and only make them once.
2. Actually Play games
I was both disgusted and disturbed when I finally made it into the industry and found out just how many game developers just don’t play games. They may play the game their actually making but once work’s over they’ll all shuffle off home, watch TV or do some other inane activity that doesn’t involve gaming. I often find the best game developers are those that go by the motto ‘We makes games we’d want to play’. Even if your game development house doesn’t believe in something like this, perhaps you do, and I implore you to do so. How can people that don’t even play games come close to this level of devotion? I don’t believe they can. Also fitting in with this quality is playing a wide range of games. Part of my dislike for World of Warcraft is the fact it’s stagnating the gaming-life of a lot of players. I’m all for people being passionate about a game, but I think gamers, and especially game programmers need to keep an eye on all the different games that are out to make sure they don’t get too focused on a particular game or style, homogenising the games they make.
3. Be fluent in the language they’re using
This is kind of a no-brainer, but notice I used the word ‘fluent’. I believe there are a number of levels of skill a programmer can have in a particular language and with software development practices in general. To paraphrase, being fluent means you can think about any concept that’s in general use in games today and given enough time you can create a program that will perform that task. The created program should naturally be maintainable, robust, correct and optimized. When I began game programming I wasn’t fluent in C++ and this showed. It took me a number of years of coding in my spare time and then full-time for a while before I reached that level and it has completely changed the way I work. Reaching this goal doesn’t take countless years, but it does take dedication and passion (but that’s for point 5).
4. Ready to learns from others
Being fluent in a language doesn’t mean you’re a perfect programmer, in fact I think there are quite a few levels above ‘fluent’. These levels are for another article; however the important point is that chances are you don’t know everything there is about game development, nor about software development in general. I’ll be the first to admit there’s far more I don’t know than I do, so the important thing here is that you are willing to learn from others. Even if you are the technical director of a company, or John Carmack himself, I believe that you will be able to learn something from nearly any other competent programmer out there. The great thing about being human is that we are all shaped by our own lives, so no two people are the same. Even if you’re the greatest AI programmer known to man and you could make Skynet if you just quit work and put your mind to it, a student fresh out of school will have a different experience with programming and may show you a technique that he’s just come up with for making sure your robots don’t turn on mankind and destroy the world. I said at the beginning of this article that some of these qualities apply to life in general, and this is one of them. I believe that if you go through life listening to people and learning from them, and their mistakes, you’ll come out a better person at the other end.
5. Passionate about software development
I touched on this in #3 as I think it’s the most important of the qualities. You really have to be passionate if you want to be able to become fluent in both the language your games are written in and in general game and software development practices. If you take game programming as just a job then you’re not going to be able to stick it out for the long term and make awesome games. I’ve seen people who are excellent C coders who want to make games as it’s a bit of a challenge to them. They write some awesome code, but it just seems to be missing something, that intangible ‘it’ that makes certain games awesome and others just boring. From what I’ve seen, for most people this passion is born out of a passion for playing games. As I was growing up I lived and breathed games, reading every magazine I could and visiting the hyperactive website every day to find out any news or secrets I could. As I became older I started having ideas for how to make the games I was playing better and ideas for entirely new games. I think passion is the single biggest factor that helps me to move forward and try and become the best games developer I can. This isn’t something you can learn or read books to attain, it’s just something that you either have, or you don’t. So whether you’re in the games industry or hoping to make it one day, please remember that passion for the games you play and make is your strongest quality. Make sure you nurture it by continuing to play and love games and never shut out the little part of your brain that is constantly coming up with ways to better the industry and drive it forward into the future.