Getting into Game Programming at Heavy Iron Studios

Interested in becoming a game programmer at Heavy Iron, but not sure you’re ready?

Like many other game development studios, the #1 thing we look for is strong C/C++ skills. You need to be used to working with pointers, memory allocation, bitwise operators and similar low-level C/C++. If you’ve not used C/C++ much, or rely on STL to take care of the tricky stuff, you’ll likely not make it through our test and interview process.

Here’s our advice for preparing to get a game programming job at Heavy Iron.

Code as often as you can

Spend as much time as you can, coding in C/C++. Go beyond your school studies, by making your own games and other projects in your spare time.

We recommend starting with a simple library, such as SDL, SFML or GLFW. These give you the ability to receive input, draw graphics, and play sound. You build everything else on top.

AFK and not able to code? You can also read books! If you’d like a recommendation, we’re fond of ‘Effective C++’ by Scott Meyers.

Don’t use a ‘big engine’

We love Unreal and Unity. It’s fine if you know them, but we recommend against focusing on them when you’re still learning and practicing your C/C++.

Unreal does a lot for you, which means you don’t get to practice making things yourself. If you’re working in Blueprint, you’re not working in C/C++. And if you’re working in C++ within Unreal, you use a lot of existing functionality, rather than practicing the basics from a blank slate.

Unity uses C#, so you’d not be working on your C/C++ skills.

What about <insert favorite engine / library / language name here>? We recommend you work in C/C++, code at a ‘low level’, and ‘code as much as you can yourself’.

Don’t rely on STL

STL is great for general purpose programming, but it has many restrictions on how it’s allowed to do things. Hence, it’s not usually used in games.

Game programmers need to be able to be able to write their own data structures and manage memory efficiently.

It’s fine to know STL, but don’t rely on it.

Make fun projects

We recommend making retro games, like Asteroids, Space Invaders, Pac-Man etc.

  • The games are fun, and the design is known. You don’t have to spend time coming up with a new idea.
  • The artwork is simple. You don’t need to spend lots of time making artwork – 3D modeling, texturing, animation, etc.
  • The design is simple. You don’t need to spend time creating levels.
  • While these games may look simple, there’s a surprising amount of challenge in coding them.

Also, the following projects would give a good way to practice using 3D math. 3D math is very helpful, especially detecting intersections, testing line of sight and doing facing tests.

  • Write a software ray-tracer or path-tracer that supports various shapes and materials. Then optimize it to run fast.
  • Write a graphics demo, using OpenGL, Vulkan, Direct 3D, Metal, etc. You could render a teapot, a heightmap, or procedurally generate a planet.

It’s the journey, not the destination

While it’s great to work on games and demos, the end result isn’t very important – you can finish making it, or not. The important thing is all the learning that you go through while working on it. Things like:

  • Learning more of the C/C++ language – file I/O, multi-threading, bitwise operators, etc.
  • Moving from ‘I kind of get what a pointer is’ to being a practiced memory managing ninja.
  • Getting good at handling build settings, LIBs, DLLs etc.
  • Knowing how best to bang your head against the monitor when you’ve spent two days trying to track down a memory stomp.

We hope this helps. Happy coding!