Layout Image
  • Writing
    • Andy Gavin: Author
    • About my Novels & Writing
    • All Writing Posts
    • The Darkening Dream
      • Buy the Book Online
      • Sample Chapters
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Untimed
      • Buy Untimed Online
      • Book Trailer
      • Sample Chapters
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Scrivener – Writer’s Word Processor
    • iPad for Writers
    • Naughty Dark Contest
  • Books
    • Book Review Index
    • Favorite Fantasy Novels
    • Andy Gavin: Author
    • The Darkening Dream
      • Buy the Book Online
      • Sample Chapters
      • Short Story: Harvard Divinity
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Untimed
      • About the Book
      • Buy Untimed Online
      • Book Trailer
      • Sample Chapters
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Naughty Dark Contest
  • Games
    • My Video Game Career
    • Post Archive by Series
    • All Games Posts Inline
    • Making Crash Bandicoot
    • Crash 15th Anniversary Memories
    • World of Warcraft Endgames
    • Getting a Job Designing Video Games
    • Getting a Job Programming Video Games
    • Naughty Dark Contest
  • Movies
    • Movie Review Index
  • Television
    • TV Review Index
    • Buffy the Vampire Slayer
    • A Game of Thrones
  • Food
    • Food Review Index
    • Foodie Club
    • Hedonists
    • LA Sushi Index
    • Eating Italy
    • Eating Croatia
    • Ultimate Pizza
    • ThanksGavin
    • Margarita Mix
    • Foodie Photography
  • Other
    • All Posts, Magazine Style
    • Archive of all Posts
    • Fiction
    • Technology
    • History
    • Anything Else
  • Gallery
  • Bio
  • About
    • About me
    • About my Writing
    • About my Video Games
    • Ask Me Anything
  • Contact

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

Aug28

…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]

If you liked this post, follow me at:

My novels: The Darkening Dream and Untimed
or the
video game post depot
or win Crash & Jak giveaways!

Latest hot post: WOW Endgame Analysis!

Related posts:

  1. How do I get a job designing video games?
  2. Making Crash Bandicoot – part 3
  3. Making Crash Bandicoot – part 5
  4. Making Crash Bandicoot – GOOL – part 9
  5. Crash Bandicoot – Teaching an Old Dog New Bits – part 2
By: agavin
Comments (41)
Posted in: Games, Technology
Tagged as: Andy Gavin, Artificial intelligence, Character class, Console Platforms, Crash Bandicoot, Digital signal processor, Game design, Game engine, Game programmer, Game programming, Games, History, Jak and Daxter, Programming, pt_career_advice, Video game
  • JB

    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

    • http://mascherato.wordpress.com agavin

      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

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

    • Will

      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!

      • http://mascherato.wordpress.com agavin

        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).

  • http://twitter.com/GabrielIslas4 Gabriel Islas (@GabrielIslas4)

    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

    • http://mascherato.wordpress.com agavin

      Intentional :-) My first programming language was basic (1980).

      • http://twitter.com/GabrielIslas4 Gabriel Islas (@GabrielIslas4)

        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.

    • http://mascherato.wordpress.com agavin

      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).

      • http://twitter.com/GabrielIslas4 Gabriel Islas (@GabrielIslas4)

        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?

      • http://mascherato.wordpress.com agavin

        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.

  • Abhishek Asthana

    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.

    • http://mascherato.wordpress.com agavin

      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 :-) .

  • Matteo Mazzarini

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

    • http://mascherato.wordpress.com agavin

      Oh yes. Most aren’t programmers. I cover this a little here.

  • Pingback: So you want to be a video game programmer? – part 1 – specs « All … | All about Games

  • Jon W

    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.

    • http://mascherato.wordpress.com agavin

      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!

      • http://twitter.com/jetsetlemming Gabe W (@jetsetlemming)

        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).

      • http://mascherato.wordpress.com agavin

        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).

      • http://segment6.blogspot.com/ ⬡

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

      • http://mascherato.wordpress.com agavin

        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!

  • http://www.facebook.com/arcynum Chris Hamilton

    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 :(

    • http://mascherato.wordpress.com agavin

      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.

  • http://linearfix.wordpress.com Linear Fix

    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)

    • http://mascherato.wordpress.com agavin

      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.

  • Pingback: So you want to be a video game programmer? – part 1 – Why « All Things Andy Gavin

  • http://www.facebook.com/profile.php?id=100002597191086 Jake Robert

    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.

    • http://mascherato.wordpress.com agavin

      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.

  • Pingback: Les artistes jouent avec l’argent, le programme monétaire 2011, Palais des Commerces. Un nouveau lieu de vie et des savoirs au coeur deParis « Maï Savoir Is Riche

  • Pingback: So you want to be a video game programmer? – part 3 – Getting Started « All Things Andy Gavin

  • Pingback: So you want to be a video game programmer? – part 4 – School « All Things Andy Gavin

  • Pingback: Video Game Godfather – 75% Payout – Hot Niche Low Competition | License Android iPhone Online Flash SWF PC MAC Games

  • Pingback: So you want to be a video game programmer? – part 5 – The Method « All Things Andy Gavin

  • http://retrorpger.wordpress.com retrorpger

    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.

    • http://mascherato.wordpress.com agavin

      It’s a little late, but if you want to GO FOR IT! I took up novel writing at 39. If you work hard at something, who’s to stop you.

  • http://retrorpger.wordpress.com retrorpger

    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.

  • Pingback: So you want to be a video game programmer? – part 3 – Getting Started :: All Things Andy Gavin

  • Pingback: So you want to be a video game programmer? – part 5 – The Method :: All Things Andy Gavin

  • Sammy

    I have a question,

    I have excellent math and just generally anything fixed problem solving, but I have no creativity whatsoever.
    Would it be possible with no current experience at the age of 21 to pursue a career in game development?

    I’m not exactly sure what I want to do yet, I’m good with computers…and I love games a lot more than your average person, so I could see myself enjoying creating them, just I don’t believe I have the creativity programming requires to invent and visualize.

    Any advice would mean a lot to me right now.

    • http://all-things-andy-gavin.com Andy Gavin

      There is a steady demand for tool and graphics programmers in games that require less artistic type creativity. You still need some coding creativity to be a good programmer in any field.

Andy Gavin

1

Co-creator of Crash Bandicoot and author of The Darkening Dream and Untimed

Watch the Trailer or

Buy it Online!

Buy it Online!

24 of 100 tickets!

Find Andy at:

Follow Me on Pinterest

Facebook Subscribe:

Follow on Twitter:

Follow @asgavin

More on games:

  • All Game Posts
  • Making Crash Bandicoot
  • Crash 15th Anniversary
  • WOW Endgames
  • Designing Video Games
  • Programming Video Games

Categories

  • Contests (7)
  • Fiction (307)
    • Books (97)
    • Movies (56)
    • Television (71)
    • Writing (105)
      • Darkening Dream (59)
      • Untimed (32)
  • Food (369)
  • Games (72)
  • History (10)
  • Technology (21)
  • Uncategorized (14)

Recent Posts

  • More Crash for Charity
  • PS2 Memory Lane
  • The Last of Us - Red Band
  • Crash Valentines
  • The Last of Us - Zombie Time
  • WOW Endgames - Mists of Pandaria
  • Crash Live Action Tribute
  • Game Shop Crash
  • WOW Endgames - Cataclysm
  • World of Warcraft 8th Anniversary

Popular Posts

  • The Hobbit Trailer
  • Making Crash Bandicoot - part 1
  • Home
  • Game of Thrones - Season 2 - First Look
  • Diablo 3 - Beta Preview
  • Crash goes to Japan - part 1
  • WOW Endgames - Vanilla
  • WOW Endgames - Mists of Pandaria
  • Sons of Anarchy

Recent Comments

Archives

  • May 2013 (11)
  • April 2013 (14)
  • March 2013 (15)
  • February 2013 (14)
  • January 2013 (13)
  • December 2012 (14)
  • November 2012 (16)
  • October 2012 (13)
  • September 2012 (14)
  • August 2012 (16)
  • July 2012 (12)
  • June 2012 (16)
  • May 2012 (21)
  • April 2012 (18)
  • March 2012 (20)
  • February 2012 (23)
  • January 2012 (31)
  • December 2011 (35)
  • November 2011 (33)
  • October 2011 (32)
  • September 2011 (29)
  • August 2011 (35)
  • July 2011 (33)
  • June 2011 (25)
  • May 2011 (31)
  • April 2011 (30)
  • March 2011 (34)
  • February 2011 (31)
  • January 2011 (33)
  • December 2010 (33)
  • November 2010 (39)
  • October 2010 (26)
All Things Andy Gavin
Copyright © 2013 All Rights Reserved
Programmed by Andy Gavin