Ceased Trading. 12th Sept 2013
-A+

Job Roles: Programming

The game industry has matured over the last 30 years as the scope of games has rapidly expanded. Game teams can now number more than 50 people, and as such, job roles have begun to fragment into more specialised areas. Read through the job role descriptions to find out exactly what each one entails. If you are looking to enter the industry there are additional guidelines on where you need to concentrate your creative efforts to increase your chances of success in our Getting the Job section.

If you're interested in a work placement please click here to find out more.

Programmer Overview

To come and work in the games industry as a Programmer it helps to be really, really into games. Merely thinking that it's more exciting than going and working on databases or in accounting is not a good enough motivation. It's worth noting that with the wide range of programming disciplines needed, from tools and technology through to A.I. and online play, the ability to play video games is not essential. However having a passion for both problem-solving and games is a good place to start!

How long have you been programming? If you are on a course at college or university, do you still programme as a hobby? Doing a bit of games programming in your spare time is a step in the right direction. There are lots of resources on the Internet to help Programmers get to grips with C++ and using cross-platform libraries (SDK), and that is a good education in itself. If you are at school, do you want to programme but don't know where to start? Again there are plenty of Internet resources. For a gentle introduction, look at Java (http://java.sun.com/, http://java.sun.com/new2java/learning/young_developers.jsp) or Processing (http://processing.org).

One thing that must be stressed here is that to be a games Programmer (unless you are going to focus on mobile phone games), you must be able to programme in C++. This is the industry standard and while other languages such as C# or Java may have their limited uses, it will be C++ that you are using day-to-day - so it will help you hugely to become as good as you can with it!

Unfortunately, while learning to programme, there isn't much time to learn how to write tight, efficient code. The principal of programming and structure gets through, but with no respect for the memory and time constraints that plague the games Programmer. There is a huge difference between coding a business application on a PC and writing a game for a console. In university/industry parlance, games are a real-time and embedded software solution. Although they are not safety critical, the first release of a game will define its quality to the consumer, so they have to work with zero critical bugs at the time of release.

You may read that a game has real-world physics, or complex human-like behaviour or fully interactive environments where you decide the outcome. The games Programmer has to satisfy these seemingly impossible demands every day. Unfortunately, there is only one way to do this and it is CHEAT! It's a little like magic; the smoke and mirrors of the gaming world.

There are many disciplines for a Programmer to master; some become essential generalists while others enjoy specialising in one specific area. This section gives you a rundown on the different areas you may encounter. Bear in mind however that virtually all Programmers cross over between areas to some degree or other and you will probably start out as a general Game Programmer. Being flexible and open to new challenges is essential if you want to be a success in the industry.

There are great amounts of fun to be had even with the most mundane tasks. The feeling of having created something that other people enjoy just cannot be beaten. Talking to people that have actually played your game at the end is amazing. On top of this, the ability to turn up to work in a t-shirt, listen to music and have access to all the latest games releases is a definite bonus. So, if you think you're up to it - the effort, the dedication, the fun and the stress of completing a game in time for Christmas - read on...

Game Programmer

Game Programmer A general Game Programmer can literally be responsible for anything from text parsing to texture mapping, tools code to AI; it is not unusual for one person to span a whole range of jobs. Therefore, the more you know (or can turn your hand to) the better. If you feel that you have a good grasp of a whole range of topics, this could be the job for you. As the game team gets larger and the technical requirements are satisfied by specialists, the Game Programmer becomes a gameplay programmer that turns the game design into a playable reality.

You will usually work specifically for someone - often the Lead Programmer - and will be expected to complete all manner of tasks with a minimum of fuss, or suggest and implement suitable alternatives.

What you'll need:

  • Strong C++ coding skills and data structures
  • The ability to rapidly familiarise yourself with existing code
  • Good communication skills within a team
  • A proactive attitude towards creating 'fun' from a design
  • 3D maths and at least basic rendering skills
  • Excellent problem solving skills
  • Knowledge of optimisation strategies
  • File manipulation skills

A key requirement is to be able to work easily with other peoples' code and designs. If you aren't specifically writing the engine or A.I. (for example), then you will be picking up another person's design and making it perform well. There isn't much you can do in the way of training for this and it is something that you will certainly pick up on the job.

AI Programmer

A.I. Programmer Adding "intelligence" to a game, whether this means working on the game from the start, developing the A.I. hand-in-hand with the rest of the game, or bolting it on at the end. In some cases, this can be anything but "intelligent" (see below), in other cases, this can be real theory-pushing work. The important thing from the perspective of this industry is that an A.I. Programmer makes the in-built opponents appear to play intelligently while having their code consume the minimum amount of frame time.

As Artificial Intelligence can vary so wildly in its definition, here's a range of things that you may be required to know or at least will benefit from:

  • Routing and navigation algorithms - this is of particular importance
  • Psychology
  • State machines and message passing
  • Physics (to understand how the A.I. players interact with their environment)
  • Optimisation strategies
  • Graph and network theory
  • Neural networks and genetic algorithms - theoretical and used little in games

In this industry, A.I. can frequently be a misnomer - there are few games out there that use neural networks or genetic algorithms, simply because they can be hard to implement effectively against a tight schedule and can also be difficult to debug.

In many cases, game A.I. consists of some fairly simple state machines combined with hard coded knowledge about the game world and behaviours. It's layering and combining these fairly simply techniques in interesting ways that makes the game come to life and fools the player into thinking there is more going on than there really is - an absolute cornerstone in all aspects of game programming.

While it is true that the graphical capabilities of modern game hardware continue to improve at an amazing rate, the general purpose processors are lagging behind; A.I. code needs to be written carefully with a constant eye on performance to make sure it doesn't end up bringing the game to its knees.

Special Effects Programmer

Special Effects Programmer In a nutshell, adding the polish to the game. Special effects can go a long way to making the visuals of a game live up to the gameplay, be they particle effects for fire, smoke and explosions or full screen post processing effects for depth of field or shadows. The Special Effects Programmer will usually work closely with art staff to develop materials, shaders and textures that work in concert to produce visually stunning spot and continuous effects. Special Effects Programmers frequently spend hours fine-tuning a single routine to get the best possible performance and look out of it.

What you'll need to know:

  • 3D maths
  • Vertex and pixel shader programming
  • High Dynamic Range rendering
  • Depth of field
  • Optimisation techniques
  • Floating point textures and render targets
  • Physics for particle behaviour
  • Colour blending theory

Special effects programming is becoming more and more GPU-centric so the stronger your skills and the more experience you have in programming graphics hardware, the better your chances of success in this area.

Audio Programmer

Audio Programmer The Audio Programmer is responsible for the processing, storage and playback of sound effects and music in the game. Frequently working for both the game team directly and the tools department, they are key in making sure the game sounds as good as it looks and plays. Working closely with the audio production department, the Audio Programmer can be responsible for development of the audio component of the company's toolchain in addition to the playback and mixing routines in the engine.

The advent of more powerful game hardware has opened up many new avenues for audio programming, with surround sound and physically modelled audio joining the established requirement for software DSP algorithms.

What you'll need to know:

  • Music and wave theory
  • Audio packages and file formats
  • PCM, ADPCM, MP3 formats and derivatives
  • Fourier transform theory and practice
  • Frequency analysis
  • Digital Signal Processing
  • Channel mixing
  • Sample rate conversions
  • User Interface design
  • Windows programming
  • Physics for audio transmission and reflection
  • Optimisation strategies

Quality Audio Programmers are a valuable commodity in the games industry, so if this is an area that appeals to you, you can be assured of work for many years to come.

Online Programmer

Online Programmer With the ever-increasing need to have players on consoles play with against each other, the role of Online Programmer is increasingly important. In this role you may have to write the basic interface for the UDP or TCP/IP socket layer that allows data to communicate with each other. Outside the main context of the game, you will need to be able to set up lobbies so players can make that connection with one another over a LAN, or across one of the platform providers' matchmaking systems. You may be required to write systems that cope with clients dropping out or signing into a game, and host-migration. Finally, some high-paced games (the obligatory FPS) will need to have client-side prediction, and server object interpolation and extrapolation, and finally server-side lag-compensation for resolving time critical actions.

What you'll need to know:

  • Strong C++ skills
  • Good knowledge of Internet Communication Protocols
  • Experience with networking API
  • Solutions for issues with bandwidth and latency
  • Optimisation strategies
  • Efficient data structures

Even though console games are generally high-paced and have servers created to play individual sessions, the larger Massively Multiplayer games will have Online Programmers dedicated purely to publisher controlled server-side programming and these have a very different job description potentially using a different language to C++.

Engine Programmer

Engine Programmer Making the game tick - the Engine Programmer works on the core technology upon which all the other systems depend. Background file loaders, running the world node graph, debugging menus, and viewers and profiling routines are just some of the essential responsibilities of any Game Engine Programmer.

With mounting commercial pressures to increase the re-use of software development effort, the Engine Programmer will often find themselves working in a central "Technology Team" on a common game engine shared between multiple game development projects. Such engines are frequently cross-platform to maximise their utility, so the Engine Programmer often ends up with experience on many hardware platforms.

What you'll need to know:

  • Very strong C++ skills
  • Parallel software design and scheduling
  • Optimisation strategies
  • Efficient data structures
  • General graphics including shaders
  • General sound
  • API design
  • Good communication skills
  • Experience of as many hardware platforms as possible

As you can see here, the Engine Programmer has to cover a lot of ground. Frequently they are highly experienced coders with many years of games development behind them, giving them the breadth of vision necessary to design and implement such critical systems.

Toolchain Programmer

Toolchain Programmer The Toolchain Programmer is responsible for the development of all manner of tools and utilities to make game development tasks easier and more efficient. Either working directly with a game team or employed as part of a centralised shared "Technology Team", the Toolchain Programmer is key to smoothing out the bumpy road stretching ahead of every game development project. Although heavyweight commercial packages such as Maya, Softimage or 3DS Max are used extensively, there is always a need for bespoke tools to process game data and enable the content creators to undertake tasks so specific to the game that they cannot be accomplished in any other way.

Working closely with the content creators, the Toolchain Programmer must be open to frequent and frank constructive criticism as the tools go through revision after revision to give the 'customers' exactly what they need.

What you'll need to know:

  • Very strong C++ or C# skills
  • Windows application development
  • Some knowledge of PHP, HTML, XML and SQL
  • Networked systems
  • Efficient and flexible data structures
  • API design
  • User interface design
  • Good communication and presentation skills

Long thought of as the poor sibling of 'proper' game development, in the last few years the industry has woken up to the realisation that the quality of toolchain development has a massive and direct impact on the quality of the final game produced. If your tools are late and sloppy, then your game will miss deadlines and the quality will suffer, while slick tools with well-designed interfaces and proper documentation and training will help ensure the content creators can make the game really shine.

Lead Programmer (also may be known as the Technical Manager)

Lead Programmer Everything! The Lead Programmer is ultimately responsible for all aspects of programming required to complete the game. Usually a highly experienced game Programmer, they will work on a huge variety of different things during the development lifecycle adding their insight and assistance to the other programming staff.

In addition to programming, Leads will also spend significant time on more managerial issues such as task prioritisation, scheduling and delegation, team organisation and personnel management. The actual split between programming and management depends largely upon the structure of the company in question, but in most circumstances this position will involve management skills. Some companies will split the management role and lead role as the tasks involved can be too many for one person in a large team.

What you'll need to know:

  • Everything: being ultimately responsible means that regardless of the problem, it's your job to get it fixed
  • User interface skills
  • Artificial Intelligence
  • Online game systems
  • Sound and music playback
  • Performance profiling and optimisation strategies
  • 3D maths, rendering and shaders
  • File formats, data formats
  • Task prioritisation and delegation
  • Interpersonal and communication skills

This is a pretty broad brief, but being where the buck stops means being able to deal with almost any situation. Working out how to accomplish the impossible within tight time constraints is a day-to-day task for a Lead Programmer, so make sure you enjoy a challenge before stepping up.

Resources

For application advice and information please see Getting the Job: Programming section.