In Defence of the Gameplay Programmer
Throughout my career as a professional games programmer, I have always been in awe of the hardcore graphics coder. As a graduate, I'd see these giants of the art deep in lines of assembly code (this was back in the days of PSX) and talking with other übercoders using their own secret hardcore language of asm, intrinsics & vector units. For a while, I wanted to emulate them. To me, they represented the pinnacle at the top of the programmer tree. Yet more and more I am coming to appreciate the art of the many different kinds of programmers you need to form a crack AAA dev team. From the hardcore engine optimisers, to the generalists, to the subject of my blog: The humble gameplay programmer.
First, a disclaimer: I'm a AAA coder, having worked in a team since the first days of my professional career. Whilst I'm going to be praising the generalist coder highly here, I'm also aware that I'm talking about specialising as a gameplay programmer, which isn't so relevant for indie development. That said, hopefully there are some useful pointers for those who have to wear different 'hats' during the development of a project. I've been there, and I loved it.
What is a Gameplay Programmer?
Recently, in an interview, I was asked to describe my job role. Leaving aside the management side of things, I described it as a "creative gameplay programmer". "But what does that mean?" came the reply. That question has haunted me ever since. What does that mean? Indeed, what does gameplay mean? Where does gameplay coding start and non-gameplay coding begin?
Simply put, it's the aspect of coding that puts the programmer closest to the player. It's dealing with what the player wants, does and receives in return. In this way a gameplay programmer does more than just deal with the area of the game that might traditionally be considered "gameplay". It includes how the user interacts with menus, how progression through a career mode happens, how a game mode is scored, and how a HUD represents that score: It’s all gameplay.
More Generalist than Man
A vital aspect of being a gameplay programmer is generalism. Often overlooked as a skill, having an incredibly wide knowledge-base is essential for being a vitally productive gameplay programmer. This is not your generalist engine programmer style deal, where a programmer is competent enough to be able to write a file manager or a font renderer - this is a highly focussed understanding of what the codebase can do, the quickest way to do it, and how it all ties together. Generalism, of this form, is a specialism every bit as important as optimising skinning algorithms and writing complex fragment shaders. That's not to say that knowledge in those areas isn't important, it's just that knowledge of many areas is just as important, if not more so, for the gameplay coder.
And, of course, there are plenty of specialist areas for the gameplay programmer: in-depth knowledge of gameplay techniques, pattern-matching algorithms and lately, physics systems are really important if creating gameplay from bare-bones functionality quickly is your aim.
Nuturing the Creatives
This is Lionel Messi.
Messi, is currently the best footballer in the world. (US readers, football == soccer).
His team, Barcelona, are a talented bunch, with unbelievable quality in almost every area of the pitch, but Messi is vital to the team because of the creativity he brings. He can do things with a football that other players cannot do, he can see passes, score goals and befuddle opponents in wonderful and unpredictable ways, and as such he is indispensible. However, and to bring this analogy back into the gamedev world, he can do all of this because his team allows him to. The team is set up to play to his strengths and not to force him into a role to which his skills are not well suited. You don't ask Lionel Messi to defend, you ask him to dazzle.
So it is with the creative programmers in your team. Identify them, identify them early and ensure they are placed in roles that can get the best out of them, in the same way you place a programmer with an aptitude for graphical effects in the graphics department of engine development. If you have a programmer who prototypes ideas quickly, brings them to a stage where the fun can be proved out or dismissed, works collaboratively with designers and artists (and not against them) and who bristles with ideas of their own -- ensure that they are given space to be creative.
Yes, time and space are difficult to fit into controlled production plans, and systems such as Agile, and yes, there is a time and a place for R&D and idea-generation, but if space is given to creative types for ideas to grow, morph, and develop, with no expectation that they will necessarily succeed, then your game and your studio could ultimately benefit from something amazing appearing out of nowhere.
Creative gameplay programmers are a vital cog in a well oiled AAA game-making-machine. So mine, really, is a rallying call to appreciate them more, nurture their craft and encourage their creativity; their next big idea could be yours.