So you want to be a video game programmer? – part 2 – Specs

…CONTINUED FROM PART 1.

There are a couple of broad categories of programmers working on video game teams. If programmer is your player class, then the following types are your spec. Programmers are all warlocks and mages so instead of “demonology” or “frost” you can choose from below. (NOTE: if you don’t get this joke, you don’t play enough video games) This is the real world however, and many programmers dual (or even triple) spec — i.e. they handle multiple specialties.

1. Gameplay programmer. Programs enemies, characters, interfaces, gameplay setups etc. Probably also does things like AI and collision detection. These programmers are sometimes a little less hardcore technical than some of the other types, but this is the sub-field where the most “art” and experience are often required. Learning how to make a character’s control feel good is not something you can read about in Knuth. It takes the right kind of creative personality and a lot of trial and error. In a lot of ways, this is the heart and soul of game programming, the spec that truly differentiates us from the more engineering programming disciplines.

2. Tools programmer. Works on the extensive tools pipeline that all games have. This is the only branch of game programming where you don’t absolutely have to know and breathe video games inside and out, and it’s a little closer to mainstream applications programming. That being said, life at most video game companies is so intense, you better love them. Tools programmers tend to be very good at practical algorithms, data processing, etc. For some reason, perhaps because it’s more “behind the scenes” this spec is often viewed as less glamourous and there are fewer programmers who want to go into it.

3. Sound programmer. A very specific niche. Here you have to not only know how to program well, but you have to care about the esoteric field of sound. You need the kind of ear that can tell if there is a one sample glitch in some audio loop, and you need to care if the 3D audio spatialization is off or the sound field isn’t balanced. This is often a fairly low level area as audio programming is often done on DSPs.

4. Collision programmer. This is a really specific spec, and often overlaps with Graphics because it involves totally intense amounts of math. You better have taken BC calculus in tenth grade and thought “diffy-q” was the coolest class ever if you want to go into this.

5. Network programmer. In this era of multiplayer and networked gaming there’s a lot of networking going on. And programming across the internet is a bit of a specialty of it’s own. In general, video game programming takes any sub-field of programming to it’s most extreme, pushing the bleeding limits, and networking is no exception. Games often use hairy UDP and peer-to-peer custom protocols where every last bit counts and the slightest packet loss can make for a terrible game experience. If this is your thing, you better know every last nuance of the TCP/IP protocol and be able to read raw packet dumps.

6. Graphics programmer. Some guys really dig graphics and are phenomenal at math. If you don’t shit 4×4 matrices and talk to your mom about shaders, don’t bother. This sub-specialty is often very low-level as graphics programming often involves a lot of optimization. It may involve coming up with a cool new way of environment mapping, some method of packing more vertices through the pipeline, or better smoothing of the quaternions in the character joints (HINT: involves imaginary math — and if you don’t know that that means the square-root of -1 then this sub-field might not be for you).

7. Engine programmer. For some reason, most wannabe video game programmers hold this up as their goal. They want to have created the latest and greatest video game engine with the coolest graphics. Superstars like Tim Sweeney,John Carmack, and even myself are usually seen as falling in this category. The truth is that superstars do all kinds of programming, and are often distinguished by the fact that we are willing and able to handle any sub-type and tie it all together (see lead below). In my mind engine programmers are jacks-of-all-trades, good at building systems and gluing them together. The top guys often blend with Graphics and Lead below. There’s also tons of stuff like compression (nothing uses compression like games, we’d often have 8-10 different custom compressors in a game), multi-threading, load systems (you think seamless loading like in Jak & Daxter is easy?), process management, etc.

8. Lead programmer. People also dream of being the lead. All the great programmers are/were. This is the hardest spec, and no one ever starts out in it. You need to be able to do any of the other specs, or at least judge what approach is best. You need to be able to roll up your sleeves and dive in and fix crap anywhere in the program. You need to live without sleep (4 hours a night every day for years baby!). You need to be able to squint at the screen and guess where the bug is in others people’s code. You need to know how to glue systems together. You need to be able and willing to trim memory footprints and optimize (no one else wants to do it). In fact, you have to know the entire program, even if it is 5-10 million lines of code, and you have to do all the crap that no one else wants to do. Plus, you often have to manage a bevy of other personalities and waste lots and lots of time in meetings. Still want the glory? Being lead is all about responsibility!

CONTINUED with Part 3: Getting Started

_

Parts of this series are: [Why, The Specs, Getting Started, School, Method]

Subscribe to the blog (on the right), or follow me at:

Andy:  or blog

Or more posts on video gaming here.

And what I’m up to now here.

37 comments on “So you want to be a video game programmer? – part 2 – Specs

  1. JB says:

    This is probably an oddly specific comment, but do you have any insight into how you guys *were* doing the loading in the Jak games? Specifically Jak 1, as that one seems to have far less “obvious” loads, whereas Jak 2 and 3 were fairly shameless about the air-locks. (Not that they were bad!)

    Were you doing like, a distance thing, where what was streamed in at any given time was based on Jak’s position, were you using some sort of trigger to remove and insert the areas? I remember that at a few points, you could see across the game world. Were these faked in any way or were you guys legitimately showing that level of distance using some crazy level-of-detail mesh magic?

    Impressive stuff for the time either way. Heh, sorry, even if I’m not a programmer per se, I have what I would consider a decent understanding of how systems ‘may’ be put together, so this kind of thing fascinates me.

    Thanks for the articles,
    Jim

    • agavin says:

      I wrote all the loading and memory management for both Crash and J&D. I even have several patents on seamless loading. I need to write some longer articles on it, but the short story for J&D 1 was that the engine was designed to run multiple levels at once (in J&D 1 it was 2) and it could load one of them in the background while playing the other one. We had a carefully designed jigsaw puzzle so that you never saw three levels at once.

      • JB says:

        Cool, thanks for the details. If you do ever get to write an article on that, I look forward to it!

    • Will says:

      Until Mr. Gavin gets around to posting his article on seamless loading, I think I might be able to steer you vaguely in the right direction. Please bear in mind that I haven’t actually programmed any games yet, and what I’m about to say is mostly conjecture.

      From what I’ve seen of the Jak and Daxter games, there’s two “forms” of level loading: Player character confined in small room loading and roaming the world loading. The latter is the one you are probably interested in. Both types are used in Jak II and III. In Jak II for instance, when you are roaming Haven, parts of the city are loaded and unloaded as needed. There’s a trigger mechanism like you suggested.(Probably collision detection in action. Invisible “wall” that you can pass through or something.) When Jak goes past a certain point(or through the “wall”), there’s a chance they he’ll head into another part of the city, so that sector is loaded into memory.

      I think I can say with about 90% certainty that some form of this happens. In Jak II, thanks to Dark Jak Giant and some optimization of the invisible walls, you can avoid these invisible walls and cause a section of the city to not load. I imagine that this is the very reason DJG was removed from Jak III. (And a related issue with Zoomers lead to their speed being toned down. Again, this is conjecture.)
      So, if you are interested in that, it might not be a bad idea to check out collision detection. I think that will solve your problems in levels that don’t have wide open areas. As for the vast Desserts of Jak III, well… I guess it depends on how detailed you want to get and how much memory you have. You might have to get creative and/or do a lot of optimization.
      ————————

      In any case, keep up the good work Andy! Looking forward to your posts. Good luck with your novels! Hope you get published soon!

      • agavin says:

        Yes, we had invisible load walls. And yes, big dark jak could occasionally jump over them. We had to put the walls far enough apart that you couldn’t “beat the load” which is fairly unpredictable too because DVD drives vary a bit in speed and lots of other stuff is going on. I can’t remember, but we were always trying to make sure there wasn’t any way to go too fast. Ideally, though, you wouldn’t get around the wall (that’s a bug) but even if you beat the load and hit it the game would freeze until the load caught up. This wasn’t pleasant, but was better than not loading. We tried to make that happen only in extraordinary circumstances (it’s a fallback defense).

  2. I’m not sure if that little “goto” pun was intentional or not, but I liked it. Haha. Thanks for this again. Will be reading these as often as possible.

    Your friend on Twitter,
    Gabriel Islas

    • agavin says:

      Intentional 🙂 My first programming language was basic (1980).

      • Ha, nice! It feels strange to say that my first programming experience was with ActionScript 2.0 and 3.0. Then again, I’m glad I learned it first because of the similarities it has with C++. It sure as heck made learning that language easier anyway, because of the syntax and same basic paradigms.

    • agavin says:

      I’m writing parts of my followup now and one of these is “don’t start with stuff like C/C++” instead use an interpreted language (like Actionscript).

      • Wow, I guess I’m on the right track then. I just wish I was a better artist. My flash games (and other games) are probably unimpressive because I’ve done everything myself. Still proud to say I have a portfolio at my age, but hopefully while I’m in Full Sail I’ll get to go through very collaborative projects. Which is something I’m sure employers want to hear. May not be as impressive as M.I.T, but we both grew up in different times. I never imagined having this conversation with you in my youth playing your games, even if it is on the web. Lol. I feel both privileged and nervous. I hope after Full Sail to make the move to the company you co-founded. I mean, the worst they can do is tell me “no”, right?

      • agavin says:

        I plan on a bunch more posts in this series. So hopefully they shed some useful light on things. I have one half written on my “process” for learning new programming skills.

  3. Abhishek Asthana says:

    No offense, and I liked your article, but I couldn’t help noticing while reading that vritually all the links were to Wikipedia. I’m not questioning your knowledge, but a post not pointing to any other articles, but just merely wikipedia links to “AI” or “Game Programmer” just seems lightly-researched.

    • agavin says:

      I don’t spend much time searching for better links (and I’m sure they exist). I write a post a day, and they generally take 1-2 hours to write and proof. If I researched heavily they might take 4-5 hours. This blog is a background job for me. I reserve my hardcore research for my foreground job (which right now is my writing). Time (and creative energy) is finite :-).

  4. Matteo Mazzarini says:

    Is it possible to be a game designer without being a programmer (in the technical meaning of this world)?

  5. […] original here: So you want to be a video game programmer? – part 1 – specs « All … Categories: Uncategorized Tags: all-video, good-new, hiring-programmers, job-designing […]

  6. Jon W says:

    Game programmer salaries are not competetive — unless you compare to, say, working in the IT department of some government.
    Financial and business software developers will generally make significantly more than game programmers, especially with a bit of experience. This is why the games industry often is dedscribed as a never ending stream of fresh-faced cannon fodder, repeating the same mistakes over and over. Most people with some real-life smarts ends up getting out of games.

    • agavin says:

      This is/was not true at Naughty Dog. We believed in having world class programmers and paid for them. I was often astounded at how little programmers in fields like banking were paid. I was often astounded that they called themselves programers and couldn’t answer questions like “what is 2 to the power of 8.” Fail!

      • Is it ok if you have to think about that one for a second? Because I totally know how to get the answer, but I’d have to pause for a second to mentally go “2, 4, 8, 16, 32… oh, 256”

        Also I’d recommend C# for anyone getting started (and not for the XNA connection like most people would in a conversation about game programming). Visual Studio is one of the nicest tools on earth, it’s free (Express version), and it does tons and tons to help smooth over the speedbumps of learning, in combination with MSDN for research (and the guidance of people who know what they’re doing, of course).

      • agavin says:

        In a future post in this series I’ll get into the environment. I havn’t used C# myself but I have heard it’s pretty good — despite my inherent anti-microsoft stance (I’m an Apple/unix fan-boy).

      • says:

        I dunno, I’d do that for less common ones but you better have at least 8, 16 and 32 memorized…

      • agavin says:

        2^8 is a byte. So you have to wonder what kind of programmer hasn’t dealt with numbers in a byte enough to not know that. Although I’ve been noticing a real decline in recent years in bits and bytes skills. Younger programmers don’t seem to deal with them nearly as much and assembly programming is a dying art. But if you don’t know what instructions your CPU has you can’t understand the relative costs of operations!

  7. There is no work going in Australia right now in the gaming industry.

    We have lost nearly all of the major studios in the country over the last 24 months, in addition to the fact that games programming in Australia is paid horribly. I have a “Bachelor of Interactive Entertainment (Major in Games Programming)” and I don’t even bother looking for work in the games industry right now.

    However, your article is great and covers many of the areas which games programmers can associate with. Just wish I could work on games in Australia 😦

    • agavin says:

      I have no knowledge on the situation of the industry in Australia. For sure, here in America, even given the recession, good computer programmers are in huge demand. More even in web 2.0 than in games, but in general. There are also a lot of options to do programming remote now too with Skype and other communication tools — but these are usually a little less lucrative. Still there is big international demand for good programmers.

  8. Linear Fix says:

    Thanks for sharing, I didn’t know that there were so many different programming jobs separated into small parts for a game (that is unless you are a new indie dev)

    • agavin says:

      If you’re on a small team, you just wear multiple hats: Like the lead is the engine & graphics & other systems programmers all rolled into one and there is another guy who is tools and another guy who is gameplay. The same tasks need to be done, there just aren’t enough people to fully specialize.

  9. Jake Robert says:

    I noticed the sprites from Crash Bandicoot the huge adventure
    i need to get that for my Gameboy Micro still

    Oh, well this is where it all gets intimidating, i have a sharp math skill but if your going into complex formulas as a requirement for programming it would probably make things difficult for many people, i am not good with complex math the formulas become forgotten as soon as i hear them.

    • agavin says:

      Some programmer specialties are more math oriented than others. But certainly you need to be able to handle normal matrix stuff, practical 3D geometry and trigonometry to do most runtime stuff in a 3D game. A pure tools or network programmer might be able to get away with less.

  10. […] Party Zombies Must Die!” video game features Fox News stars – The Desk of BrianSo you want to be a video game programmer? – part 2 – Specs /**/ /**/ /* 0) { top.location.replace(document.location); } /*]]>*/ /**/ […]

  11. retrorpger says:

    Just started reading your so you wanna be a gamerblog and i must say, pretty damn good man, got a question though, do you think at 33 yrs old its a bit late to start out at video game programming? you said youve done it 30 yrs already lol.

  12. retrorpger says:

    great blog on game programing, do you think its too late to take up programming at 33yrs old? its something i always wanted to do but was always afraid to tackle it.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s