“Working out lets you do the things you actually enjoy.”
- Poster at the Gym.

I go to the gym two or three times a week. For about six months now I have been going to the gym to lift free weights, run, or swim (or relax in the hot tub) and I always notice the little inspirational posters they have hung about. I applaud their effort, but I think people hardly ever read them. The other day I saw a simple poster while I was running. It had a person on a track ready to run with the message, “Working out lets you do the things you actually enjoy.”

For some reason, I immediately thought that little nugget deserved some thought.

I like to play Ultimate Frisbee. If you don’t know or happen to be misinformed, Ultimate can be very intense. It is approximately one hour of sprinting with some throwing and catching and sprinkle in some self-destruction as you jump, dive (lay out), or collide to chase that plastic. I have often gone to the gym to improve my game. While I do enjoy going to the gym sometimes, I definitely have my fair share of gym dread when I would rather be doing other things. It is hard to push myself to go to the gym and work on my endurance when I could be playing Demon’s Souls. I can already run long enough, right?

But let’s talk about programming, the obvious direction this metaphor was going.

Sometimes you shirk those tasks you dread. Timmy Terrific will write the low level code to handle our special hardware or Robby Render will implement the occlusion. I will just stick to writing the weapon system. I did it twice before and I know what designers want, how to make it flexible, but also stable. It is all too easy to specialize. There are plenty of systems that go into any game that need a programmer. When you take the same tasks over and over again, you gain specific insight into that system. My question to you, however, is this: Are you actually learning anything new or are you polishing an old technique?

You can polish a turd. After five or six iterations you can create a working, almost bug free implementation of whatever system. Does it take advantage of the latest and greatest technology available? Do you use newer, better fitting design patterns and data structures? Can you extend its functionality to do new and exciting things? Sometimes we can only take our old system so far. Down the road, we may want more than Sound::Play(). We want a thread-safe, cross-fading, dynamic beast of a sound system that we can use to do our innovative new user-controlled sound. We want the ability to pass the sound system our position and rotation and it determines what kind of post-processing to apply to our dynamic sword swinging noises. Have we iterated enough to really let the sound system take flight?

So I say to you this, “Implementing different systems allows you to best implement the ones you actually enjoy.”

Struggle with an entirely new paradigm. Jump headfirst into the server code, far from your comfort zone. Taking on a new challenge forces you to work the gray mass, and hopefully leading to self-improvement. Who knows, maybe that complicated server architecture will make sense to you when you’re through. Perhaps you’ll have an epiphany about how best to reconstruct your newest sound system. No matter what happens, surely you’ll learn a thing or two. You may even find that you enjoy other tasks. Personally, I enjoy anything that gives me a little challenge or allows me to gain some insight. I want to prove that I’m pretty flexible. I want to be a better architect. As games evolve, it is critically important to be flexible. You never know when that middle-ware is going to come out rendering you useless. (Secretly, that’s a pun.)

Don’t stop there, though. Try coding a solution in a different language. I cannot stress how much I have grown as a programmer working on Guess What? in Objective-C and by using C# for tools. I have come back from managed memory land with great insight, and I think that some of those skills apply to C++ as well. Learning tactics for generating less garbage, I can take that and run with it back in our traditional games language. Sometimes you find inspiration in the little things. Sometimes you see a poster about exercise and think code.

Point being: Stimulate your brain. The more interesting, challenging things that you code, the better you get. Always strive to improve and you’ll get better at doing what you love.

  • Share/Bookmark