Coders: Prepping for an industry job

Grab your favourite IDE and tinker with the innards of game engines

Coders: Prepping for an industry job

Postby ChopperDave on Sun Aug 05, 2007 6:12 am

Though there are a few items that could apply to everyone, this info is tailored to programmers.

Be advised, I’ve only dealt with US studios, so the information below may not apply to studios in other parts of the world.

----

Alright, so if you’ve been looking for a programming job in the games industry, the odds are definitely against you. When studios look for programmers, they’re usually looking for those who already have professional experience, be it in the games industry or just software engineering in general. A lot of times they won’t list previous experience as a requirement, but it will definitely top their list of desirable qualities in a candidate. However, many of you will be looking to get into the industry right after finishing school, so you won’t have that experience. Instead, you will have to rely on developing your core skill set extensively. First, let’s take a look at what skills you will need for a programming position.

SKILLS

Primary Programming Languages (C++, C#, Java): The vast majority of game companies use C++ as their language for developing the game code, so you will definitely need to master this language. Know how to use pointers and references, virtual functions, and if you want to really impress, learn how to implement your own template classes.

C# is quickly becoming the language of choice for developing tools and support programs for games. If you’re interested in building things such as level editors, then you will definitely want to look into this language. Many game companies till develop their tools in C++, which means they use MFC for interface support. However, as C# rises and MFC becomes more archaic, if you want longevity for your tool building skills, you’re better off investing time in developing your C# skills.

Unless you plan on making mobile games, it’s unlikely you will ever use Java. The only time it’s seriously used in developing AAA games is for building the server/client platforms for online games, usually MMOs. If you are interested in building online platforms, it might be a good decision to learn some Java.

Scripting Languages (Lua, Python, Perl): While few positions really require that you know a scripting language, it would be a benefit to know one anyway. Determining which one, though, is a bit tricky. If a company builds their own engine, than they more than likely have made their own scripting language for use with that engine. In this case, it doesn’t really matter if you know a scripting language or not. However, some companies do use Lua for supporting their games (CryEngine 2 uses Lua for support), and many are starting to adopt Python as well. As for which one to learn, it’s really up to you. Pick one that you like and go with it.

Libraries: Outside of the ones that you are required to know for your particular position (DX or OGL for graphics programmers, etc.), there are a few general use libraries you should know. If you will be developing PC games, start to learn some Win32 programming. If you’re looking towards the art side, start learning the language for art tools, like MaxScript or MEL. For networking, have a look at WinSock, as that is a relatively popular library.

Techniques: Learning design patterns would be a major advantage to you, specifically the Factory and Singleton patterns, as many studios employ both of these. Learn to use interface (abstract) classes and macro functions. Practice optimizing C++ code.

One of the most important techniques to learn is multithreading. Now that multi-core processors are mainstream, studios are migrating their tech to take advantage of the new CPUs. Also learn how to write code that lets the game interact with the operating system.

Software: Visual Studio is the #1 choice for developing code, so I recommend downloading the express version and playing around with it. Try making your own projects, writing custom build steps, and using command line parameters. Knowing it inside and out will mean you can spend more time working on code and less on screwing with the settings. Learn to use the debugger extensively, including the call stack and watch list.

Be very familiar with source control, as every studio uses it. Most will use either AlienBrain or Perforce (or a combination of the two), both of which are outside your price range, so use a free one for now. Download and install SVN or CVS and try making repositories. Learn to resolve conflicts, handle merges, tag things, make branches, and also reintegrate those branches into the trunk.

Math: 3D math reigns supreme in games. This means you will need to learn how to work with vectors and matrices. Learn about dot and cross products, how to transform vectors between different coordinate spaces using matrix operations. Learn how to transpose, invert, and multiply matrices and vectors. Learn how rotation matrices are built, look into quaternions and Euler angles, investigate the properties of normals. Know this stuff inside and out.

It would also be beneficial to learn mechanical physics. You should definitely know about velocity, acceleration, trajectories, and forces. If you’re going for a gameplay or physics position, do your homework.

Writing: You don’t have to be a poet, but you need to be able to clearly communicate what you mean. Too much information is better than too little. Write in complete sentences, use correct grammar, and remember that SpellCheck is your friend.


EXPERIENCE

There is no substitute for experience in making games than to actually make games. General software engineering experience is very useful as well, because it introduces you to large scale team projects and good software engineering practices (assuming the company is any good). However, none of you will have games industry experience, and while taking a regular software engineering job is the simplest approach, if you grab a job you don’t like it will be the most painful too. So your third option is to make your own games.

Mods: A fantastic place to start. You get to work with technology that is used by studios, and you are also introduced into working within an existing codebase rather than building everything from scratch. And since you can’t modify the engine with a mod, it will get you into the habit of not tinkering with code that isn’t yours, and only editing the game code, leaving the engine itself unaltered. Experience with this makes you more marketable and reduces the learning curve if you join a studio using that engine.

Stand alone games: Also a good choice. The engine will already be provided (unless you build your end), but you will need to build the game code form scratch. You will also be able to modify the engine code if you want to make some custom changes to the pipeline. However, this means you are also more susceptible to breaking the engine.

Engine: Building your own engine is a very rewarding experience. It teaches you how to develop the various systems to run a game, and gives you a chance to work at the lowest level of code (this is where Win32 programming would come in). But it takes a lot of work, and in the long run you only benefit the most if you plan on becoming an engine programmer.


EDUCATION

There will be a lot of different opinions on this, but having a degree is a requirement for most companies. And even though you can probably get a job being self-taught, a degree is a much better alternative. There are two kinds of degrees you could get: a standard Computer Science degree or a Game Programming degree.

Which degree is a better choice is impossible to answer. Just as many companies prefer game degrees and the ones that prefer regular degrees. For me, I think a standard CS degree is better. Going for one of these degrees exposes you to more sides of computer science since it’s not all game related. This means if the games industry does not work out for you, you still have a fallback where you can get a regular software engineering job.


CONTACTS

Making contacts is the best and easiest way to get a job in the industry. However, making contacts is very difficult because chances are you don’t personally know anyone in the industry. The best way to get started is to mingle with other developers, and a good place for that are conferences.

GDC: The best place to be. Save your money though, because it will cost you a good deal of money to register. But it’s worth it. You’ll shake hands, chat with people, give them your resume (if you want, make your own business card and hand those out too), and collect business cards. Try to attend all the gatherings you can – award shows, panels, after parties, everything. Get to know anyone and everyone.

SIGGRAPH: Like GDC, but for graphics. It also tends to be geared more towards artists as far as recruitment goes, but it’s still a good place to meet people. And like GDC, registration will cost you.

QuakeCon: I’ve never been, but developers sometimes show up to meet their players, and so it’s another opportunity to meet people.

LinkedIn: A contact management website used by many in the games industry. Get yourself an account (it’s free) and fill in your profile as much as possible. As you meet people, make them a contact on the site. You may be able to network through the site and get yourself a job. Who knows.


APPLYING

So you’ve got all the above under your belt, so now it’s time to prepare yourself for applying to game jobs. The first thing you are going to want to do is make a list of studios that you intend to apply to. Don’t just list ones that you like, try to list ones that would give you some great experience (i.e. EA, though it has a bad rep for running its employees into the ground, is actually a pretty good starting point). Then what you want to do is research the company. Find out what kind of games they make, what technology they use, what their business practices are, what benefits they offer, and even what their location is like. You’ll want to ensure that the studio is a fit for you.

Bear in mind that you will get rejected. A lot. But stick with it. Eventually you will find a company willing to take you on.

Internships: If you can apply to one, do it. This is hands on experience with a real studio, and there is no substitute. However, most studios require that their interns are pursuing a degree of some kind, which means you can only get one when you’re in college. Also, the duration for internships can vary, from lasting for the summer to up to a year long. Be prepared to take time off from school just in case of the latter. But the plus side of this is that if you do well in the internship, you might secure yourself a position with the company immediately after graduation.

For a list of internships, see this thread:

viewtopic.php?t=18347

Full-time: Companies are more picky about who they plan to hire full-time because they will be investing a lot of money into you, and they want to make sure you’re worth the investment. If you plan on going for a permanent position right out of school, you need to make sure that you’re on point.

Resumes: The cornerstone of your application. Since you’re not an artist or level designer, you most likely won’t have an online portfolio to show, so this is the piece of paper that will represent you. There are an infinite number of ways to design your resume, but you will want to order thins on the resume according to relevance. This means if you have an objective that goes first. You will probably want to follow this with work experience, unless your previous jobs are completely irrelevant to the job (i.e. you were a janitor or something). Other things to add are any game projects you did in your spare time, your education, and anything else you can think of that might be relevant. Don’t forget to add your name and contact info at the top, including your address, email, home phone, and cell phone if you have it.

Code Samples: You will want to prep a good code sample to show. Not a whole lot of companies ask for one, but it’s best to be prepared in case they do. You need to be able to give them code, specify what part of it you wrote, and what it’s supposed to do. If the code is executable, include an exe with your code so they can see it in action. Make sure to only show your best code – just because it does something cool doesn’t mean it’s your best.

You'll want to target your code samples at the particular area of programming you want to work in. Most people starting out will take any programming position, and while there are a few that are fairly generic and don’t require a specific skillset, it's better to know what direction you want to go.

For instance, if graphics programming is your thing, you'll want to probably make at least two code samples: one using a 3D API like DirectX to show you know how to use one, and a second to show that you understand shaders. Program a cool effect like depth of field or motion blur. Even better would be to combine the two samples and show them you know how to set up a rendering pipeline from scratch -- that'll really knock their socks off.

If you want to do gameplay, break out UT 2004 or something and make a small custom game type or weapon. It doesn't have to be fancy, but it does need to show that you understand gameplay -- how to make it balanced and fun. If you want to try tools programming, try making small widgets for your favorite modding tool. Open up Source and write some scripts to automate tasks or make them less painful. I know that Wraiyth is working on a GUI application for building shaders for source, which is way better than messing with the commandline the whole time.

Just focus on what area you really want the most first. If you finish those code samples, then start branching out and showing more variety. Hopefully you'll get the type of programming you want, but if not then the variety in code samples will show them you can work in almost any area (which makes you more desirable).

Cover Letters: Even if they don’t ask for one, you should include one anyway. And don’t send a generic one – tailor it for each specific studio you deal with. Refer to their games, their history, what you like about them, and why you want to work for them. You need to give them the indication that they are your number one choice.


APPLICATION PROCESS

After sending in your application, you’ll be playing the waiting game. Depending on the size of the company, the number of applications it receives, and how urgent it is that they fill the position, their response can be immediate or fairly lengthy (I’ve had people respond within 1 hour of my submission, and others that took several months). And don’t put all your eggs in one basket. Once you’ve applied to one company, apply to another. If you handle applications one at a time it will take forever for you to get a job.

If you are lucky enough to get a favorable response email, chances are they will either want to schedule a preliminary phone interview, or skip straight to the programmer test. If they ask you what kind of salary you expect, don’t give them a number. Try asking them to suggest the typical salary for someone in your position, and then you can negotiate from there. Most studios will be agreeable to that. Some studios won’t ask you what you expect for a salary, but will instead ask for your salary history so they can predict how much they should pay you.

Programmer Test: These vary substantially between studios. Some will ask general theory questions, others C++ and math questions; some will be timed, others you can do at your leisure; some will be fairly short, others very long. It’s difficult to predict exactly what kind of questions you will be asked, but I’ll try to list some of the ones that are likely to be asked.

TODO…sorry

Phone Interview: You will be speaking to probably about 3 people at once, and since they’re on speaker phone, it’ll be rather difficult to understand them 100% of the time. Don’t be afraid to ask them to repeat something if you didn’t understand it.

Your interviewers will most likely ask you to talk about yourself, what experience you have, what are your goals for the job, and why them. After you give them info about yourself, they’ll ask some technical questions. Some will be similar to the ones on the programmer test, others will be brand new. But since you are going to be answering these questions on the spot, they probably won’t ask any complex questions.

Eventually you will get a chance to ask your questions. Some good ones to ask are where they think the studio will go in the future, what’s it like to live in that city, what’s a typical day like, etc.

Most importantly, they won’t expect you to know everything. If you don’t know the answer to something, say so.

On-Site Interview: The last step in the application process. How long this takes varies from company to company, but typically it’s an all day event. They’ll send you through pairs of programmers from different teams, with series of technical questions. These will probably be more conceptual questions on a whiteboard, because you already showed them you know how to code with the programmer test. You’ll also most likely meet with the technical director, who will have technical questions of his own. Somewhere along the way you should meet with an HR person, who will discuss the company benefits with you and show you around the studio, as well as talk a little bit about what they’re working on.

It’s up to you what questions to ask the people you interview with. Since you will be new to professional game programming, you will want to know what kind of training program they have setup to bring you up to speed on things. Also, find out if they have a coding standard and a wiki of some kind that’s filled with useful info like the codebase’s documentation. Don’t be afraid to ask what the core hours are – each studio has different hours for when they expect every employee to be there, so make sure you figure that out.

There’s a lot of opinions about how you should dress for an interview. Even though the games industry is known for it’s very casual dress code, for the interview you may want to dress up some. Suit and tie is not necessary, but a nice dress shirt and some solid khakis would be a good choice. But it’s entirely up to you how to dress.


CONCLUSION

That’s about all the useful stuff I can think of. I realize a lot of it may not be very helpful, but I’m not sure how much I can say without violating written agreements. If you have any questions, please feel free to ask.


LINKS

How to Make a Game Programming Portfolio
Last edited by ChopperDave on Tue Dec 02, 2008 4:42 pm, edited 3 times in total.
User avatar
ChopperDave
Rockstar San Diego
 
Joined: Wed Feb 21, 2007 6:06 pm

Postby Generalvivi on Sun Aug 05, 2007 6:40 am

That was really good man . I hope this helps beginner coders out that are trying to get into the industry. I know I'll be pointing them at this thread for reference.

-vix2
Generalvivi
Irrational Games
 
Joined: Fri Feb 18, 2005 1:41 am
Location: Boston

Postby Garrador on Mon Aug 06, 2007 12:38 am

wow, I can imagine this helps coders who want in, a lot.
A lot of tips in here can be used for other apps too. You are too nice. =)
You click on Build or type
make (or some equivalent), and you are astonished, then mortified, as you realize that the whole world is being
recompiled and relinked!
- Scott Meyers
User avatar
Garrador
Veteran
Veteran
 
Joined: Fri May 12, 2006 10:39 pm
Location: Norway

Postby HarvP on Thu Aug 09, 2007 12:10 am

This really puts thing into perspective. I got as far as the programmer test and didn't make it to the on-site interview. I know I have to work on things with my coding, but my weakest area are code samples. I'm never sure what do for one.

Also macro functions and pointers are the biggest things to know. Also heavy 3D math. On my programmers test there were specific questions about cross and dot products.
User avatar
HarvP
Member
Member
 
Joined: Tue Jul 31, 2007 7:56 pm

Postby ChopperDave on Thu Aug 09, 2007 3:39 am

I know I have to work on things with my coding, but my weakest area are code samples. I'm never sure what do for one


You'll want to target your code samples at the particular area of programming you want to work in. Most people starting out will take any programming position, and while there are a few that are fairly generic and don’t require a specific skillset, it's better to know what direction you want to go.

For instance, if graphics programming is your thing, you'll want to probably make at least two code samples: one using a 3D API like DirectX to show you know how to use one, and a second to show that you understand shaders. Program a cool effect like depth of field or motion blur. Even better would be to combine the two samples and show them you know how to set up a rendering pipeline from scratch -- that'll really knock their socks off.

If you want to do gameplay, break out UT 2004 or something and make a small custom game type or weapon. It doesn't have to be fancy, but it does need to show that you understand gampeplay -- how to make it balanced and fun. If you want to try tools programming, try making small widgets for your favorite modding tool. Open up Source and write some scripts to automate tasks or make them less painful. I know that Wraiyth is working on a GUI application for building shaders for source, which is way better than messing with the commandline the whole time.

Just focus on what area you really want the most first. If you finish those code samples, then start branching out and showing more variety. Hopefully you'll get the type of programming you want, but if not then the variety in code samples will show them you can work in almost any area (which makes you more desirable).

Good luck.
User avatar
ChopperDave
Rockstar San Diego
 
Joined: Wed Feb 21, 2007 6:06 pm

Postby HarvP on Fri Aug 10, 2007 12:32 am

ChopperDave wrote:
I know I have to work on things with my coding, but my weakest area are code samples. I'm never sure what do for one


You'll want to target your code samples at the particular area of programming you want to work in. Most people starting out will take any programming position, and while there are a few that are fairly generic and don’t require a specific skillset, it's better to know what direction you want to go.

For instance, if graphics programming is your thing, you'll want to probably make at least two code samples: one using a 3D API like DirectX to show you know how to use one, and a second to show that you understand shaders. Program a cool effect like depth of field or motion blur. Even better would be to combine the two samples and show them you know how to set up a rendering pipeline from scratch -- that'll really knock their socks off.

If you want to do gameplay, break out UT 2004 or something and make a small custom game type or weapon. It doesn't have to be fancy, but it does need to show that you understand gampeplay -- how to make it balanced and fun. If you want to try tools programming, try making small widgets for your favorite modding tool. Open up Source and write some scripts to automate tasks or make them less painful. I know that Wraiyth is working on a GUI application for building shaders for source, which is way better than messing with the commandline the whole time.

Just focus on what area you really want the most first. If you finish those code samples, then start branching out and showing more variety. Hopefully you'll get the type of programming you want, but if not then the variety in code samples will show them you can work in almost any area (which makes you more desirable).

Good luck.


Thanks for the advice. The area I really want to get into is AI programming. Code samples for that are kind of tough, but I think I could make a decent one.
User avatar
HarvP
Member
Member
 
Joined: Tue Jul 31, 2007 7:56 pm

Postby Jasard on Fri Aug 10, 2007 12:57 am

Bookmarked, I vote for it to have a spot in the Tutorials or Articles section. :wink:.

Excellent stuff.
User avatar
Jasard
1337 p0st3r
1337 p0st3r
 
Joined: Fri Nov 12, 2004 5:59 pm
Location: UK

Postby ChopperDave on Fri Aug 10, 2007 3:37 am

Thanks for the advice. The area I really want to get into is AI programming. Code samples for that are kind of tough, but I think I could make a decent one.


Fire up a mod in Source and tamper with the Combine AI. Make them do something cool and original. Something like that would mean extra points b/c anyone who knows Source knows that AI programming is a real pain.

Or, for a standalone code sample, do some pathfinding. Show them you know A* -- that's the cornerstone of AI.

EDIT: Added my previous post about code samples to the OP.
User avatar
ChopperDave
Rockstar San Diego
 
Joined: Wed Feb 21, 2007 6:06 pm

Re: Coders: Prepping for an industry job

Postby Forceflow on Tue Jan 15, 2008 11:02 am

Great article, lovely read.
User avatar
Forceflow
1337 p0st3r
1337 p0st3r
 
Joined: Sun Jul 16, 2006 12:13 pm
Location: Belgium

Re: Coders: Prepping for an industry job

Postby Chrustec on Tue Jan 15, 2008 12:04 pm

Awesome post Chopper Dave. I know from my experiences that the interview stage can be pretty intimidating. After reading your article, it is very applicable to all disciplines as well. Its good to see this sort of material being written up.
Kind Regards,

Christopher [Chrustec] Glerum
http://www.chrustec.net
Past Project - viewtopic.php?f=3&t=30060
viewtopic.php?p=296414#296414
User avatar
Chrustec
Regular
Regular
 
Joined: Fri Jun 15, 2007 5:51 am
Location: Melbourne, Australia

Re: Coders: Prepping for an industry job

Postby Sacul15 on Wed Jan 23, 2008 5:30 am

I'm a senior in high school and this is my second year of programming, first year of C++. Am I behind in the race, or about where I need to be?
User avatar
Sacul15
May Contain Skills
May Contain Skills
 
Joined: Fri Jul 28, 2006 5:47 am
Location: Out Californee-way

Re: Coders: Prepping for an industry job

Postby ChopperDave on Wed Jan 23, 2008 6:53 am

Sounds like you're doing fine. But it really depends on what you learned your first year, what you’re learning this year, and what’s coming up next. You’ll want to make sure you hit all the key topics. Since its high school they may skip or gloss over important things (i.e. my AP Comp Sci course in high school completely skipped linked lists and barely touched recursion :?).
User avatar
ChopperDave
Rockstar San Diego
 
Joined: Wed Feb 21, 2007 6:06 pm

Re: Coders: Prepping for an industry job

Postby Sacul15 on Wed Jan 23, 2008 2:14 pm

I took Visual Basic my first year, and now in C++ I've starting to get into building classes and pointers, and I've learned a bit of recursive programming as well. I don't know about some of the other stuff, but I'm ahead in the course this year, so I'll have some free time later on to learn those things.
User avatar
Sacul15
May Contain Skills
May Contain Skills
 
Joined: Fri Jul 28, 2006 5:47 am
Location: Out Californee-way

Re: Coders: Prepping for an industry job

Postby bobthehobo on Fri Feb 22, 2008 9:01 pm

Thanks for the post, quite informative.
I took VB in high school, and I'm planning a minor in CS. Right now I'm taking a bunch of math classes, since they are all prerequisites for the actual CS classes.
My question is, I know coding is heavily based on math, but since I'm no genius at it, do you see it as an absolute necessity? As in, should I be concentrating more on mastering mathematics, rather than good programming style and knowledge?
Image
Do the internet a favor: proof read your posts.
XBL: Doctor Fifer
User avatar
bobthehobo
Pheropod
Pheropod
 
Joined: Thu Sep 08, 2005 9:27 pm

Re: Coders: Prepping for an industry job

Postby ChopperDave on Wed Mar 05, 2008 3:56 am

Well, the obvious answer is focus on both.

Math is absolutely critical to programming games. Every company you interview with will test your math knowledge by asking you about vector and matrix math and operations. They will also ask you many programming questions, but some companies will be happy with pseudocode answers. Knowing a language like C++ is good, but they're more concerned with whether or not you know the fundamental concepts of game programming more than anything.

So, do well in your CS courses, especially the earlier ones since they're all fundamentals. Also make sure you do well in your 3D math/linear algebra courses as well. Even if you're a good programmer, if your math sucks no one will hire you.

I also recommend taking at least one graphics programming course, even if it does not interest you. Intro courses in graphics will teach you about the basics of lighting calculations, different coordinate spaces, and will give you a taste of the practical applications of the 3D math you spent so much time mastering.
User avatar
ChopperDave
Rockstar San Diego
 
Joined: Wed Feb 21, 2007 6:06 pm
Next

Return to Programming

Who is online

Users browsing this forum: No registered users