Breaking Into the Games Industry
What you need to know - a prep checklist
Introduction
This checklist is aimed primarily at people trying to break into the games industry as a games programmer. It assumes you already have a basic knowledge of what programming entails. The purpose of this document isn't to give you all the answers, because the subject matter is far too vast to cover in a single webpage, but to let you know which answers you need to know if you want to be a games programmer.
Please spread the word about this checklist and by all means send me feedback. I can be contacted at davedx@gmail.com. Good luck with your endeavours!
The Checklist
- Know your 3D graphics. This is very imporant. Things like:
- Vectors and matrices - what they are and what they're used for
- What the dot product between two vectors gives you, and what else you can use it for
- The cross product between two vectors
- How to use the above two to avoid costly trigonometric functions as much as possible
- Intersection of lines, planes & volumes
- Frustums, bounding boxes & spheres, culling (inc. backface), space partitioning
- Polygon normals, lighting models (ambient, directional, etc.), shading models (Gouraud, etc.), tristrips, trifans, trilists
- Transforms: translation, scaling, rotation
- Learn at least one 3D graphics API, such as DirectX or OpenGL. OpenGL is a good place to learn the basics, DirectX is highly desirable for industry positions. GL will be a hell of a lot more desirable when the PS3 goes mainstream.
- Know about how audio programming works: streamed music, one shot sounds Vs. stored in memory, compression, bit rates, 3D sound
- Know A.I. concepts and theory: finite state machines, pathfinding, scripting; possibly neural nets, genetic algorithms and so on
- C and C++, the more experience the better. You should probably know all about:
- How to build (compile, link etc) and debug (breakpoints, trace output, asserts, watches) using a C++ IDE
- Inheritance, polymorphism, constructors and destructors
- Variables: initialization (always!), scope, stack Vs. heap, new Vs. malloc, sensible naming
- STL: vector, list, map, string, etc.
- Pointers: pass by pointer Vs. pass by reference, pointer arithmetic, referencing & dereferencing, pointers to pointers
- Good coding style: consistency, informative commenting, well formatted, readable. Probably only applies if you send demo code, but well worth following regardless
- Algorithms like quicksort, A*. Data structures and containers like linked lists, trees, hash tables.
- Ability to work with small amounts of system resources (especially memory) is extremely useful for console development, especially handhelds.
- Know what the following mean (at the very least), and try to learn, apply and gain experience of them (pick a few) as much as possible:
- Particles/point sprites/billboards
- Skeletal animation, matrix stacks, bones and hierarchies; human animated Vs. inverse (or forward) kinematics; "rag doll" physics
- Bump mapping, normal mapping, light mapping, UV animation, dual pass textures
- Alpha channel, blending modes
- Vertex and pixel shading
- Source control: what it is, how it works, why we use it
- A bit of software engineering: object oriented design, etc.
- The creative side: it helps if you know a little about how 3D Studio Max, Maya, Photoshop and other asset dev aps work, and are capable of seeing things from an artist's point of view sometimes
- Join a team! Learn to work with other devs. Make a mod (Counterstrike began as an indie mod for HL) or a demo. Stick to something you're good at that'll show off your skills; choose something you can finish - don't try to make a complete game. Working with other devs will teach you valuable career skills. Enter contests, for example Sumea challenges, the Brew contest, etc.
- General CV/Resume & interview techniques: hit the big job websites and recruitment agencies, most offer a wealth of valuable information. In particular, always write to-the-point cover letters, tailor your CV & CL to each application. Send examples of your best work if possible - make sure any game demos are easy to install, run and uninstall and test them out on different platforms. Think carefully about the format and presentation of your portfolio/demo and make sure it quickly makes a good impression.
- When you turn up to an interview, be presentable, articulate and demonstrate you have smarts (ability to learn, adapt, common sense & intelligence). Social skills and the ability to communicate well are essential, as no modern games are built without a considerable number of people working together as a functioning team. Be confident, and smile!
Resources
Other Sites of Interest
Article written and maintained by Dave Clayton. I'm a relative newcomer to the industry, and thought I'd try to give something back.
Many thanks to R. Appleton for feedback and suggestions.
© 2005, All Rights Reserved.