May 18th, 2008

So You Want To Be A Game Programmer? How to get out of college and into games9

This article originally appeared in the 2005 Game Developer’s Game Career Guide.

By Matt Gilgenbach and Daniel Sass

How do you get started in the game industry right out of college?
This task is not a particularly easy one mostly because a lot of people want to do the same thing and there are only a limited number of junior positions available for fresh college graduates.
From our years in the game industry, and from what we observe of junior-level programmers and designers today, we’ve put together some basic information on how you might break into the industry straight out of college. If you want to make yourself stand out in the sea of inexperience, you need four things:
• a tight demo
• a clean and professional resume
• some experience
• a pragmatic idea of what to expect.

The demo
Finish your game or demo. When something is finished, it shows persistence, a trait that’s absolutely crucial to have to work in this industry.
“Finished” doesn’t mean the demo meets your original goal of creating a complete game that rivals the current latest and greatest game. What “finished” does mean is that the game is fully functional and relatively bug free. Hence, this usually means you have to scale back your vision.
If your original vision was to create a 3D platformer with many levels and bosses, and your final product has only one level, that’s okay. As long as that one level is totally complete and shows off your programming skills, it will be fine for a demo.
If you don’t have an artistic inclination or know any artists, it’s difficult to make a game or even a level. However, you can still work on technology. The one thing that’s important to prospective employers is that you have a demo that shows off your programming prowess and technology (and that you have the persistence to finish it). But even if you write an engine that’s better than the hottest game out there, no one is going to pay any attention to it if you only send them the source code or a demo that displays just five polygons.
Make your demo impressive. Most people who will evaluate your demo have a very short period of time to look at it, so make sure they will immediately know what’s cool about it. If you write a complicated object modeler that rivals a professional 3D modeling package, no one will invest the time into seeing the features unless you point them out. If you want to show off your modeling program, then make sure the demo starts with an impressive model that was created in your package.
Make your demo as easy as possible to view. Something that should be obvious, but that a lot of people overlook, is to make it as easy as possible to get at your demo.
The whole point of having a resume is to convince the potential employer that your demos are worth looking at—and once you’ve convinced them to view the demos, you need to make them as easily accessible as possible.
The people who receive your resume also receive hundreds of others, and they aren’t going to give you much time. Don’t waste the precious time they do give you by making them navigate a bunch of pages or folders to get at something that might impress them. Often, snail mailing your demo on a CD is the easiest way to get your demo viewed. When job screeners have an actual CD sitting on their desks, it’s quite easy for them to pop it in their computer and view it, unlike job candidates who direct them to a web site to download a potentially large (and potentially infected) file.
If you don’t want to mail your demo on CD, make sure your resume has a direct link to download the demos, as opposed to making the reviewers navigate your page to find it.
Do not show off standardized class projects. Your demo should not be a class project for which everyone did the same thing. If your class project was to create the Utah Teapot from splines, then your work isn’t particularly impressive; anyone who passed the class did the job just as well. Standardized class projects often downplay your unique talents and skills.
However, if you encountered more open-ended assignments, like “make a good video game” or “complete a project involving computer graphics,” then your project—by its very nature—has an opportunity to express something about you and your abilities.
Specifically tell the screeners what code in the demo is your own. Here’s one of the worst scenarios that can occur during an interview: You play a demo, which only shows off graphics, and you proudly say you were the game designer.
You can only impress the people looking at your demo by showing them the work you did. It isn’t impressive if you (as aspiring programmer) show a great looking demo from a graphics standpoint if you either used an existing graphics engine or had someone else write the graphics code. They will assume you aren’t very good with graphics, thus marking a point against you where you shouldn’t even have been assessed.
Instead, try to write at least a few, if not all, of the important components of your demo—graphics, animation, collision, physics, and AI—to show that you have expertise in various aspects of video game development.
Remember, you will be asked about your specific contributions to the demos you show. Be prepared to answer questions about them. And never, ever say, “I don’t remember how I did that.”

Experience
Have relevant work experience. Getting that first job in the industry is hard. Many people inside the industry feel like it’s completely different from all other software development jobs and, to a certain extent, it’s true. However, you still need to have experience to land your first gig. And there are many types of positions you can pursue.
First, if you are at a big university, there’s probably a graphics research project at your school. Try to become a research assistant, which will help you gain basic work experience, like project management skills, a deadline-oriented attitude, and, most of all, a professional reference. If there isn’t a graphics research project, then find a different research project and convince the professor that the project will benefit from 3D visualization. Computer graphics are very useful for a lot of different types of research because the same experiment can look much more successful with good data visualization—and if you can convince a professor of this point, you’ll also gain experience at persuading others of the value of your talents.
Get an internship with a game developer. Some larger game development companies will provide internships for eager students. Don’t expect to do glamorous work or even to get paid. However, this internship experience will both get you real world game programming experience and help you network with game developers.
The Game Career Guide from last year (2004) contains some valuable details about internships in the development community. Gamasutra.com also hosts listings for available internships (as well as part- and full-time positions).
Get professional team experience. Software development experience at a commercial software developer is also very useful. You may not be working on something exciting like graphics, but you will earn good and valuable work experience. Completing an internship in software development demonstrates that you have some level of general programming competency.
And I know what you are thinking: “My demos should show that and more!” Well, having commercial software development experience can also show that you can function well on a team, which is something a demo can’t prove. We are long past the days when one person can create an entire console game, so a lot of your time in the game industry will be spent dealing with other people. Commercial software development experience is useful because you deal with managers, schedules, and ship dates, all of which are totally relevant in the game industry. Even if you created your demo with a team, everyone else you worked with was more or less on the same level, so that experience doesn’t really show how well you interact with different people of various levels of expertise, people who are unmotivated or determined, flexible or stubborn, and so forth. Sometimes people who can put together the most impressive demo on their own are no good in a team environment because they can’t take orders from someone else.
An ideal internship for an aspiring game developer nowadays would be one in which you would develop commercial software that has artificial intelligence or 3D graphical components. You may not think there are many of that nature, but keep looking. You may be surprised at what you find.
While it’s good to have software development experience, don’t be fooled into believing that years of non-game experience translates into an equal number of years of game development experience, as most companies do not treat them the same. Even if you manage to get two years of non-game experience during your college years, don’t expect to enter into a company at the same level as someone who has two years of solid game programming experience. While an internship can help you get in the door, it won’t get you higher up the ladder or allow you to skip taking an entry-level position.
Learn on your own. Even if your college has the greatest game programming classes of any school in the world, you are not ready to get an entry-level programming position with this background alone. You need to learn to program on your own.
Being a self-taught learner is important for many reasons. First, it separates you from your classmates. Your classmates may have just gone through the curriculum, but ideally you went through it and much more since you were actively pursuing your interests in game development in your spare time. Supplementing your education with self-taught knowledge will separate your resume instantly from your classmates’—even if you’re all from a prestigious school. Second, learning on your own shows you are personally motivated to learn about game development—the reason you’re learning game development goes beyond getting good grades. People who work in this industry don’t have teachers or curricula. Often, they are asked to do something for their jobs that not one person in the company has experience doing. Hence, if you can prove in your resume, cover letter, and interview that you are an avid, self-taught programmer, you should.

Resume
If you don’t want to be asked about it, don’t list it. Do not put classes or skills on your resume that you don’t want to discuss in an interview. If you get a phone screening by a game development company, usually they start by discussing your resume. If you took a class and didn’t succeed at it, didn’t like it, or didn’t understand it, do not list it on your resume. The class you dreaded could be your interviewer’s pet interest, and he or she might want to ask you all about it. Not knowing much about something on your resume looks much worse than if it wasn’t there to begin with.
Don’t lie … really. Do not say that you were “project lead” or “CEO” of a company. In college, many people create a “company” or lead a small team of people who are making games.
While you may be very proud of your accomplishments, the people looking at your resume could very well be CEOs and project leads—and they know you don’t have the same kind of experience they have. In fact, an over-exaggeration on your part might even be perceived as slightly insulting on their parts.
Lying, over-exaggerating, or including too many self-promoting titles on your resume makes it seem like you have a big ego and think your accomplishments are more substantial than they really are. For example, don’t list that you’ve been programming since you were 10 years old; even if it’s true, you won’t be taken seriously.
To avoid over-exaggerations and egotism, separate your resume into multiple sections, such as work experience and personal projects—that way, you can still list your personal achievements, but they are just that: personal, not professional. Games that you worked on for fun in college should go into personal projects, unless you actually made a decent amount of money selling them as shareware. If you were part of team management and you think that the experience will help you, then describe your accomplishments in a less direct way by saying, for example, “carried out some managerial tasks on project” to avoid giving the impression that you have a big ego.
Don’t waste space with non-relevant experience. You want to fill as much of the paper with experience that you think will get you into games, so don’t put non-technical jobs on your resume. If you’ve never had a technical job, then you likely need more experience before applying to a job in game development.
Do not pitch. Do not under any circumstances say you have great game ideas that you would like to sell. Everyone thinks they have great game ideas, but no company is interested in buying them from a job applicant. Your resume will go right to the recycle bin.
Also, you don’t need to tell the screeners and potential employers that you are a “fast” programmer at a software development job—you had better be fast in a regular software engineer position because the standards in game programming are much higher. Remember that a large portion of your graduating class wants to work in games. The competition is intense. Game development jobs go to those who can get the job done accurately and quickly.
Don’t tell the screeners that you can quickly learn new programming languages, libraries, or SDKs—that’s another basic requirement, and not just in game development, but in software development as a whole, and your resume experience should show it.

What to expect
Programmer test. Sometimes a company will give you a programmer test before they’ll bring you into an interview. Usually designed to see if you are worth bringing in for an in-house interview, these tests vary from company to company, so there’s no standard way to prepare for them. If the interviewer informs you that you are required to take a programming test, don’t ask him or her what to study for it. The idea of a programming test is to see what you know and what you don’t know, not what you can cram into your head for a short period of time.
Weighty interview. The interview is going to be harsh. While you might have made it through an initial screening, you still may not be up to the company’s standards. Whoever is interviewing you will grill you to try and squeeze every last drop of information out of your mind.
Needless to say, you’d better have a lot of knowledge. Recent college graduates are not expected to be experts on every aspect of game development (though the questions they ask might make it seem otherwise), but you still need to know a good deal. If you’re asked questions that you don’t know the answers to, try to answer them logically and calmly anyway. Part of what interviewers look for is how you work through a question that’s probably above your head.
If you’re asked a question and respond, “I don’t know,” it’s a huge strike against you. If you’re the type of person who immediately gives up when presented with a problem or challenge, then you aren’t an ideal employee for a job in game development.
Here’s a strategy for how to handle the above situation: Start by saying what you do know about the problem and indicate what information you’d need to solve it. Interviewers want to see your thought process. They might even offer you hints to help you solve the problem if you’re headed in the right direction.
If, in an interview, you’re presented with a math or physics problem, never say, “I’d just look the formula up in a book.” If looking things up in a book is all you’re good for, then the company can just purchase the book for a lot cheaper than they can hire you! Try to deduce the answer instead. You should also definitely bring up relevant information that you learned in your last two years of college; so if you have trouble with your assignments from then, review them before an interview.

Your first gig
You will begin at the bottom. You have to get your start somewhere, and that place is usually at the bottom. You may work for a company that pays way below the industry standard, which is already significantly below what your friends with traditional software development jobs will make. You’ll probably have to work long hours for a small company making a sub-par game. Don’t expect to get a job working on the next title in your favorite game series just because you’re a huge fan. Your favorite game series probably got that good by hiring experienced people, and experience is something you lack coming right out of college.
Smaller companies working on lower budget games will be more willing to give you a chance—and you’ll probably have more room to grow and experiment with new techniques in that type of environment. It may not offer you the best financial rewards, but you’ll learn a lot and get experience, so you can move up.
Word of mouth. The game business is still extremely small compared to other high-tech industries. Word-of-mouth still goes a long way here, so your boss at a five-person studio may be a prime reference for (and personal friend of) the CEO at the next company you move to.
If you have the right experience and resume and have reasonable expectations regarding your interview and first job, you can definitely get your foot in the door of the game development industry. If you read this and are reluctant to work your butt off for low pay, then you should consider a field other than video games.
If you find math and physics confusing or you aren’t a hardcore coder, then game programming probably isn’t for you. If you still want to be involved in the game industry, there are many other positions for which a technical background also helps. Programmers make for great game testers because they understand the game’s implementation, so they will be better at guessing what will break. Producers who have a good understanding of programming can have more reasonable expectations from the programming team. And game designers with a background in programming won’t be intimidated by the task of scripting.
If you read this article and are still enthusiastic about doing what it takes, then there’s a position in the industry waiting for you. Now all you have to do is find it.

You Want to Get into Games, but as What?2

Many people want to get into games, but they have no idea what the different jobs that are available in the game industry. So, if you are uncertain, here’s an explanation of the roles and what they do. Keep in mind that every studio makes a games a bit differently, but I’ll try to explain all the common things that an employee might do in that role.

Art – This one is pretty straightforward. These are the people that create the in game assets, both 3D models and 2D textures. Currently, there are two main specializations: environment artists and character artists. Environment artists do all the level art. This includes set dressing, collision, and all the non-animated art assets that go into the level. Character artists do the characters in the game, which are usually animated. Sometimes the character artist has to rig the model, whereas sometimes the animators do that. Many believe it’s better for the character artist to rig the character because that way they know that they put enough polys in joint areas and to make the skinning look smooth. There is increasing specialization in art. Some places have people who only do 2D textures. Some people specialize in rigging or lighting. But, it’s a good idea to know how to do some of everything before you specialize since you probably won’t be able to do one task for your entire career. Artists need an impressive portfolio in order to get into games. An art degree is optional.

Animation – These are the people that take the characters (they could big rigged or not) and make animations, so the programmers can have the characters do things. They also do animation for in engine cutscenes and any videos that play. They work in Maya or whatever 3D animation package the particular studio is using. (Maya is the most common) Animators study motion and try to recreate it for  game characters be it a bush or a human. Most games use skeletal based animation in the game itself, so it’s important to be familiar with that. As people specialize, they’ll probably be people who only do FMVs using really high poly and high bone count models, and people who only do in game characters that are a bit more conservative as far as bone counts and polygons are concerned. Animators get a job based on their demo reel, so going to college isn’t necessary if you are very talented at animating.

Design – This is one of the most varied roles in the game industry. Sometimes they are just the planners who come up with the idea for the game and the levels. Other times they actually do the implementation. At some studios, there are just a few designers who mostly work in a word processor writing documents to describe their game ideas to the rest of the team. Sometimes they actually draw out level blueprints that they hand off to the environment artists. At other studios, it’s an iterative approach where they work closely with the artists to create something that is both aesthetically pleasing and fun to play through. Some studios have more designers, and they do the actual level creation. The level creation is done with whatever tools the engineers have set up. Some studios use plugins for the modeling package that the studio has chosen to allow game editing. Other studios have a stand alone editor. The level of technical skills required for a game designer also varies from company to company. Some designers actually use a scripting language to program the behavior of the game objects. Other designers only use the simple game editors that engineers create for them. Designers usually don’t have a college education and come from quality assurance.

Engineering – Engineers are the programmers who take the game ideas combine it with the art and make it work. Most companies split their programmers up into at least two categories: the engine team and the game team. The engine team actively maintains the studios technology that changes from project to project. The game team is working on features that are specific to the title currently in development. The engine team is usually responsible for the core technology behind the game including tools, rendering, collision, physics, networking and so on. Even if a company purchases middleware to handle some or all of those tasks, they usually still have a team that makes a layer on top of the core game engine to tailor it to suit the particular game’s needs. In reading about Tim Moss’s talk about development on God of War, it sounds like they took this idea to the extreme and only engine programmers (7 of them) create tools so that the rest of the team could do work that might fall on game programmers ordinarily. If the team isn’t structured like Sony Santa Monica, then they have programmers creating custom widgets that designers use or actually setting up the level logic. So for example, a programmer could make a generic door widget that opens under certain circumstances and enemies that can be placed by designers inside the game editing tools. At other companies, game programmers create the widgets they want to use and then set them up inside the game editing tools. In this case the designers give descriptions and advice, but all the implementation is left up to the programmers. Each method has its own merits. Programmers have technical experience and usually have a degree in computer science or engineering.

Production – The term producer means a lot of different things to different people. At some studios, the producer is equivalent to the game’s director. The producer is the visionary behind the title and has the final say on everything. At other studios, they are just in charge of the schedule and coordinating between the different teams. They are the point of contact for the publisher, they organize the QA teams and work with the localization company. Assistant and associate producers help out the producer with these tasks. Usually, producers have little or no college education and come from quality assurance.

Quality Assurance – These are the people who test the games. No, it’s not playing games for a living. It’s a thankless job that involves the mundane like doing the same action over and over to try to reproduce a bug. The best testers need to have a basic understanding of how games work, so they know how to break them. This is an entry level position, so no experience is required. You do have to have a lot of patience and a high tolerance for boredom because you’ll be playing the same game for hundreds – maybe even thousands – of hours, and I’m sure even your favorite game will seem dull after that much playtime.

Hopefully, that gives you an idea how the games industry is structured and what position you want to apply for. If you have any questions, post a response, and I’ll be happy to answer them.

Xbox Content Creators Club: A Great Way for Beginners to Start Game Development2

It’s no secret that a lot of console developers look down on PC game developers. PC games have frequent patches (although to be fair, Xbox 360 games have seen their share of patches too), large quantities of memory to waste (especially with virtual memory paging out anything that you might have leaked), and are designed for $3000 hardware. PC game developers have plenty of hardships that console game developers don’t face. Supporting a wide range of hardware is quite difficult. They have to make a game that can work with hundreds of video cards and drivers each with varying capabilities and performance. Making a game look good with infinite combinations of target hardware is always a challenge, let alone designing a game engine for hardware that will be out two (or in Valve’s case 5) years from now.

Microsoft has offered a great solution to this. Although Sony pioneered the idea of user created games for their systems with the Net Yaroze (a special development Playstation 1) and the Playstation Linux Dev Kit (a special linux distribution for Playstation 2 that would allow development), Microsoft is taking it a step further since you can do it on a regular Xbox 360 without any difficult setup. Although it seems a bit expensive ($99 a year), hopefully the price will come down quickly, and ideally, they’d offer it for free. Now, it should be easy for anyone interested to get console experience that developers expect. No longer will amateur game developers have to worry about designing a game that works on all sorts of different video cards with different features. They can make a game that works on one target hardware configuration and focus on squeezing every ounce of performance out of it.

The beta version of XNA Game Studio Express (the development tool used to make games for the 360) isn’t out yet, so I can’t comment on the API, but Managed DirectX simplified DirectX development somewhat. No longer will developers have to check a multitude of HRESULTS to figure out what was wrong. Exception handling greatly simplifies handling all the error cases, but let’s hope they improve the API to take advantage of the string in the exception, so you won’t spend hours trying to figure out which parameter was incorrect when you get an invalid call exception. (If you haven’t done Direct X programming, oftentimes a bad function parameter will return an HRESULT that corresponds to invalid call. That’s all the information you get, so it’s tough to debug.) Console development with a learning curve that’s potentially less steep then PC game development (since you no longer have to check the capabilities of the system and come up with a backup plan) will hopefully make it easier for amateur game developers to express themselves creatively without getting hung up on the technically challenging aspects of game creation.

Another good aspect of the Content Creators Club is that publishers might be interested in commercially publishing the best games. Sure, you could create a freeware game and hope that someone is interested in making a commercial version of it like Every Extend Extra, or you could try and earn revenue by making it shareware, but with both of those avenues, it’s going to be difficult to stand out from the huge numbers of freeware/shareware PC games out there. With the Content Creators  Club, they’ll be one place to check all the games available, and I imagine that Microsoft will rate them by popularity. Also, Xbox Live Arcade is a much better way to sell an indie game than on the PC because the attach rate is very high, and you don’t have to worry about piracy. Microsoft has made it easy so that people without credit cards can buy marketplace points at their favorite game stores.

All in all, the Content Creators Club is a very exciting opportunity for everyone who is not already professionally developing games. It even may work well for professional game developers trying to put together a demo to pitch to publishers. Hopefully, Microsoft will lower the price to reduce the cost of entry and streamline the API, so it’s even easier for people without a lot of experience to start making games!

 

Things You Need to Know before Interviewing for a Game Programming Position51

For quite some time, the game industry was an exclusive club that didn’t allow any new blood because every opening required applicants to have 2+ years of experience and 1 shipped title. I don’t think there has ever been a better time to get into the games industry right out of college than now. Because next gen team sizes are increasing drastically, people with experience are harder to find, so more and more companies are recruiting right from colleges. Regardless, of what college you go to, you can still get a job in the games industry provided you have a certain proficiency in the following areas.

Math – This is an important area to video game development. No, you don’t need to remember how to compute the surface area of a curve when rotated about the x axis. You do need to have very good linear algebra skills. If you don’t know what the formula for a dot product is (a dot b = a.x * b.x + a.y * b.y + a.z * b.z ) and what it means geometrically (|a| * |b| * cosine of the angle between a and b), then there’s no chance you can get a job. You need to know how to project a vector onto another vector (a projected onto b = ( a dot b ) / |b|^2 * b) and onto a plane. You need to know what the cross product is (a x b = [a.y * b.z – a.z * b.y, a.z * b.x – a.x * b.z, a.x * b.y – a.y * b.x]) and what it means geometrically (a vector perpendicular to the vectors with a length equal to the sine of the angle between them). The way I remember how to compute a cross product, is to put i, j, k in the first row of a matrix, then the first vector and finally the second, and then compute the determinant. If you don’t know how to compute a determinant or what that is, that’s a bad sign! You should know what the inverse of a matrix is and how to compute it for any matrix. You should know how to transpose a matrix. You should know what an orthonormal matrix is and a shortcut to compute its inverse (just transpose the matrix). Familiarity with conversions between different coordinate spaces is essential. The math behind collision routines is very important to learn also. How do you find the collision point between a parametric ray and another ray? a plane? a sphere? What are quaternions? How do you do common operations with them? If you are very rusty on your math or don’t know where to start, I’d recommend 3D Math Primer for Graphics and Game Development. I read it and found that it covers all the basics pretty well. I haven’t read all that many other books for comparison, but it’ll definitely will give you a good foundation to build on as well as reference for many common math operations for game development.

Physics – You should be very familiar with all the projectile equations. If you can’t either derive or remember d = v0 * t + 0.5 * a * t^2, you’ll be in trouble when you interview or take a programming test. Any problem that involves a projectile with gravity should be easy for you to solve. Whether the unknown is gravity, launch angle, y velocity, xz velocity, time, distance or any combinations that are solvable, you should have no problems determining the solution. You should also be familiar with momentum and kinetic energy for elastic and inelastic collisions. Drag and friction should be concepts you understand also.

C++ - Although some places still use C over C++, C++ is pretty much commonly accepted as the standard for game programming. Knowledge of C++ is very important because if used poorly, you can write very suboptimal code. Firstly, you should know what a virtual function is, and how to use it. It’s also important that you understand how the virtual function table works, so you understand the extra steps that can decrease performance that take place when you call a virtual function (each object has a virtual function table pointer hidden from you in its structure data [where it is located depends on the compiler and this has important ramifications when pointer casting], and to call a virtual function, you need to follow that pointer to the table, and then jump to the function pointer contained within, which can hurt caching). Knowing how to use templates and operator overloading efficiently is important too. Good object oriented design is the most important thing you should know about C++. All too often class hierarchies are deep and convoluted, so you end up having to do horrible things like virtual inheritance, or all your classes have a lot of wasted memory for variables they didn’t need.

AI – I took the standard AI class that University of Michigan offered, and absolutely none of it was applicable to game AI. A lot of the algorithms taught are intractable, or just impractical for games. As long as you know what a finite state machine is, you should be fine. Most games use finite state machines, and the ones that don’t, use simple rule based systems. “Black and White” (and its sequel) is the only exception I can think of that used something different (neural networks), but many gamers weren’t satisfied with the results. If you are looking for books, I’d recommend AI Game Programming Wisdom 3. It has two particularly outstanding articles in it, one about fun game AI design and another about behavior compositing. Seriously, although books may be helpful, the best way to learn about game AI is by doing it.

Graphics – This is an important area. If graphics is your main area of interest, then you should know a lot more that what is covered here, but whatever your desired position in the industry is, you should know these basics. You need to know what a render state is and what the common ones (cull, z write, z test, etc) are. What is the standard lighting equation? (It’s I = ka*Ia + Ii*(kd*(L dot N) + ks*(R dot V)^n) in case you were wondering) How does texture mapping work? What’s the difference between texture wrapping and clamping? How do you efficiently render a bunch of procedural geometry? (Organize your geometry by render states, batch it up in the fastest primitives for your hardware and send it off to the graphics card) You need to know how skinning works. If you’re interested in a book, I read 3D Computer Graphics by Watt. It’s not game specific, so it covers a lot of techniques that are impractical for games. But, I think the general overview is helpful, and as game hardware gets more advanced, the techniques presented that seem impractical now, might become the norm.

Tools Development – C# seems to be gaining a lot of momentum in the games industry, so it would be good to familiarize yourself with it. C# presents many advantages to speed up tools development. Many people have said tools can make or break next gen games. I agree with this. The more tools you have, the less time the team spends wasting time doing easily automated tasks. Maybe when you have a team of 10 artists, spending a man year of programmer work to create a tool that saves artists 15 minutes a day won’t pay off, but if you have 50 artists, then it is definitely worth your while. C# allows rapid creation of GUIs, and unlike some other ways to simplify creating GUIs, the GUIs are easy to understand and use since they are the standard Windows components and allow you to easily set up all the keyboard shortcuts like standard Windows applications. The Form Designer works really well in Visual Studio, and C#’s metadata and event driven design makes development a breeze for tools. It’s also nice to have at least some understanding of MFC also in case the developers you interview with are behind the times.

If you are interested in learning a lot about how the technology works (which will in turn allow you to write better C# code), I’d highly recommend Applied Microsoft .NET Framework Programming. I read it while on vacation, and I just couldn’t put it down. It seriously was a page turner. I read it cover to cover over the course of a few days because I was so excited to learn the topic of the next chapter. Keep in mind though, this book doesn’t teach you about the various Framework classes, and what they do. It instead covers the core mechanics of the language and how it works. It isn’t specific to C# either. It tells you what you can do in VB.NET that you can’t in C# as well as provides examples in MSIL (Microsoft Intermediate Language – the byte code that all .NET languages compile into) for things that may not be supported by any .NET languages yet.)

Operating Systems – Although this seems relatively unrelated to game development, I’m really glad I took Operating Systems in college because I frequently use knowledge that I learned in this class. knowledge about operating systems is very important since it handles a lot of important behind the scenes work for the programs. Especially with the multicore next gen consoles and dual core PCs, multithreading knowledge is essential. Virtual memory is definitely a useful thing to know. Knowledge about file systems, kernel to user transitions and paging is more useful for PC game development, but consoles are rapidly becoming more like PCs with every subsequent generation, so it’ll never hurt to know these things.

Compilers – Although it may not be important to know how to write a parser, it’s important to know how your code is converted into assembly, so you can understand how to write more optimal code. You definitely should be familiar with the four stages that take place to convert your program to an executable: preprocess, compile, assemble and link. How are constants treated by the compiler? A good understanding of macros and how to simplify common operations with them is important. Knowledge of calling conventions for the compiler you are using because passing over a certain amount of function parameters may cause them to be pushed on the stack instead of reserved registers. Calling convention is also useful for when you are writing a function in assembly.

So, this is just a starting point for the diverse array of knowledge you should have as a game programmer. There’s always more you should learn and the level that you should be familiar with each area depends on the type of task you are doing. It can never hurt to know more than you’ll actually use. If you have any questions about what you should learn, or getting into the industry, feel free to post, and I’ll get back to you.

 

Everything on Binary Creativity is © 2006 Matt Gilgenbach. All rights reserved. | RSS | Comments RSS