Video Game Design Program

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.

Programming Sub-Types

• Junior Programmer • Lead Programmer • Engine/Tools Programmer • Graphics/Special Effects Programmer • Audio Programmer/Engineer • Artificial Intelligence Programmer • Multiplayer Networking Programmer

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 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 , 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 -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.