So You Want to Be a Game Programmer?

I often get email from people looking to get their first job in the game industry asking me for advice. What are companies looking for in candidates for entry-level programming positions? How come it’s so difficult to land a job? I can’t answer for the industry as a whole, but I can certainly tell you what I am looking for when trying to fill an entry-level programmer position.

A few weeks ago, Joel wrote an article with advice for college students looking to become programmers. It was good, solid advice overall, but it was a bit too general, and it didn’t apply very well to the games industry. I often get email from people looking to get their first job in the game industry asking me for advice. What are companies looking for in candidates for entry-level programming positions? How come it’s so difficult to land a job? I can’t answer for the industry as a whole, but I can certainly tell you what I am looking for when trying to fill an entry-level programmer position.

Specifically, I’m going to concentrate on the case of someone without any previous industry development experience applying to game companies for the first time, possibly straight out of college. At the end I’ll touch on people switching industries with previous experience in other software industries. If you’re already in the games industry, then you already have a pretty good idea how you got there, and that experience will carry you forward much more easily than someone trying to break in for the first time. Still, you should be able to meet all these requirements in spades for your next job interview, so you might want to read on anyway.

The type of job openings you’ll be looking for are usually referred to as junior programmer, entry-level programmer, associate programmer, or something similar. Sometimes it’ll be listed simply as programmer but they’ll specify that previous experience is not required.

What exactly am I looking for, then, in an entry-level programmer candidate? Here is what I’d like to see, roughly in order of importance.

Enthusiasm.

Maybe this goes without saying, but I figured I would put it as my number one item. If you aren’t extremely enthusiastic about developing games for the first time, you might as well look for something else. In a couple of years you’ll be extremely disappointed and will be thinking of switching industries anyway.

How do you show this enthusiasm of yours? Working on a project of your own is an excellent way of convincing potential employers that you really care about this stuff. Write some small games, participate in some open-source projects, make some mods, do whatever you want, but work on some game-related projects. I would recommend working on several small projects, and then try to work on one larger one to get exposure to several areas and get experience working on a large code base.

Make sure to bring up those projects in your resume and put them on your web page (yes, we do check web pages and google for people before bringing them in for an interview). In a way, they’re the closest thing you have to experience in the industry. Be ready to discuss your project, why you did things in certain ways, ask how other people deal with particular issues, etc.

Always learning.

textbooks You’re about to finish your college education. If you think you’re done learning, think again. You’ve just finished the base that allows you to continue learning. Especially in this always-changing industry, you will always be learning new things: new platforms, new APIs, new languages, new approaches, new styles, new everything. Don’t think for a moment you can learn a couple of things and then stick to them without learning anything new.

It’s great to be confident in your skills, but if I catch a whiff that the candidate is set in his ways and is not interested in learning anything new, it’s “hasta la vista, baby.”

So go out and learn new things. I always like to be reading a technical book on things directly applicable to what I do at work, and maybe some on things that are more off-the-wall. In addition, I recommend reading trade magazines (Game Developer Magazine, Software Development, C/C++ Users Journal, etc), conference journals (GDC, Siggraph, ACM), web sites (Gamasutra, Flipcode, GameDev.net), mailing lists (gd-algorithms, sweng-gamedev, gd-general), and just about anything you can get your hands on. Don’t be afraid to look at open source projects (Nebula Device, Crystal Space), figure out how they do things, and even participate in their development.

The book The Pragmatic Programmer recommends learning one new computer language every year. It might be a bit of overkill, but it’s certainly not a bad idea. Even if you’re not planning on using Smalltalk or Ruby, it can only broaden your skillset and give you new perspectives on things. Learn about garbage collection, dynamic languages, etc. Of course, make sure you have the basics covered and you have a good grasp of C and C++ before you branch into other languages.

Plays games.

Doh! If you’re going to be developing games, you better play games on a regular basis. You don’t have to be a hardcore player, but you should enjoy playing some games. Be ready to discuss your tastes in games, what you’re played recently, why you liked them, etc. It’s not like you’re going to be designing the games (after all, you’re applying for a programming position), but it’s good to have an idea of what you’re aiming for when you’re creating a game. Also, the more you enjoy playing games, the more of a reason you have to actually want to work on them.

In my time in the industry, I’ve only known one programmer who didn’t play any games (and he was extremely talented to boot), but he was certainly the exception to the rule. If you don’t like games, you better have a really good reason as you why you want to get in this business.

Skills.

Ah, yes. It finally had to come up. As an entry-level programmer, you’re expected to learn a lot on the job, but you need certain skills to be useful and productive from the very beginning. Hobbyist game programmers obsess about DirectX and OpenGL. That’s fine, but don’t worry too much about it. You’re not going to see a single line of those APIs unless you’re hired as a graphics specialist (unlikely for a junior-level position). The specific skills will depend on the exact job and company, but these are pretty universal given what typical junior programmers get to work on.

  • Fluent in C++. Most game development (for PCs and game consoles) these days is done in C++, so you’d better be comfortable with the language. Knowing the syntax and compiling “Hello world” isn’t good enough. A class in college isn’t going to cut it either. The ideal candidate will have at least read Effective C++ and will have used C++ in some significant projects (either your own projects, or in some term projects at school). You should be able to discuss the order in which destructors are called for classes with inheritance, when you need to provide a copy constructor, or what const-correctness is and why is it a good idea. If not, hit the books right away.
  • Basic 3D linear algebra. As an entry-level programmer, you’ll most likely work extensively on high-level game code at first. To do things effectively, you’ll need a good understanding of the fundamentals of 3D linear algebra. Make sure you know your dot and cross products, how to calculate them, but, most importantly, what they represent and when you should use them. You should be comfortable with relative coordinate systems, and matrices as transforms (I don’t care if you know the formula for a rotation matrix, just that you know how to use it). Calculating if an object in the world is within a certain distance from the player, and within a certain angle of its aiming direction, should be close to second nature. Review your linear algebra books from college or check out Mathematics for 3D Game Programming and Computer Graphics
  • Software engineering. This is not a requirement for total entry-level positions, but it’s certainly a nice bonus. Unfortunately it’s not often emphasized (or even taught) in many schools, but being familiar with good software engineering practices is very important. Learn all you can about good object-oriented design, design patterns, encapsulation, unit testing, physical insulation, etc. There’s more to programming than knowing a language or API. This is difficult for people straight out of college, but it’s a huge bonus when you have it. Internships could help with this, but they’re not nearly as crucial for me as Joel says. I’d rather see an impressive set of home projects than a couple of summers working at IBM or Sun (on one hand I see a guy with lots of internal drive, and another one that needs to be told what to do and needs guidance). Having both would be awesome.
  • Tools. I certainly don’t expect new programmers to be familiar with the exact tools we happen to use. However, the ideal candidate should be familiar with version control, should know how to use a debugger, etc.

Ability to get things done.

As an entry-level programmer, you’re going to be thrown in the water and you’re going to have to figure out a lot of things by yourself. Sure, you’ll hopefully get some supervision, and people will be able to answer a lot of your questions and work with you. But you’ll be expected to tackle something, learn about it, and get it done.

Here’s one that I completely agree with Joel: Make sure you get a degree, and do the best job you can with it. Sure, a degree doesn’t measure many things, but getting a good GPA means that you were able to stick with something for four years, even when things got tough or when you had to do things that you didn’t feel like working on. Working in games is not all fun (even if it’s all games), so making sure that people are not easily discouraged and can get things done is very important.

Another way of showing that is, as I said earlier, by working on projects on your spare time. That shows someone who went to the effort of creating something while learning something new. It doesn’t have to be a super-polished, finished game, but it should be more than a couple of classes that compile without errors and print “OK”.

Well-rounded education.

Knowing things outside of games is a good thing (knowing the detailed history of the Star Wars universe doesn’t really count). Taking and doing well in classes in a variety of topics in college is a good start. You may think that your South American archaeology class will never be of any relevance, but you’ll be surprised how things you learn there will come in useful in the most unexpected ways.

Make sure you do something beyond games. Take up a hobby of something totally unrelated. Some of the best candidates are art enthusiasts, practice sports seriously, are into oriental philosophy, or play the viola. I always ask about people’s hobbies during an interview. Usually the weaker candidates won’t have any hobbies or their only hobby is playing computer games.

I really think that if you’re going to dedicate yourself professionally to games, you need to have some interests in other areas. Also, being familiar with wildly different subjects allows people to approach problems from a completely different angle and come up with very creative solutions. Don’t discount the importance of a well-rounded education.

One thing you should not worry about at this point is specialization. If you have one in mind, that’s fine, and share it with your employer so you can plan a way to get there. But keep in mind that at first, breadth is more important than depth. It’ll be much better for you to learn as much as possible about game development in general. The brightest graphics guru who only knows about graphics will not be half as effective as he could be if he had broader experience developing games.

However, one specialty you can jump straight into is tools. Learn the APIs. Write some tools. Create an editor for an existing game. However, don’t think of tools as a temporary thing to pay your dues. Tools are an extremely important part of game development, now more than ever, so you can make a full career as a tools programmer.

How about people from other software industries with some years of experience? There’s a certain bias against them in the industry. On one hand, they’re not considered to have the right “experience,” and then they ask for too much money because they have several years in development already. You can bring a lot of experience, and a lot of it will be different. That’s very valuable, but the company needs to see that. Play that angle in your resume/interview. Explain how your skills can be invaluable to the company (and that also shows you’re familiar with the development process). Doing a game-related project on the side can go a long way to convince a company that your heart is in the right place.

If you only take one thing away from this article, this should be it: Always be looking to learn new things. Always read new books. Always try new things. Always be willing to listen to and try a different approach. Someone like that will quickly gain a huge amount of experience and become an invaluable member of the team, but the converse (someone with lots of experience not willing to learn anything new) is nearly useless in a rapidly-changing field.

Having said all that, I’m afraid we’re not currently looking for any entry-level positions at Sammy Studios. We might be hiring again this summer, so check back then. In the meanwhile, hit the books and sharpen up those skills.

  • http://members.rogers.com/robert.segal Rob Segal

    Definitely some good points there Noel. I always believed having interests other than games helps to further your software career. I’m not in the games industry presently but I do hope to be there one day. It’s nice to have some of my thoughts confirmed by someone who is there.

  • Dan

    This is the article I’ve been looking for! It’s great and explains everything I wanted to know simply!

    I finished my degree in Computer Science last year and now I’m teaching English in Japan. I intend to do this for two years and wanted to use my spare time to prepare myself better for a job in Game Development. This article suggests some goals that I can achieve while I’m over here.

    Thank you.

  • http://www.planetcerulean.com/candle/index.php?p=131 making and breaking games

    Qualities in a game programmer

    Noel Llopis wrote up a great article on what he looks for in a game programmer. I have two reasons for writing. One is to expand on this idea and write about what I look for. The second is to shamelessly plug the current opening that Blizzard North …

  • http://www.glassegg.com Nguyen Binh

    Definitely a good guide!

    Thank you!

    Anyway I’m working on a game company now. :)

  • http://nesnausk.org/nearaz/ NeARAZ

    Great! A perfect companion to Joel’s article.

    Alas, I just found I’m doomed – I don’t play computer games :( Not that I wouldn’t like that… but they eat lots of time, and I can live without the games.

  • http://blogs.wdevs.com/tybon/archive/0001/01/01/2097.aspx Tybon

    Good Article For Game Programmer Wannabes

  • http://koex.dyndns.org/blog Max

    Nice reading!

    I like your point of view on new employees, it really encourages me in what seems to be my future job (I’m currently studying software engineering in Sweden). It’s pretty cool, I just read the book Break Into the Game Industry and it feels like I’m getting a grip on the game development business. Or at least from an external perspective. Anyway, learning new stuff is something i dig a lot already and I couldn’t have any brighter job before me than one where I had to learn allot, thanks for the article!

  • Zaid Mian

    Excellent article! However, one thing that really bums me out is my GPA. Unfortunately I had a number of other very serious things going on in my life at key points of my secondary education, so my GPA suffered a bit. I’m currently working at IBM, but can’t wait for the opportunity to switch over into game programming.

    Noel (and anyone else for that matter), any pointers for how I can overcome this low-GPA hurdle?

    • http://twitter.com/jtrusler1988 James Trusler

      0x1fff28c4 ?
      hah.. pointers.. get it ^_^… ah comeonnn.

  • http://www.gamesfromwithin.com Noel Llopis

    Low GPA doesn’t mean you’ll get rejected by any means (and some companies don’t seem to value it very much). I would suggest that you make up for it with by improving some of the other aspects: learn serious software engineering while you’re at IBM, work on a couple of interesting game-related projects on the side, make sure you polish your C++, etc.

  • http://tabernadelturco.bitacoras.com/archivos/2005/01/26/como_ser_un_buen_programador_de_videojuegos La taberna del turco

    Cómo ser un buen programador de videojuegos

    So You Want to Be a Game Programmer? es el título de un artículo que os recomiendo leer si os interesa el mundillo ese o por lo menos tenéis curiosidad.

  • http://www-cs-students.stanford.edu/~amitp/gameprog.html Amit Patel

    Thank you! This article is great. I’ve been wondering lately what I really got out of school. I’ve forgotten much of the stuff I learned in class (except the stuff I use). I think the best part of college wasn’t the classes, but (a) side projects I did in order to learn the things in class, and (b) all the smart people I got to be around. I learned a lot less software engineering than I wish I had gotten. For example, we never used version control or unit tests in any of our classes. :( Things like that I learned later, both at work and by reading blogs and wikis and books.

  • http://athenaslegacy.blogspot.com/2005/01/becoming-game-programmer.html Athena’s Legacy

    Becoming A Game Programmer

    Yet another article (man, there seems to be a lot of these lately…)

  • http://www.armox.com/~code3d/blog/pivot/entry.php?id=236 Irrlicht’s blog

    How to become a game programmer

    • Thanh

      follows me :V LOL

  • http://www.kevinmandeville.com Kevin Mandeville

    Great article Noel! I’m currently a Team Lead/Senior Engineer for a very successful internet company and have been here for 5 years. We work in Java and I don’t have a good background in C++, but I intend to learn it in my spare time. The quesiton I have is, do you have any resume tips? My expertise is all consulting and J2EE related. How can I spin my love for games, hard work ethic, and ability and thirst for learning new things? I’ve sent my resume to a few local game companies (unfortunately there aren’t many in MA) but have never heard so much as a Thank You response from them.

  • Quest Valliant

    Joel’s article is really great, it really answers many of my questions and decreases much of my anxious..

    Now I still study at college, but this August i will graduate..After that…hehe, i still don’t know what to do :P but, i jst know that, i will keep on progress straight forward to my dream, become a game developer at SquareEnix (better if can be a director XD)..

    Wish all of u who possess a dream that ‘dominate’ game industry same as me…GOOD LUCK~~

  • Gabriel

    I got really sad when i saw “You may think that your South American archaeology class will never be of any relevance”… i live in Brazil and im attending a COMPUTER SCIENCE college… and im learning a lot about game development… i have game programming classes… and im thinking of doing some specialization in GAME PROGRAMMING here in Brazil.

    So, i ask you, please, answer sincerely. Do i have ANY change of getting a job in game developing in USA ? i have english certification and all this stuff…

    Plz, answer me! im not a fool….

    THX

  • http://www.gamesfromwithin.com Noel Llopis

    Gabriel, my comment about South American archaeology was an example of a class that might seem irrelevant to game developers but it can actually come in useful.

    As for your chances to work in the US, there are many companies that will bring in developers from other countries. Your biggest barrier will be getting noticed. Start working in Brazil or put together an awesome demo and then approach companies saying “see, I wrote this”.

    Also, only fairly large companies will have the resources to deal with Visas and bringing people from other countries, so keep that in mind when you decide to approach companies. Good luck!

  • Gabriel

    Thank You Noel!

  • http://indiegamedev.tucows.com/blog/_archives/2005/3/5/399150.html IndieGameDev

    Games from Within

    Games from Within is a weblog written by Noel Llopis,

    who has a pretty impressive game d…

  • James Taylor

    What software do you need to design games and where can you buy it

    • Bradly Smith

       Game Maker is an excellent tool for making your designing and making playable games without any programming experience required.

      • 16chrisfields16

        Game maker is old and too easy and out of date to use.

      • http://twitter.com/jtrusler1988 James Trusler

        In that case, why not try out touchdevelop by Microsoft… similarily as easy to code for :)https://www.touchdevelop.com/

    • Sukdev

       Scratch is good but is only good for 2d game designers.

    • 16chrisfields16

      The main software industries use are Maya, Mudbox, 3ds max, unity, unreal engine
      U can get free 3 yr student lincense for maya mudbox and 3ds max if u r a student in any institution bcollege, high school or middle school. Google student autodesk.
      For unity google unity 3d
      For unreal google udk game development kit
      all these are free

  • Anders Højsted

    So what if I want to be a gamedesigner/conceptdeveloper?

    /Anders

  • http://anonymoushomosapiens.blogspot.com/2005/03/programmer.html heterosapiens

    Programmer…

  • Mainak

    i’m in the 11th standard and want to be a professional AI programmer. What do I do? Where can I get my right degree?

  • naim lampard

    thnx for sharing ur knowledge

  • Butter Sauce

    My parents always tell me that if i wanna be a game programmer, i need to stop playing games and study. I thought i couldnt get a job like that so i study books about c++ and progamming language at night, can i still get a job like this? I havent played much of the games of the company that i wanna join and i dont think there would be much time to in the future. Also, if i aint from America, can i join the American game company?

  • Jordanwc

    thanks for the help im going to university soon enough to do a programming degree, im glad i know now to read more about c++.thanks for all of the info!!!

  • Coolio

    this is really cool   me and my friends are working on a game. id like to get e job in game programing this really helped

  • TG

    it’s better to be a game designer…

  • Joshuad Norman

    What subjects do u have to have taken in high school,is science required because I did take IT

  • CLMIEKSZT

    SON TOOK CLASSES AND HAS NOT FOUND WORK IN 2 YEARS.  ALL WANT EXPERIENCE. 

    • Nmigger

       projects

      • http://www.facebook.com/oldcomptmp Asher Mane

         projects what?

      • Guest

        Most likely they would want to see evidence that you know what you are doing. By turning in some projects that you have worked on by yourself like creating small/simple games, they see that you can do what a game programmer does. They want experienced people.

  • Nate Waldon

    I would like to thank you on this informative peice and I would love to get a job working for Rockstar making all he great games they put out over the years. I also agree on the hobby just playing games is not enough people who have other interest often put things in a different perspective than people who are focused on one thing only. Thanks again for the information on how to get started

  • Staarwaar

    thank you

  • Yangyangdaniel12

    i want to be like them

  • Daniel Price

    This is great advice. Thank you for sharing it with us. I’m 18, and i’ve been interested in programming since 10. I actually programmed my first game in PowerPoint, before using a couple of the more well know, free, software development tools. I’d say that having a logical mind definitely helps. Self taught programmers, tend to make it further than most. 

    • Some Man Named Holsri

      i have been interested when im 10 ive already started i only 10 ;)

  • Alex

    Thank you very very much for this informative post.  I am currently a C# and .NET Software Developer who is looking to get into the Game Development Industry in a few years and this post really gave me something to work on.  Thank you again.

  • Guest

    If you can’t get a job. Make your own game and make it good, real good.

  • Gospelsuccess

    I am about to start college but which subject is better to study software development or computer science?

  • Sivaramsai

    hai, my name is sivaramsai i am a student in e.r.higher secondary school in trichy, Tamil Nadu,India i want to know the path that how to be study and to became a game programmer. can u please help for me

  • Yosa Yon

    I am a third year psychology major, and I have zero experience in any IT related field. I had no idea that my passion for video games could stretch so far as to question my major. What would be your advice?

  • http://twitter.com/jtrusler1988 James Trusler

    I’ve been working in professional website application development for 7 years now (im 24). Since I was a little kid, I have dreamt of programming for a game company or creating my own.

    I have made plenty of games including good old Amos games using Deluxe paint for the graphics mu ah ah ah and also some on QBasic (ah good old days). I then got onto creating narly little websites using dreamweaver with table layouts… yup, I know. Finally I learnt HTML and CSS and that moved me onto learning PHP where I joined a small web application company. Soon after It was required that I learnt javascript and ASP classic (oh that sucks by the way). I have also through this time been the designer for most if not all of the applications the 2 companies I have been in has made but have worked on large existing projects too from existing design and code…

    I finally came to the end of my tether about 3 years ago when I got seriously into developing games for the browser to try and branch my gap in what was just a set of the same old database driven websites… about 2 years ago, html5 and canvas came around and I started to use that to create games but a few months later there was WebGL… This was my turning point, learning about coding performance and mathematical techniques in 3d graphics was massively exciting to me and I no longer needed viagra… hah! I never had the time to finish any 3d project due to them requiring massive amounts of time which I never had when needing to work and getting home and trying to continue in the evenings… but I had managed to get Blender models into my javascript WEBGL code and make a few collisions, shadows and cool control systems. All good fun.

    Around that time I had also started to get interested in DirectX being quite a big fan of Microsoft and its research and the extensive amount of games I was playing that used DirectX. I finally straddled the horse and set off to learn C++ without thinking about games, rather just grasp the concept of writing efficienty and knowing how the computer works… I found it essential for writing anything and I soon found myself realising better techniques of writing code even in regards to PHP or C#.NET/Java (Which I also did a few projects in). I also followed an online tutorial on youtube just recently (Chili DirectX) which I thoroughly enjoyed and i’m now working on a large scale game to hone the combination of skills I have acquired. The goal is to get it on to the windows app store and also Steam as a standard desktop application… Perhaps onto windows phone, i don’t really know.

    I feel my time has come to now move from creating web applications at the company i am in but until my game has been completed, i’m not really sure any game company is going to give two shitaki mushrooms about how much i know about this and that… So hopefully I’ll be in the credits in a few years time.

    One thing to say is, I wish i had more time in the evenings after work, because learning C++ and game techniques and directX api or OpenGL api and 3d math has made me both tired and overwhelmingly stressed. But it’s all for a cause… I have to be a game programmer… It’s my goal.

    Thanks for the writeup, i found it inspiring and motivational… wish me luck! Sorry for my poor sentence structure etc… but I got bronchitus, aint nobodddy got time for that.

    • Denis

      Haha, I do wish you luck !

      I’m pretty much at the same point. 25, self-taught, working as a backend developer for a small but well-known web agency and wanting to get into graphics programming (not necessarily games, I’d love to get to work on artistic installations or real time graphics for live performances).

      The thing is that I still have a lot to learn about maths, which I’ve never really studied, and it’s hard for me to find the time as I’m working…

      I have books on linear algebra, AI, and plenty of other fascinating subjects but I’m only reading some chapters sporadically, not really seriously, and I sometimes feel overwhelmed by the amount of things I need to know – and that I don’t have the time to investigate (as I would).
      Not that it’s not within reach, but it’s just *too much* when you have other priorities.

      I’m thinking of taking a break for a year or two and travel and study on my own. Create some projects for myself, build a personal portfolio I would be proud of. Maybe go overseas and visit the NY Hacker School.

      I also badly want to learn electronics and theoretical computer science – high ambitions for someone like me who never understood why maths were actually so damn interesting…

      Well. I hope I could learn all this things, and others, in this life.
      Wish me luck as well :)

  • Jacob Reed

    Thank You, most useful information I have read online in a while. Definetly changed my thoughts and path in life. Was going to be a regular programmer, but I think im going to focus on game programming.

  • paolito gil

    irealy want to be game maker,can you give a lesson?

    pls.

  • sanchit mital

    Thankyou And hope oe for the best…

  • MD Al Kaiyum Rumman

    excellent post. keep it up!

  • I_LOVE_DAIRY_MILK

    I’m currently an undergraduate in computer engineering (my final year). I’ve done many programming languages including C++, Java (Android SDK), JavaScript, PHP, Visual Basic and Python. I’ve created many simple, web-based games with JavaScript. I would now like to start out at C++. We’ve covered both Data Structures and Contemprory Concepts in Programming (With Intro to QT framework). I’ve never done OpenGL. I’ve seen many mainstream games being developed in OpenGL. If I planned on creating a game like Half Life or Counter Strike would it be necessary for me to use OpenGL?