Interview With A Programmer
Programmers are rarely praised or acknowledged; you’ll find them out the back, working away at the code and trying to fix those bugs. The thing is; programmers are the brains of the operation. So, we thought we would take a look at programming life with who better than AIE Alumni, James Gale!
AIE caught up with James, who has been programming for over 10 years, to find out about his experiences and how studying at AIE helped him on his journey.
Could you give a brief introduction of yourself?
Hi, I'm James Gale and I have been programming professionally for 10 years now.
I have mostly worked on sport and racing games for mobile platforms and currently work remotely in country SA for True Axis developing True Skate. In the past, I have had the pleasure of working on franchises such as Madden NFL, WRC and Tinkerbell. I'm mostly self-taught, reading books and running through magazine tutorials. A couple of years after finishing school I heard about AIE opening up in Melbourne and offering a game programming course, which I jumped at. The year I started at AIE I managed to land a job with Firemint; which is now the EA studio in Melbourne.
I still love making games, and I imagine I will be tied up with the industry for quite a while yet.
What is your favourite programming language and why?
For work I like C++. It's a great compromise between control over the hardware and ease of use, but best of all it is very portable. There are C++ compilers for every platform, so we can easily share code no matter what we are building games / tools for.
For play, if I'm working on a serious, large project I like C/C++ for the same reasons as work. But if I'm just wanting to muck around and have some fun, you can't beat Assembly. I love taking time to understand the hardware, I love working out tricks to reduce size or increase performance particularly if it means using the hardware in an unintended way. I also really enjoy working on security for software which often requires getting down to the assembly level.
Is there a specific programming language that is best learnt to help students towards mobile development?
I would say C++ is what I would learn. Unity is a big thing at the moment in the mobile space and there seems to be a lot of jobs going around for Unity developers using C# so that might seem like an obvious choice, but the bigger studios I know are still using custom C++ engines or Unreal Engine which uses C++.
The other advantage of C++ (in my opinion) is that by learning the lower level language where you are forced to manage your own memory and things like that, it is fairly easy to jump into a higher level language that makes life easy for you, whereas I think it would be harder to start with something like C# which gives you useful, quality of life, type functionality and then have to go backwards and learn the annoying manual C++ way of doing things. I'm sure there are plenty of people who will argue against me there though, that is all just my personal opinion based on my own experiences.
Having said that, learning lots of languages is a really good idea. In my work I use C++ 95% of the time - BUT I also need to work on server back-end code which requires PHP and even some bash scripting, I also need to deal with native iOS code which is done in Objective C, and also some native Android code which is done in Java. Being versatile is pretty important in the mobile space.
How do you generate Game ideas? What inspires you?
Most of my ideas these days are inspired from really wanting to play a particular kind of game and not being able to find one that suits my needs. It could be a complete genre missing from my current gaming device or maybe it's just that I have weird wants, like I usually want to play something that is same screen multi-player and no internet required which is pretty rare these days.
When playing games are you able to understand the program or the coding behind it and take influence from it?
Yes I quite enjoy doing that. It's pretty exciting to see something unexpected and try to figure out how they achieved it. I love the creativity involved in games and how many different kinds of creativity there are.
You can look at a model and you can see how an artist might have been creative with texture use to reduce the amount of polygons. But on top of that you can see the creativity of the level designer by making sure that the really CPU / GPU heavy creatures are only used in situations where there isn't much else going on, or taking advantage of that one creature that is really light on resources and filling your screen with it, and then there's the coders and you can see their creativity shine in things like shading techniques on the creature.
So many layers of different kinds of creativity by very different kinds of people come together to make the really special gaming experiences that you always remember and it is fascinating.
What advice would you give to someone who wants to enter the industry?
Love what you doing, spend spare time doing it. Long days and crunch times happen, but making games was my passion so it just felt like a group of mates doing something you love and getting paid for it! Unfortunately in the games industry you will come across crunch times so it's in your best interest to make sure it's something you really enjoy doing.
What is the career progress as a game programmer like? What role people can people look to achieve after 5 years?
After 5 years you could expect to be leading a team. What that means will be different depending on the size of the studio. I've always worked in small studios and my teams were between one and five or so people and leading my small teams meant doing things like delegating tasks, helping other coders when they ran into problems, discussing the viability of features with producers, designers and artists and generally being responsible for the project moving forward.
Do you have any advice for people who want to work from home or be in indie development?
Do lots of research on what you are going to develop. The indie market is very saturated so try to check out the market and find something that does not exist yet. Pick the right product and be prepared to work a year without any money while you develop your first game.
If possible try to make something that isn't too easy to replicate. Threes is a fantastic game but it had a simple mechanic didn't take very long at all to replicate and someone did a clone, 2048, and released it for free which I expect hurt the sales of Threes.
True skate has done really well for us, there are really only three skate games on the app store like it and the physics isn't straight forward which makes it hard to copy.
If you could go back in time and give yourself what bit of advice to help with programming, what would it be?
Take the time to understand every line of code you write.
I learnt to code from magazine tutorials, coverdisk projects (anyone remember coverdisks?), talking to mates and reference manuals which lead to me using other peoples code sometimes when I didn't fully understand something. This lead to having trouble customising things and having my programs running more commands than they really needed to, and every command in your program is a potential bug. 🙂
I think my code would have improved a lot faster if I took the time to understand every line I had in my programs, even if it meant spending more time writing smaller, much more boring programs before I got to write fully fledged games.
Finally…what’s your current favourite game?
This is a tough one and often depends on my mood but mostly I like 3rd person, RPG style, arenaand arena based PVP games.
I would like to say Forge, but I haven't been able to get any servers for months now. I used to be a WoW guy but I've lost interest in the last 6 months (been playing since vanilla). I'll go with Guild Wars 2. I haven't really played a lot of games since well before Christmas but GW2 is what I'm about to get stuck into again.