Game programmer
A game programmer is a software engineer who primarily develops computer or
video games or related software (such as game tools). Game programming has
many specialized disciplines; a practitioner of any may regard themself as a
"game programmer."
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 horsepower.
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 of 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 a 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 depend
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. Programmers of these features normally only develop the subset
of physics routines that the game actually employs. For example, a space
game may need a gravity system, but have little use for a water viscosity
system.
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 are 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.
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 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 at a frightening clip.
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. Though both areas do borrow from each other from time to time, they
are usually considered distinct disciplines.
Some games such as puzzle games may require no or just one AI programmer.
Complex games such as strategy games like Civilization III or role-playing
games such as Neverwinter Nights may require dozens of AI programmers. Many
contemporary games dedicate sixty percent of their programming staff to AI.
Graphics Programmer
Historically, this title usually belonged to a programmer who developed
specialized blitters and clever optimizations for 2D graphics. Today,
however, this title is almost exclusively applied to programmers who
specialize in developing and modifying complex 3D graphic renderers.
A 3D graphics programmer must have a firm grasp on advanced mathematical
concepts such as vector tranformations, matrices and quaternions, and linear
algebra. Often practitioners in this specialty are accused of speaking a
foreign language when they discuss advanced topics in this area.
Programmers specializing in this area of game development can demand high
wages and are usually a scarce commodity. There 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 Pong. Though not all games have sound, most
do and many even have full custom musical scores. For games with just
rudimentary sound, sound programming is not even a single full-time job on
the project. For games with more advanced facilities such as 3D positional
sound, one or two programmers may dedicate all their time to building and
refining the game's sound system.
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 changes from game to game. Since this is not a
separate discipline, and often not a dedicated programmer, this title is
informal and not always clearly defined.
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.
Though most UIs look 2D, contemporary UIs are more likely to use 3D
technology, especially in a 3D 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 translucent 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). Despite this, they are still expected to program at
least some of the time and are also expected to be knowledgable in most
areas of the game.
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, handhelds such as the Palm OS or the
Game Boy or the Apple Macintosh. So in addtion to specializing in one game
programming discipline, a programmer may also specialize in development on a
certain platform. Therefore, one game programmers 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.
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.
Compensation
Salaries for game programmers vary from company to company and country to
country. In general, however, pay for game programming is generally less
than for comparable jobs in the business sector. This is despite the fact
that game programming is some of the most difficult of any type. However,
most game programmers feel it is worth the sacrifice in pay for the fun and
casual working environment. But lower salaries are not always the case.
Generally, lead programmers are the most well compensated, though some 3D
graphics programmers may challenge or surpass their salaries.
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
instability.
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 make a RIF 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 3DO 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
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 or 60 frames per
second. Hence the requirement for compiled rather than interpreted code for
functions that are executed often.
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 require installation by the user, and does not pose security risks,
as may a downloaded executable program. 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).
Notable Game Programmers
A few game programmers have garnered renown among game developers and game
players alike.
* Michael Abrash
* Danielle Bunten Berry
* John Carmack
* Jon Freeman
* Richard Garriott (a.k.a. Lord British)
* Andre Lamothe
* Sid Meier
* Alan Miller
* Jeff Minter
* Shigeru Miyamoto
* Paul Reiche III
* John Romero
* Ken Silverman
* Anne Westfall
* Roberta Williams
* Will Wright
This content from Wikipedia is licensed under the GNU Free Documentation License.
|