A game programmer is a software engineer who primarily develops
computer or video games
or related software (such as game development tools).
Game programming has many specialized disciplines; practitioners of
any may regard themselves as "game programmers". A game programmer should not be confused with a game designer; many designers are also programmers, but not all are, and it is rare for one person to
serve both roles in modern professional games.
History
In the early days of video games (circa 1970s to mid-1980s), a game programmer also took on the job of a designer
and artist. This was generally because the abilities of early
computers were so limited that having specialized personnel for each function was
unnecessary. Game concepts were generally light and games were only meant to be played for a few minutes at a time, but more
importantly art content and variations in gameplay were constrained by computers' limited power.
Later, as specialized arcade hardware
and home systems became more powerful, game developers could develop
deeper storylines and could include such features as physics, advanced artificial intelligence and digital sound. Contemporary games
usually boast 3D graphics and full motion video designed by professional graphic artists.
The ability and desire to develop such in-depth games necessitated a division of labor. Thus, game programming
became a separate discipline from game design and art production. Nowadays, most games are of such complexity that teams of
programmers, each specializing in certain aspects of game programming, are needed to develop a professional game. Some games,
such as the puzzle game Bejewelled, are simple enough to require just one fulltime programmer, but games such as this are the
exception instead of the norm for commercial games.
Disciplines
A contemporary computer game may include advanced physics, artificial intelligence, 3D graphics, digitized sound, a custom
musical score, complex strategy and may use several input devices (such as mice, keyboards, gamepads and joysticks) and may be playable against other
people via the Internet or over a LAN. Each
aspect of the game can consume all of one programmer's time and, in many cases, several programmers. Some programmers may
specialize in one area of game programming, but many are familiar
with several aspects. The number of programmers needed for each feature depends somewhat on programmers' skills, but mostly are
dictated by the type of game being developed.
Game physics programmer
A game's physics programmer is dedicated to developing the physics a game will employ. Typically, a game will only simulate a
few aspects of real-world physics. For example, a space game may have use for simulated gravity, but would not have use for
simulating water viscosity.
Since processing cycles are always at a premium, physics programmers may employ "shortcuts" that are computationally
inexpensive, but look and act "good enough" for the game in question. Sometimes, a specific subset of situations is specified and
the physical outcome of such situations are stored in a record of some sort and are never computed at runtime at all.
Some physics programmers may even delve into the difficult tasks of inverse kinematics and other motions attributed to game characters, but increasingly these motions are
assigned via motion capture libraries so as not to overload the
CPU with complex calculations.
For a role-playing game such as Might and Magic, only one physics programmer may be needed. For a complex
combat game such as Battlefield 1942 or Halo, teams of several physics programmers may be required.
See also: dynamical simulation
Artificial intelligence programmer
An AI programmer develops the logic the game uses to carry out a large number of actions. It has recently evolved into a
specialized discipline; these tasks used to be implemented by programmers who specialized in other areas. An AI programmer may
program pathfinding, strategy and
enemy tactic systems. This is one of the most challenging aspects of game programming and its sophistication is developing
rapidly. According to Game Developer Magazine, many
contemporary games dedicate sixty percent of their programming staff to AI.
Game AI programming should not be confused with academic AI programming and research: game programming has little use for developments in this area
of study. Although both areas do borrow from each other from time to time, they are usually considered distinct disciplines.
Some games, such as strategy games like Civilization III or role-playing games such as Neverwinter Nights, use AI heavily, while others, such as puzzle games, use it sparingly or not at all. Many game developers have created entire languages that can be used to program their own AI for games via
scripts. These languages are
typically less technical than the language used to implement the game, and will often be used by the game or level designers to
implement the world of the game. Many studios also make their games' scripting available to players, and it is often used
extensively by third party mod developers.
Graphics programmer
Historically, this title usually belonged to a programmer who developed specialized blitter algorithms and clever optimizations for 2D graphics. Today, however, it is almost exclusively applied to programmers who specialize in
developing and modifying complex 3D graphic renderers. Some 2D graphics skills have just recently become useful again, though,
for developing games for the new generation of cell phones and PDAs.
A 3D graphics programmer must have a firm grasp on advanced mathematical concepts such as vector and matrix math, quaternions and linear
algebra.
Programmers specializing in this area of game development can demand high wages and are usually a scarce commodity. Their
skills can be used for computer games as well as video game
consoles such as the PlayStation 2, GameCube and Xbox.
A 3D graphics programmer may also specialize in a subset of 3D graphics programming, such as pixel shaders or vertex shaders.
Sound programmer
Not always a separate discipline, sound programming has been a mainstay of game programming since the days of Pong. Most games make use of audio; many have a full musical score.
Many games use advanced techniques such as 3D positional sound,
making audio programming a non-trivial matter. With these games, one or two programmers may dedicate all their time to building
and refining the game's sound engine, and sound programmers may be trained or have a formal background in digital signal processing.
Scripting tools are often created and/or maintained by sound programmers for use by sound designers. These tools allow designers to associate sounds with characters, actions, objects and
events while also assigning music or atmospheric sounds for game environments (levels or areas) and setting environmental
variables such as reverberation.
Gameplay programmer
Though all programmers add to the content and experience that a game provides, a gameplay programmer focuses more on a game's
strategy and the "feel" of a game. This is usually not a separate discipline, as what this programmer does usually differs from
game to game, and they will inevitably be involved with more specialised areas of the game's development such as graphics or
sound.
This programmer may implement strategy tables, tweak input code, or adjust other factors that alter the game. Many of these
aspects may be altered by programmers who specialize in these areas, however (for example, strategy tables may be implemented by
AI programmers). Since this programmer is something of a "jack of all trades," he is usually paid the least out of all the
programming staff and is usually easily replaced. In many cases, the workload of this programmer can be picked up by other
members of the programming team, though the work he does is usually appreciated.
Scripter
In early computer games, gameplay programmers would write code to create all the content in the game — if the player was
supposed to shoot a particular monster, and a red key was supposed to appear along with some text on the screen, then this
functionality was all written in C or assembly language by a gameplay programmer.
These days, large game projects have a team of scripters to implement this sort of game content. Scripters usually are also
game designers, and it is easier to find and employ a qualified game designer who can be taught a script language, as opposed to the difficulty of finding a qualified game designer who has mastered
C++ on the target platform.
UI programmer
This programmer specializes in programming user interfaces (UIs) for
games. Though some games have custom user interfaces, this programmer is more likely to develop a library that can be used across multiple projects. Most UIs look
2D, though contemporary UIs usually use the same 3D technology as the rest of the game so some knowledge of 3D math and systems
is helpful for this role. Advanced UI systems may allow scripting and special effects, such as transparency, animation or
particle effects for the controls.
Input programmer
Input programming, while not a job title, or even a full-time position on a particular game project, is still an important
task. This programmer writes the code specifying how input devices such as a keyboard, mouse or joystick affect the game. These routines are typically developed early in development
and are continually tweaked during development. Normally, one programmer doesn't need to dedicate his entire development time to
developing these systems. A first person shooter such as
Quake may need a very complex and low latency input system, while the needs of a
turn-based strategy game such as Heroes of Might and
Magic are much lower.
Network programmer
This programmer writes code that allows players to compete against each other (or play together) connected via a LAN or the Internet (or in rarer cases, directly
connected via modem). Programmers implementing this feature of a game can spend all their
time on this one task. Network programming is one of the most challenging game programming roles. These programmers have to deal
with network latency, packet compression, and dropped or interrupted connections.
Though this type of programming can consume the entire development process, network programming is, unfortunately, often put off
until the last few months of development, adding additional difficulties to this role.
Game tools programmer
One of the less recognized member of the development team, the tools programmer can make game development heaven or unbearably
difficult. Tools are used on almost every game for tasks such as scripting, importing or converting art, modifying behaviors or
building levels. Some tools, such as an IDE, 3D graphics modeling software, and Photoshop are off-the-shelf, but many tools are specific to the game and are custom programmed.
It is the tools programmer's job to write the tools that handle these game-specific tasks. Some tools will be included with
the game, but most will not. Most tools evolve with the game and can easily consume all of several programmers' time. Well
written and fairly bug-free tools make everyone's development tasks easier. Poorly written or poorly documented ones can
seriously hamper development and jeopardize the project.
Lead game programmer
This position is similar to lead programmers in more mainstream
contexts. This programmer is ultimately in charge of all programming for the game. It is their job to make sure the various
submodules of the game are being implemented properly and to keep track of development from a programming standpoint. A person in
this role usually transitions from other aspects of game programming to this role after several years of experience. Despite the
title, this person usually has less time for writing code than other programmers on the project as they are required to attend
meetings and interface with the client or other leads on the game (such as the Lead Artist and Producer). However, the lead programmer is still expected to program at least some of the time and is
also expected to be knowledgeable in most technical areas of the game. There is often considerable common ground in the role of
technical director and lead programmer, such that the jobs are often covered by one person.
Platforms
Most game programmers specialize on one platform or another. For example, a programmer can specialize on the Xbox, GameCube, PlayStation 2 or the PC. Other platforms include
cell phones, the Apple
Macintosh, handhelds such as the Palm OS or the Game Boy. So, in addition to
specializing in one game programming discipline, a programmer may also specialize in development on a certain platform.
Therefore, one game programmer's title might be "PlayStation 2 3D Graphics Programmer." Some disciplines, such as AI, are
transferable to various platforms and needn't be tailored to one system or another. Also, general game development principles
such as 3D graphics programming concepts, sound engineering and user interface design are naturally transferable between
platforms.
Experience needed
Game programmers often have a bachelor's degree in computer
science, just like other kinds of programmers. Programmers with mathematics degrees are often found writing some of the most difficult systems in games that require a strong
physics and math background, such as the game's physics system, camera system, and graphics.
Notably, there are many game programmers with no formal education in the subject, having started out as hobbyists and doing a
great deal of programming on their own, for fun, and eventually succeeding because of their aptitude and homegrown experience,
and because of their love of programming. Most job solicitations for game programmers specify a computer science degree "or
equivalent experience" for this reason.
Increasingly, universities are starting to offer courses and degrees in game
programming. These degrees may be valuable and should offer a well-rounded education that includes all the fundamentals of
software engineering.
However, there are also some 2-year colleges that offer game development degrees,
including "game programming." These "colleges" are notorious for churning out graduates who know little more than how to use a
level editor. While not useless information, to be sure, these graduates
are taught little in the way of actual programming.
Compensation
Salaries for game programmers vary from company to company and country to country. In general, however, pay for game
programming is generally about the same for comparable jobs in the business sector. This is despite the fact that game
programming is some of the most difficult of any type and usually requires longer hours than mainstream programming. However,
most game programmers feel it is worth the sacrifice for the fun and casual working environments.
Generally, lead programmers are the most well compensated, though some 3D graphics programmers may challenge or surpass their
salaries.
A controversial subject in the game industry recently has been the issue of unpaid overtime, particularly as highlighted by an
anonymous blog entry by ea_spouse[1] (http://www.livejournal.com/users/ea_spouse/274.html), who described some of the darker
aspects of working in the industry: at some companies, "crunch time" (a period where programmers will often work around the clock
to finish a project) has become the expected norm through the whole development cycle. This is not true of all companies however,
and many game studios provide excellent working environments and conditions.
Job security
Though sales of video games rival other forms of entertainment such as movies, the
video game industry is extremely volatile. Game programmers
are not insulated from this instability as their employers experience financial difficulty.
Third-party developers, the most common type of video game
developers, depend upon a steady influx of funds from the video game publisher. If a milestone or deadline is not met (or for a host of other reasons, like the
game is cancelled), funds may become short and the developer may be forced to retrench employees or declare bankruptcy and go out of business. Game programmers who work for large publishers are
somewhat insulated from these circumstances, but even the large game publishers can go out of business (as when Hasbro Interactive was sold to Infogrames and several projects were cancelled; or when The 3DO Company went bankrupt in 2003 and ceased all operations).
Some game programmers' resumes consist of short stints lasting no more than a year as they're forced to leap from one doomed
studio to another. This is why some prefer to consult and are therefore somewhat shielded from the effects of the fates of
individual studios.
Languages and tools
Most code in commercial computer and video games are written in C++,
C, and some assembly language. Most games, especially console games, tax the hardware to its limit, and tight,
optimized code is required in order to allow the game to run at its target frame rate of 30 to 60 frames per second, therefore compiled rather than interpreted code is usually used. Almost all PC games also use either the DirectX or OpenGL APIs to interface with hardware devices. Xbox games use an API similar to DirectX.
Various script languages are also used for the generation of
content such as artwork and especially AI. Scripts are generally executed by an interpreter, resulting in much slower
code execution than compiled C++, C or assembly code. Scripts are therefore sometimes used sparingly, mostly for content design
and not for modules where high speed is critical such as rendering logic. Some games are designed with high depedency on scripts;
the scripts are compiled to binary format before game execution so they can execute with little degradation compared to native
code. In the optimization phase of development, some script functions will often be rewritten in a compiled language.
Java is used for many web browser based games because it is cross-platform, does not usually require installation by the user, and does not pose security risks, as may a downloaded executable program. Java is also the
dominant language for mobile phone based games. Macromedia Flash is also a popular development tool for browser-based games
(there is some debate as to whether Flash actually constitutes a "language," but it is a popular web-based game development
medium).
As games have grown in size and complexity, middleware is becoming
increasingly popular with the industry. Middleware provides greater and higher level functionality and larger feature sets than
the standard lower level APIs such as DirectX and
OpenGL, such as skeletal
animation. In addition to providing more complex technologies, some middleware also makes reasonable attempts to be platform independent, making common conversions from, for example,
PC to PS2 much easier. Essentially, middleware is aimed at cutting out as
much of the redundancy in the development cycle as possible (e.g. writing new animation systems for each game a studio produces),
allowing programmers to focus on new content.
Other tools are also essential to game developers: 2D and 3D packages (for example Photoshop, Maya and 3D Studio Max) enable artists to produce cutting edge art and animations; source control systems keep precious code safe, secure and optimise
merging; and IDEs with debuggers (such as
Visual Studio or CodeWarrior) make writing code and tracking down bugs a less painful experience.
Notable game programmers
A few game programmers have garnered renown among game developers and game players alike.
External links
Game development chatrooms
|