Report Comment to a ModeratorOur Moderators review all comments for abusive and offensive language, and ensure comments are from Verified Users only.Please report a comment only if you feel it requires our urgent attention.I understand, report it.Cancel

So You Want To Be A Graphics Programmer?

Practical advice from Keith Judge on how to make an impression as a graphics programmer

Each week we feature the best content from #AltDevBlogADay, a blog site on which developers write daily about things that they find interesting. This week it's the turn of Keith Judge, veteran programmer at UK studios including Rage, Warthog, Creative Assembly and Lionhead.

Recently, a university undergraduate asked me on Twitter for advice on becoming a graphics programmer within the games industry. I wrote a fairly detailed email response and thought the information was good enough to make an article for AltDevBlogADay. This is all my personal opinion of course.

If you're at university, you should research whether there's a programme to do a summer or year long internship at a games studio. There was nothing like that when I was at the University of Liverpool '97-'00 (or I wasn't aware of it), but I've seen people come through that kind of programme with much greater practical game development knowledge and it goes a long way towards persuading an employer to take you on. EA, Lionhead and other large companies tend to run this sort of programme so look on their job pages too. Beware that sometimes companies don't respond to intern applications for various reasons (team is deep in crunch, budget spent elsewhere, etc) and places are extremely limited.

Your best bet is to make a graphics demo, either on your own or with a small group of people. You learn more by doing than by just reading. Pick a modern graphics technique that interests you and implement it. Even better, do more than one. This is also great training for motivating yourself to get a project finished which is often the hardest part of games development, for all disciplines. Make sure you're prepared to talk in detail about the choices you made, performance (in milliseconds, not frames per second!), quality, alternatives and trade offs in a job interview.

When I was in university I did a straight computer science course – there were barely any games courses available back then, but I still think that employers still value computer science graduates above games graduates as there's a perception that you learn a greater range of software engineering skills. This could be a misconception though, as games courses are a lot better than they used to be, but you may have to fight your corner in an interview and prove you know your stuff (and not just the curriculum you were taught).

In my experience, Visual Studio is pretty much universal as a code IDE (except for Apple, Linux, Android and Nintendo games), though you can of course use your favourite editor if you really want to, as long as you know Visual Studio. There is a free Express edition available from Microsoft (http://www.microsoft.com/express/Windows/), so it won't cost you any money to learn. The PS3 is a little different as there is a separate hardware specific debugger, but you should be able to learn that on the job.

You should be familiar with a source control system. Perforce (www.perforce.com) is a good choice as a lot of game studios use it and it's free for single users. Try to learn it on a project with other people as merging, branching and integration are good skills to have. With all source control systems, similar concepts apply so it's essential knowledge to have. Shockingly, my university course never mentioned source control and I was naive enough to believe that people just shared code over the network or on floppy disks.

As you're unlikely to have access to devkits at home or in university, you'll most likely be learning your skills on PC. In what may come as a surprise from someone with a decade's game development experience, I don't know much OpenGL as there's never been a pressing need for me to learn it. Most PC games use DirectX, though if you learn DirectX 11, make sure you also learn DirectX 9 as it's still current for Xbox 360 and many PC games still use it to support the dwindling, but still large Windows XP market. DirectX 10 is completely superseded by DirectX 11, so it is not worth learning (you can write DirectX 11 games for DirectX 10 hardware, and even DirectX 9 hardware).

It's also definitely worth learning a graphical debugger. PIX for Windows isn't as good as the Xbox 360 version, but there are fantastic free alternatives (Intel GPA - http://software.intel.com/en-us/articles/intel-gpa/, Nvidia Parallel Nsight - http://developer.nvidia.com/nvidia-parallel-nsight). These tools are not just for performance tuning on the GPU – they're also for debugging your draw calls, working out why something doesn't draw, why it looks wrong, and so on. You can also learn about how a GPU works as you can see all the renderstates, shaders, meshes, textures, etc for any draw call in a frame and really understand what the GPU is actually doing with the data you give it.

Other Duties

As a graphics coder you'll probably have to do some tools work too, working with mesh compilers, animation compilers, plugins for Maya/3DS Max or in-house editors for the artists to use. Remember that your job is to provide technology to support the artists in their daily work, so it needs to be presented in a friendly manner. If you give your art team a tool that lets them tweak some coefficients of a fancy rendering algorithm and they have no idea what the numbers mean, they probably won't use it. Also, technical artists are your friends – they're the best people to talk about requirements for artists and to work out the best workflow for the content creators.

It's also good to learn general performance and optimisation techniques as this often falls to the graphics/engine team to do. You probably won't have to write any (or very little) raw assembler, but you ought to be familiar with what the C/C++ compiler is doing to your code, how to spot problems and what to do about them. For example, one of the biggest performance problem will be L2 cache misses (you lose hundreds of cycles per miss on all modern hardware), so learn techniques to reduce them (almost always changing the data, not the code is the fix).

Online Learning Resources

Online resources are a goldmine, and there's much better stuff out there than there was when I was at university as a lot of companies publish papers on their techniques which are pretty useful stuff. A few examples...

Make sure you read the relevant presentations from GDC (very useful) and SIGGRAPH (slightly less useful as a lot of it is for non-realtime graphics, but useful as a crystal ball for future techniques).

My last handy tip is that if you live near a big dev studio, find out which pub they go drinking at after work and join in on a Friday night. You'll learn a lot just chatting with developers. You can also join Twitter and talk to many games developers there who are willing to share their experience.

Games Jobs

8 Comments

Bloody good advice here. I'm often contacted by students and grads who just don't know where to start, so I'll certainly be making this article required reading for the next batch of students knocking on my door. I've always maintained that a Computer Science degree is far more highly regarded and than the myriad of games development courses springing up, so it's good to see that opinion mirrored from an actual guy on the ground.

Perhaps a series of similar articles with the thoughts and opinions of professionals from some other areas of games development would be a good permanent section on GI.biz? We're often bemoaning the ever widening skills gap, and I think similar articles would go a long way to giving those looking to join the industry some extra focus. I don't doubt that all the games development courses will provide similar information when you're actually on them, but sharing the 'tricks of the trade' of seasoned developers can't very well hurt!

Great article. I'm still against the idea of pushing students to do straight up Computer Science degrees though.

If universities are doing things right, a games course should inevitably end up better for a life in the industry than a more generic course; if it doesn't, it's that institution's fault, not the 'games dev' label's. Should that mean taking the bulk of a CS degree and adding some game specific elements, so be it. I just feel that if a university isn't adapting its games courses to be the best choice, then the chances are that it's not worth doing computer science at that particular institution either.

What you say is true, but I do think that going for a straight CS degree offers better fall back prospects in the (reasonably likely) event that a student doesn't find a job in the industry, or (much more likely still) changes their mind about working in the industry and wants to move to more mainstream development.

As such, I think recommending a CS course over a games dev one is entirely reasonable advice. Snobbish attitudes to game development degrees are also still quite prevalent, and while you can argue that this is fair or unfair, from the point of view of giving the most information to prospective students to let them make the most informed choice, it's correct to point this out.

Totally agree with you Nick. Having completed a game programming degree about the time I realised I didn't want to be a games programmer, I have some experience of what you say :)

It's really just the snobbish attitudes you mention that I'm against - I'm not devaluing computer science as a degree by any means. We tend to end up with a healthy split between games courses, general multimedia/web dev and straight up computer science by the time our students leave for HE.

As a CS graduate - I think more than if its a CS degree or a Games degree is the quality of the course. From my experience looking for a job in the games industry before joining the Royal Navy, the main point I was always asked when phoned by a company was "How much C++ do you know?". My course taught several courses in building compilers, mobile phone programming and advanced networking - all of which i was told was brilliant for a job, but because it was taught in Java, C and a myriad of other languages (Haskell, Prolog etc) the lack of C++ was the biggest block.

Slightly surprised me as before I went to university i was told that Game Devs looked for transferable skills, but I suppose right now they need to be selective and are also able to be with the amount of graduates kicking about.

Being a non-graphics CS guy myself (but knowing a little bit about it), I'd definitely say that the CS degree will prepare you just fine: most everything talked about in this article is stuff that any good CS guy should be able to learn mostly on his own. And having that extra background will not only give you a fallback outside of games (the financial systems I've worked on on remarkably similar in certain respects), but will make you a more useful member of the games teams as well.

That said, as Gregory points out there tends to be an overly heavy emphasis on experience with specific technologies when it comes to hiring, especially on the part of less technical people (HR and manager types). I don't really know what to do about that; it's more to do with nervousness and inability to judge technical skills on their part than anything else. Probably the best thing you can do is make sure you've done a bunch of work in the specific technology they're looking for, offer non-trivial code samples, and be prepared to ace any tough technical interviews they give you.