How to get into the games industry
The Games Programmer
- Introduction
- The games development process
- A perspective from Eurocom
- The Project Manager
- The Producer
- The Designer
- The Artist and Animator
- The Programmer
- The Sound Designer
- The Games Tester
- In Final - links and resources
Programmers for a games development company are split into three main categories: games programming, engine programming and tools programming. Let's look at these individually:
Games Programmer
A Games Programmer actually writes the code for a particular game that runs on a console. It is this code which actually displays the maps and models created by the artists, plays the sounds created by the musicians and so on. This job subdivides into engine programmers, who write generic code that is used by many games, and gameplay programmers, who implement features that are specific to a particular game. Within these roles people can be generalists or specialise in different programming areas, e.g. artificial intelligence, physics and sound.
Many people currently in the industry are self-taught 'bedroom programmers' who wrote their first games in BASIC or assembler on a home computer in the 1980s. Nowadays, this entry route is much more difficult due to the sophisticated nature of modern games. For example, the transition of games from 2D to 3D has meant that Games Programmers now need a much higher level of mathematical understanding than they did before. Additionally, most games are now programmed in C or C++, which presents a steeper learning curve. A further problem is that it is usually not possible to develop games for consoles without specialist equipment unavailable to the public. Therefore, it is much more likely that someone currently entering the games industry nowadays will have a degree in a computer-related discipline. Often, game development companies will take on student Games Programmers for the sandwich year of their degree. Games Programmers will have key skills that will include a high level of specific technical skills, coupled with an ability to work under pressure and to deadlines.
An important consideration for those programmers whose origin lies in the 'bedroom' is that, while it may seem fruitless to draw up formal documentation and charts/diagrams in the amateur setting, when working in the industry these can be critical to the smooth running of a project. As a formal programming education will teach you, it is the communication of ideas - imparting the meaning behind the implementation of a line of code - that forms the backbone of programming for a team. A Games Programmer has to be able to work as a part of a team with an understanding of the multiple roles involved, and in addition be able to summarise 1000s of lines of code either diagrammatically or through written documentation in a manner that imparts the overall hierarchy with clarity. This reduces the time taken by programmers foreign to your code to understand your intentions, improving teamwork and streamlining the project. Of course, these communication skills need to be verbal, too - while you don't have to be an extrovert, your peers should find conversing with you clear and understanding.
When applying to be a Games Programmer, sending a demo disk is an absolute must. This doesn't have to be as comprehensive as a game might be, but a small yet tight demo of your own work is crucial to demonstrate your understanding of the mechanics involved in producing a finished product. Remember: if you've 'borrowed' some code from the Internet, you should acknowledge that in the covering letter, detailing why, for instance, 'I borrowed xxx rendering code from yy since I wanted to concentrate on the game play elements, rather than been bogged down in the graphical side of things'. Be warned - we are quite good at spotting demos that have 'borrowed' code in them. You may be asked to show your source code!
If you're employed in the industry, expect to become a junior programmer, handling the work that the Leads don't have time for. Common examples are front end coding and save game/memory pack structures. These are typically the 'rights of passage' for any new programmer - make it through these relatively unscathed and you've probably got what it takes to be a Games Programmer.
Engine Programmer
Engine Programmers build the underlying systems that are used by Games Programmers to construct games and build interactive elements. At some game developers, the engine development is undertaken directly by the game teams - but with several teams and ever more complex requirements, this can be very wasteful in terms of resources and duplicated work. A more common approach is for a developer with many teams to have a single set of coherent tools (as provided by Tools Programmers) and a single set of engine code which works with the output from those tools - as written by Engine Programmers.
A game engine normally consists of all the code which talks directly to the hardware the game is running on, be that PC, PS2, Xbox, GameCube, PS3, Xbox360, Nintendo Revolution, PSP, Nintendo DS... One major job for engine coders is to hide the considerable differences between how all these pieces of hardware work, and in abstracting those details, make the Game Programmers' jobs easy by letting them concentrate on how the game works and plays. So firstly, the engine deals with anything which is likely to work differently on different machines, and that's a considerable list, including (but not limited to) all types of rendering including lighting, shading, particle systems, skinning characters, deforming geometry and graphical effects; animation systems including forward and inverse kinematics; fast maths functions matching the hardware; kernel issues like memory allocation systems, controller handling, process scheduling, asset loading, data streaming and device handling; network systems handling for multiplayer.
Secondly, an engine often contains code that is not necessarily specific to a machine but is commonly used across games, so systems like collision and physics handling, AI, messaging systems, debug support, and class structures and framework which match closely with data produced by game construction tools.
Probably the biggest requirement for all these systems is performance. An Engine Programmer is required to get the best speed and memory performance possible for that particular feature on that particular platform. At the same time, careful consideration must be given to high-level design and encapsulation. As such, an Engine Programmer must not only have the C/C++ programming skills of a Games Programmer, but must also have an excellent understanding of programming at hardware level, optimisation, and getting high performance from specialised game hardware. It's also essential to be able to learn new hardware and understand state of the art and commonly used techniques quickly, and integrate those appropriately. Engine Programmers also need to learn APIs quickly as these are often part of the job of building an engine for a new machine - e.g. DirectX, OpenGL, and myriad vendor-specific APIs. Additionally, a larger and larger part of engine development now requires careful integration with tools and their output to make complex techniques easily deployable by artists, designers and Game Programmers alike.
If you are interested in becoming an Engine Programmer, the first step is being able to show that you understand how some commonly used systems work at a fundamental level. Most Engine Programmers do this by focussing on the largest and most recognisable part of engine coding - rendering. For example, you may want to show a demo written with DirectX or OpenGL running on a PC, showing an implementation of a traditional or cutting edge technique. To go a step further, you may want to show off your optimisation abilities with some kind of performance demo. Having some optimised code available - perhaps a pixel shader, or some assembler, or other low level or performance-oriented example, may also be useful.
Tools Programmer
A Tools Programmer writes programs that are used by Artists and Game Programmers to develop the games. The nature of these can vary considerably, ranging from a 3D model editor or a bug-tracking database, to a file format conversion utility. Tools applications can be simple one-off programs that need to be developed to tight deadlines or huge multi-user systems that require maintenance for many years. Tools Programmers work with a much wider variety of languages and systems than Games Programmers, ranging from Windows programs written in C++ to web-based systems written in PHP and hosted on Linux boxes.
In the past, Games Programmers used to write their own tools. As games became more sophisticated, this became too much of an overhead for them, so the position of dedicated Tools Programmer was born. Consequently, some current Tools Programmers used to be Games Programmers. Nowadays, Tools Programmers often come from a non-games industry background, as tools can often have more in common with commercial computer applications than with the games themselves. Tools Programmers usually have a degree, although a large amount of relevant experience would also be suitable. Again, games companies will take on student Tools Programmers for the sandwich year of their degree. Tools Programmers' key skills will include both a high level and broad range of technical skills, flexibility, an ability to multitask and an ability to work with end-users.
A Tools Programmer must have a wide and detailed understanding of the various aspects of a game's development, as the applications used throughout the company will be used by artists, animators and programmers alike, all requiring different approaches to their work. Some Tools Programmers began their careers in the games industry as animators or artists, then move from this to the development of tools used by the art department. Others come from a background in corporate Tools Programming, and have to adapt to the relaxed and creative environment of the games developer!
If you are interested in becoming a Tools Programmer, technical skills are obviously extremely important. Current tools push the limits of traditional approaches as well as utilising a broad variety of new technologies. Additionally, the vital role that tools now play means that they are developed by a team of people, making communication skills essential. The increasing complexity of tools requires a much more customer-focused development approach to allow for users to fully benefit from them.
As tools have become bigger then it's become much more important to manage them effectively, design them properly and code them in a way that can be easily maintained. In this way, tools development more closely resembles conventional software development. In contrast however, the fast-paced and dynamic focus of the games industry, as well as the cutting-edge nature of the work involved, still ensures that tools development can be a great deal more rewarding.
Conclusion
To sum up, whether it's a position as Games or Tools Programmer you're interested in applying for, the key skills and requirements are:
- Communication skills
- Understanding of how to solve problems
- Grasp of a programming language
- Good mathematical skills
- High standard of both written and verbal English
Impress us with examples of programs you've written - include the source code! An accessible way to develop demo games is to write them for a handheld, e.g. GameBoy, Dreamcast VMU or as a Java applet. Alternatively, develop a PC based demo using DirectX or OpenGL.