January 2004

8 HABITS OF HIGHLY EFFECTIVE GAME PROGRAMMERS
by Erik "Wazoo" Yuzwa

Professionally, 2003 year was a milestone year for me for one reason: I finished my first game. After years of calling myself a "game developer" I could finally say that yes, indeed, I have made a game.

Big whoop, right? If you are among those who have yet to get a title under your belt, it is a big whoop. And it is for those of you are very close to finishing that first game that I offer my humble insights to perhaps help move you into the "yes, indeed, I have made a game" category.

The first game is an elusive entity to most, diving and twisting out of range like that annoying (last) TIE fighter eluding your bursts of laser and screwing up your shot percentage in the process. But once completed, it feels even more satisfying than completing that game that's been on your hard drive for ages, or that one level which just refuses to let you pass.

With a kindly nod to Stephen Covey’s Seven Habits Of Highly Effective People, which is a decent read by the way, I present the 8 Habits of Highly Effective Game Programmers. While the following are in no particular order, I believe they do all contribute to the final product, as well as improve the chances of you actually finishing your first (or any) project.

1. Every journey begins with the first step. If you're just starting out and have yet to finish anything, then refuse the urge to make the next killer MMORPG, or FPS, or similar. Rather, start with a well-known clone project, such as Tetris or Asteroids just to get your feet wet with game programming. Even the most seasoned of veterans had to start somewhere, and while they may now look upon their earlier projects with a degree of chagrin as to the programming/design decisions they made, at least decisions were made. Most successful companies and individuals begin small. The key is to begin.

2. Realistic time management. Whether you're a seasoned game veteran or a beginning programmer, we're all constrained by the same unchangeable constant: time. Regardless of whether you have access to a TARDIS or other trans-dimensional vehicle, you must create a schedule timeline for your project. My recommendation is to carry a notebook with you during a typical week or month, jotting down a note or two on what you're actually doing and when. This way you'll be able to sit down and see an average day in your life, and what takes up most of your time. From there, you can then plan a realistic window within which to work on your game. However, once you decide on the target work window, for example, every morning for 2 hours starting at 5am, then stick to the schedule. Take the phone off the hook, set up the VCR, and get someone to tape your brother’s wedding. If you make this work window a regular habit, then you can keep your game work concentrated and focused.

3. Lurk but avoid camping. Everyone needs help programming their game, and obviously nobody is perfect. So, when you hit a wall in your project, don't waste too much time banging your head against it. Rather, use the internet in all its game programming newsgroups glory to try and find a solution to your problem. While you’re on search and lurk patrol, however, make sure you keep focused and concentrated on your specific problem. Don't waste your valuable time contributing to a senseless newsgroup topic -- which is better, OpenGL or Direct3D? You want to keep your work within your targeted time window as focused as possible. If you do end up posting some topics to get help, be sure to be very courteous and polite to those who respond, even if they decide to post flame bait. Not every topic/thread needs to be debated ad-nauseum.

4. If you fail to plan, you plan to fail. Consider this common sports mantra, which can likewise be applied to game programming (or programming in general). Although you might get extremely excited about a new project, take a step back and analyze your idea in detail before you begin to do any programming. There are loads of resources available on the internet for creating a good game design document. Find them. If you find that you have trouble even finishing a design document, then perhaps your idea wasn't quite as good as you thought. This practice can save you countless hours of development time, as once you begin the actual programming of your game, you can quickly speed through any roadblocks that might have stopped you without a design document. By creating an overview document of your game, you'll be able to quickly see which modules you need to create and when. With a finished design document, you will also be better able to gauge your time effectively. Another bonus of a design document is the ability to curb the urge of scope creep. Rather than adding in some new weapons or enemies at the last minute (which ends up destroying any notion of balanced gameplay), stick to the plan.

5. Source control is force control. You've got your detailed design document done, you're halfway through implementing your game, and suddenly a power grid in Ohio fails and the whole of North America is in blackout. By the time you get back to your project, you realize you've lost several modules of code which took you several weeks to create and test. Rather than taking your anger out on Ohio, download and get familiar with a source control system such as CVS. There are more than enough tutorials and beginner books on the subject, so don't be afraid to spend a day or so just getting familiar with checking in/out files and creating branch versions of your project.

6. Follow Stroustrup, then betray him. As you gain more experience developing your own game, you'll begin to see that most of your code is the same throughout every project. Rather than mundanely creating this same code every time, design some objects using C++ which you can easily port from project to project. Keeping your game as modular as possible also creates an environment which promotes module testing. When you create a new object or module, test it thoroughly to weed out any surprises. It's much easier to test out a single module rather than wait to integrate it with your game system. But, bear in mind, all the object-oriented design in the world won't help you if your game just won't work (or only works very slowly). Follow the object-oriented methodology as much as possible, but don't be afraid to bend the rule book during your project development if needed. Some developers get caught up in designing the "perfect hierarchy", but more often than not, those same developers have no finished products using them.

7. Stay the course. Inevitably, there will come a time during the project where you will be sick and tired of what you're working on. You will be sick to death of testing the same AI procedures, or following graphics pipeline code from its introduction into the pipeline all the way out through to your rasterizer to try and figure out why your lighting code works on NVIDIA architecture but not ATI's. It's at these dark times when you will think of starting something new to relieve the boredom, or, in complete frustration, giving up the project altogether. I would urge you to not listen to this inner voice of dissent and doom, but, instead, to rise to the challenge. If you seek your fame and fortune within the world of programming, then nothing shows up better on a resume than completed projects. Stick to your work window timeslot and just keep on plugging away at your project until completion.

8. Establish a dictatorship, then silence your opponents. If your first project is a group effort, then decide who will become the project leader and quell any dissenters. Working in a group can be both a rewarding and disastrous experience. Although that's probably the subject for another article entirely, I will add that smaller teams tend to work best with a dictatorship. If everyone has an equal say, and all decide that they have the better direction for the project, then leave the team as, in the end, you risk accomplishing nothing.

Hopefully these "habits" will help you find that quiet time to sit down and blast through the final walls that are between your current source code and your first game! If you have any feedback or comments, feel free to send them to me at "wazoo AT wazooenterprises DOT com".

Author Bio
After capturing his degree in Computer Science from the University of Calgary, Erik Yuzwa went on to create his own game development company, Wazoo Enterprises Incorporated which he uses as a vehicle for his entertainment productions and interests. He has authored several published game development related articles and also teaches an adult night course on game programming for the PC. Learn more at his website.

GIGnews is a publication of GIGnews.com, Inc.
"Get In the Game" is a registered trademark used with permission.

© 1
999- 2005 GIGnews.com, Inc.
Legal