Categories
advocacy education games design programming

What programming language should aspiring game developers learn in their free time?

I was asked this recently in private mail by someone heading off to University / College. For people choosing between a Computer Science/Software Engineering course vs. a Game Design / Game Development course, I’d said:

If you love games, you’ll do both anyway; one you’ll learn in lectures, the other you’ll self-teach. Which will you find easier to self-teach (given no-one is prodding you), and which will you need the extra benefit of having a formal course/teaching/teachers? (usually: people find it easier to self-teach “designing and making my own game experiments”. Usually, people find formal Computer Science / Maths is ‘hard’, and they need the help of a formal course)

Gross generalization: Most game-developers in the indie community are programmers; most of them are programmer-centric when looking at the world. I’m a programmer, but I’ve done approx 40% of my career in project-management and studio management (and even a tiny bit of publishing) over the years.

There’s one interesting point I want to clarify a little: By “indie community” I mean “focussing on the places filled with people who actually ship games”. Most game designers who want to make their own stuff have to learn programming, even if they’re 100% non-programmers, since it’s the only way to get “your” vision launched. Even the ones that started-off as pure artists often end up being highly technical (whether they admit that to themselves or not).

So … this is not a popular view, but I think it’s more accurate than most: by the time you finish a 3-4 year course starting “today” … C++ won’t be the game-dev language people care about. Already, for entry-level jobs most studios are more interested in “how good are you at Unity? How good’s your C#?”. That trend will only continue/increase.

More importantly, you eventually need to decide to focus on “making cool games that are uniquely fun” or “solving interesting programming problems using clever source code”.

If you prefer the former: you need to be a competent programmer – but the only thing that matters about the language is “how quickly can you convert your ideas into working, interactive, playable game?”. It could be javascript, C#, Java, Python – anything that’s popular and widely-used (because you’ll want there to be lots of existing code and libraries you can re-use, and lots of people to turn to for advice when you get stuck).

… ideally: you should have an idea in the shower this morning, write some sketches during this morning’s University lectures, and while eating lunch at your laptop have a prototype running by 2pm. Send to friends this afternoon, and by the time you go to bed, you’ve added 3 more features and pushed an update to your friends, who are already commenting on it by email.

If you prefer the latter: you need to understand programming more deeply, and what matters about the language is probably “how much control does it give you over how the code is executed?” (for which the ultimate option is “assembler”, but the second-best is “C++” and C++ is cross-platform where assembler is not)

… ideally: you should be thinking up complex tech that has the “WOW!” factor when you make a tech-demo to show it off. You spend a week thinking around a difficult problem – or something that’s not a problem, but is “too slow to do on today’s hardware” (for instance). A while later, you feel you have a good plan for tackling it, and spend a weekend making an experiment. The weekend after, you take the bits that worked, refactor them, re-write the bits that didn’t, use some more programming tricks, optimize bits, try a new algorithm. A week after that, you write a tech-demo that shows visually/aurally/performance/networking (client and server interacting) the “thing that was impossible or too slow for people to try doing before”. You push it out to HackerNews and get a lot of coders tearing it to pieces (in a positive way) trying to understand what you did and how, and trying to reproduce it.

4 replies on “What programming language should aspiring game developers learn in their free time?”

Reads to me like are you Notch or Carmack?

Watching Notch when he streams his desktop while prototyping or participating in Ludum Dare is mesmerizing: He gets a ton of flak for things like using Java or peppering his code with hardcoded values and flaky OO design, but you can see gameplay flowing from his brain onto the screen there in real time.

Carmack, well, mesmerizing too, provided you can follow him going for hours on end about some deep down hardware latency issue that will result in awesome games a few years down the line.

Yeah, thats a great comparison!

I wrote a post a couple of years ago of what I imagined Markus/Notch went through in his conversion from WyrmOnline to Minecraft. A TL;DR would be:

“He decided to stop being a Carmack, and start being a Notch”

I just wanted to thank you for this article, it has been incredibly helpful to me and has given me a lot of good places to start. I have some very basic familiarity with Java and C++, but never had anything of a realistic goal in mind for where I wanted to go or take it. As I am in the Marine Corp at the moment and I still have about a year and a half before I get out and can go to school again, you have given me great starting points and plenty to work on and learn before I even return to college. Thank you again.

You are joking right? Most games developers are self taught, at least the good ones are. They eat sleep think talk and dream about coding. They are super human machines and are really good at making hard complex game loops and physics engines that defy logic but work in the most amazing and efficient way possible. You would swear the code you see wouldnt run or has multiple stack smashes but it works and works well and smashes time and space vortexs as its doing it. They just know how to code, its in their genes. Most people cant comprehend the kind of programming im talking about here. Also most great games coding machines are also great hackers, able to hack crack and smack their way aroung the entire internet without leaving a single trace. Believe me, ive met a lot of them and its insane.

Comments are closed.