|
|
Programming
When you
think of game developers, chances are good you think of a programmer.
No surprise there, since code is the core stuff of games. But long gone
are the days when a single programmer created an entire game, from code
to music and everything between. In fact, no single programmer could write
just the code for today's typical commercial game. Specialization is the
way of this maturing industry, and you'll want to prepare in advance for
your chosen specialty.
Salary Info
Low: $55,000
(programmer with 1-2 years experience)
High: $85,000 (lead programmer/technical director with 6+ years
experience)
Average: $62,500
Highest: $300,000
Programming Sub-Types
Junior Programmer
If you're new to the new to the video game industry, you'll
probably start as a Junior, Entry-Level, or Intern Programmer. To get
a job as an Entry-Level Programmer, you must demonstrate your talent,
ability to code, and motivation to finish projects. A great way to do
this (and perhaps the only way for some companies) is to develop a small
game program on your own. On the job, an Entry-Level Programmer usually
adds in small elements to the game and learns the basic tools and concepts
behind game programming. Beginning with a basis in C++, the junior programmer
is expected to learn one or more of the following: AI principles, basic
graphics programming, 3D math, physics, sound programming, collision systems,
path-finding algorithms and game design theory. This may not be the most
glamorous job, but it is the standard way to get your foot in the door.
3D graphics programming is still the most demanded skill, but AI and physics
are gaining ground.
Lead
Programmer
The Lead Programmer is partially a manager, and partially a programmer.
As Lead Programmer you not only have to write complicated code, but also
have to know how to work on and lead a team, and to act as a liaison between
the Producer and the programming team. You will lead the programming team
in deciding analysis and design issues, what technologies to use (i.e.
using Direct3D vs. OpenGL), and decide what work to give to different
members of the programming team. During the design phase you will lead
the development of the game's technical specification. You must have the
capability to code various parts of the game and help out other members
of the team, and conduct regular code and performance reviews for all
members of the team. You also work closely with the other leads on the
art, design and production teams and helps develop schedules and determine
milestones. The Lead Programmer is often expected to be an expert in one
or more programming specialties such as artificial intelligence, 3D Rendering,
3D animation, physics, multiplayer/networking, or audio. Self-management
and reviewing one's own schedule and the schedule of peers are required,
as is notifying the Producers of any tasks that may be missing or improperly
specified, and evaluates the technical integrity of development process
(e.g., build process, tools, pipelines, source code control, backups,
etc.). The lead programmer is responsible for the overall structure and
implementation of all the code in the game.
Engine/Tools
Programmer
An Engine Programmer helps design and construct the base or the engine
on which the game will run. You write the low-level programming behind
the rendering and functionality of the engine. For most gaming platforms,
an Engine Programmer needs a solid understanding of C/C++, possibly Assembly,
mathematical concepts, graphics, collision detection, object oriented
programming, and database management. Generally, the Engine Programmer
has a very solid understanding of graphics APIs, 3D concepts, physics,
and the ability to implement them into a game. Most Engine Programmers
are experienced and have worked in different roles on teams with published
titles. A Tools Programmer constructs tools to help the artists and game
designers interface with the engine. You write the scripting tools that
allow the designers to specify actions for the computer-controlled characters;
you designs plug-ins for graphics software to help artists integrate textures
and backgrounds into the game; and you create map and level editors for
level designers. A Tools Programmer needs to have a strong understanding
of the game engine, good knowledge of the target systems (PC, or one of
the consoles), good communication skills, and this is extremely important,
though generally underrated: knowledge of user interface design. A Tools
Programmer must design and document your tools to make it possible for
designers and artists to understand and utilize them. The better the tools,
the faster designers and artists can add their creations to the game,
making for a better team and a better product.
Graphics/Special
Effects Programmer
All game programmers are expected to develop domain expertise in graphics
programming, but the Graphics Programmer in particular must master the
full suite of techniques to realize three dimensional objects inside a
two dimensional display. Math expertise (especially linear algebra and
advanced calculus) is a crucial skill for this role. As a Graphics Programmer
you will need to understand the intricacies of skinning (covering) 3D
models, importing files from 3D animation programs, and animation blending.
However, a Graphics programmer must also have the artistic eye to implement
realistic and fascinating particle effects (like fire and electricity),
or at least the ability to work with artists to achieve the desired effect.
Additionally, you must be an optimization wizard in order to figure out
how to get everything displaying in real time at the highest possible
frame rate, with other processes competing for CPU time. The principles
behind graphics programming take a combination of deep mathematical education
and sheer time spent learning the peculiarities of a particular API, so
this position usually requires quite a bit of experience. You can still
pick up proven techniques and enhance them or make them faster. It's mostly
about pre-calculating everything you can and writing tight code for whatever
you can't, while using any multiprocessing available to you. Programmers
interested in this field should check out the demo scene, the unofficial
international community of extreme graphic effects hackers. There is also
a lot of student activity at SIGGRAPH, the yearly computer graphics confab,
which has been paying more attention lately to realtime graphics after
years of almost exclusive focus on pre-rendered work. Graphics is essentially
"solved", the only remaining challenge is real-time.
Audio
Programmer/Engineer
Audio programmers write the software tools and utilities to support sound
and music in games, especially interactive and synthesized sound. Depending
on how the sound and music are implemented in their particular game, an
audio programmer may need a thorough understanding of the MIDI standard,
of audio production/ mixing/recording processes, of real time sound synthesis,
audio compression standards and signal processing, and interactive music
APIs like DirectMusic. This isn't a very common programming specialty
at the moment, but as systems and their games become more sophisticated
and more cinematic in their use of sound and music, the need for audio
specialists will increase. Also, the various consoles (GBA, PS2, GC) all
have different ways to play music and sounds, requiring even further specialization.
Artificial Intelligence
Programmer
An Artificial Intelligence (AI) Programmer gives game entities, and perhaps
the game itself, an appearance of intelligence by writing rules to govern
their behavior. AI is a heavily researched and broad programming topic.
Academically, it branches into the areas of Robotics, Biology and Psychology.
A beginning AI programmer must study basic algorithms for games and concepts
behind AI, such as path finding, patterns, and decision trees. Some more
advanced and experimental AI concepts include Deterministic Automata,
Finite State Machines, Neural Networks, Genetic Algorithms, Fuzzy State
Logic, and A-Life. While it is important to keep up with and understand
these academic AI concepts, a practical AI programmer must also be able
to code and implement actual, non-theoretical game behavior, and keep
it all happening in realtime without a huge processor hit. This may require
a multiplicity or combination of tactics, or even a disregard for the
purer methods in favor of a quick-and-dirty solution. Above all, the AI
programmer needs to know the appropriate method for the task at hand.
It's frequently a job of determining the best way to make things "look"
smart at a minimal processing cost.
Multiplayer
Networking Programmer
Multiplayer Programmers are some of the most in-demand specialists thanks
to the surge in popularity of online games, and the crucial role these
programmers play in creating a popular, profitable game. Multiplayer games
have unique challenges based on a huge set of variables: the power of
the user system, the ever-changing capabilities of the networks, and the
architecture of the game server, the billing system, in-game experience
management, and game security being just a few. Networked games are under
constant siege from a large, technically proficient, and persistent hacker
audience, who can detrimentally affect the average customer's satisfaction
and happiness. Since online games make money based on the amount of time
players spend there, the network programmer is largely responsible for
the long-term success or failure the product, and perhaps the entire company.
Still interested? If you want to become a Multiplayer Networking Programmer,
you must understand these fields thoroughly in addition to the standard
game programming fields: client/server architecture, network security,
basic network protocols (e.g. TCP/IP or UDP), concurrency, multi-threaded
code, synchronization, and network APIs like DirectPlay and Winsock. A
Network Programmer must also have a deep understanding of Database creation,
management, and administration if your company provides the massive multi-player
service on which to play the game.
|