I frequently come across people who ask "How do I get a job as a games programmer?". I do a lot of recruiting work for Heavy Iron, and so know the area pretty well. In this first post on the subject, I'm going to cover the best programming languages to practice.
Most games are written in C and C++. Certainly all the home consoles and main handhelds are mostly developed in C/C++. Cell phone and perhaps some web based games may use Java, but I'll ignore those platforms here. Also, if you’re just getting started with programming, you’re probably best ignoring everything I say here and choosing some kind of basic, just to get used to the basic concepts of functions, conditionals, loops, variables etc.
I recommend to university students that they attempt to use C/C++ as often as possible. If you have a choice of which language to use on a project, choose C/C++. When you apply for a job, you're very likely going to need to do some kind of programming test. If you're really familiar with the language, then you'll do several times better than otherwise.
"Well I know Java, and that's just like C++" With the rising popularity of Java at universities, I've heard this statement a lot. A few years back I left games for a couple of years and did Java programming. When I (thankfully) came back to games I had all the fun of refamiliarising myself with pointers, low level string manipulation, manual memory management, bitwise operators and all the other low level stuff. Yes, Java is like C++ in that the syntax isn't too dissimilar, and they're both object oriented, but they're different enough to mean that there would be a noticeable transition period if we hired a person who just knew Java. I also agree that a person can be a great programmer, and that shifting language is pretty trivial for such a person, but in terms of getting through the interview process people will do much better if they're familiar with C/C++.
"I'm great at C++, and C is just part of C++, so therefore I know it" This is another statement, or rather assumption, I've come across. It's also a lot more of a grey area than the Java vs C++ issue. Knowing C++ is good, but if you really want to do well in the interview process, make sure that your lower level C is good. If you ask some people to write a string reverse function they'll break it down into 5 classes, and wrap it in accessor functions. These are good skills to have, but it's better to have the low level skills too. Ideally people who know C should be familiar with things like:
- How numbers get represented in binary for signed ints, unsigned ints, and floats.
- The sizes of data types, and the padding which happens in structs.
- Use of pointers, and pointer arithmetic.
- Use of bitwise operators such as And, Or, Not, Bit shifts, and masking. For example, how would you read and write to the middle two bits in a byte without disturbing the rest?
"What about assembly language?"Having a low level understanding of how processor works, and assembly language is a very useful skill for games developers. It helps one to write optimal C/C++, and we occasionally end up optimizing heavily used functions into assembly (e.g. math functions) or stepping through assembly to work out why our code isn't working. This said, I don't consider this especially important for a junior candidate. Personally, I'd much rather see good strength in C/C++.
ConclusionC/C++ is trickier to learn than VB, Java, and some other languages. In some ways it would be cool if other languages could be used for console game development. We might spend less time tracking down dangling pointers, off by one errors, and writing lots of code just to build a string. But in the context of getting a job programming for games consoles, C/C++ is the way.
You might be thinking “Isn’t it short sighted to require that people specifically know C/C++, when they might be a great programmer in another language and can cross over quickly after being hired?”. Yes, you’re probably right. But if we interview two people, and one’s already familiar with it, they’ll have an advantage.
If you've never touched C/C++ before, Microsoft has a free IDE (
Visual C++ Express) and also has a lot of tutorials online.