Mark Deloura – Manager of Developer Relations
Sony Computer Entertainment America
Currently helping release the Sony Playstation 3
As the manager of developer relations for SCEA, Mark is responsible for communicating with and coordinating education for game developers that work on Sony’s videogame platforms. Prior to joining SCEA, Mark was editor-in-chief of Game Developer, a monthly magazine which reaches approximately 90,000 game industry professionals. Mark has also served as lead software engineer at Nintendo, and previously spent time developing networked arcade games and doing virtual reality research.
In his spare time, Mark created “Game Programming Gems,” a popular series of technical, peer-reviewed books designed to help budding game developers and grizzled industry veterans alike.
A common question we get here at DPerry.com is regarding knowing (as a new programmer) when is a good time to actually approach a video game company? Meaning, is there any kind of way to know that my programming ability is good enough to submit to a video game development company?
My suggestion would be that you don’t self-judge. 🙂 If you think you may be good enough, why not submit your resume? Or, ask a friend who is in the industry, whose opinion you respect. You’ll certainly find out that way, and you won’t have to guess!
The key is to test yourself by taking on tasks that you think a game studio would be interested in. Build some tools, work on a game mod, create a game engine … concentrate on whatever interests you the most. If you can construct something that you yourself find useful for creating a game, and you think a game studio might as well, then that’s the right time to start sending out resumes.
Assuming I pass test (1), then how would a programmer actually submit a demonstration of their ability? If I send an .EXE will people actually install it? Will they be worried about security on the file? Should I make a video? Should I send code samples printed out?
A demo is the absolute best way to go. These days a game mod or web-based game would be ideal, or a Windows-based tool. It depends on what kind of position you’re looking for. But I’d definitely be paranoid about running an EXE. It’s not really worth sending one anyway, since the person evaluating your code will want to see YOUR CODE, and they’ll most likely have a compiler. Use Visual Studio and you’ll be in great shape. (Yeah, I like Linux and gcc too, but most studios don’t use Linux, so stick with the Windows environment.)
Someone who looks at your submission will very likely analyze your code, so make sure you’re proud of your indentation, variable names, classes, and whatnot. There’s no need to send printed code or a video.
Who is the best person to send the application to? Dave Perry had suggested that if you don’t know who to send it to, then just address it to the “Programming Director”, “Technical Director” or “Executive Producer.” Who is the person that can hire me? Who is going to know if I might fit in? What is it they generally really look for? What is your suggestion?
I’d recommend sending them to “Dave Perry”. 😉
Oh okay, actually “Technical Director” will work well. For a larger company, you may consider “Human Resources, Attn: Technical Director” or write “Technical Resume Enclosed” on the envelope. Anything you can do to get your resume to the right place.
What you enclose will vary depending on what you’re applying for. If you’re effectively tossing your resume at a company without an introduction, be sure to include a cover letter with your interests. A thorough copy of your resume is important, highlighting your programming accomplishments. And of course, a demo or a link to one. If you have recommendations from anyone in the company, be sure to include those as well â?? you can’t go wrong by being well-connected!
Having excellent knowledge of C and C++ is absolutely paramount for game programmers. These languages are the lingua franca.
Beyond C and C++, having a working knowledge of assembly language is also important; however, the assembly languages for each processor are significantly different, so just be sure that you can get around a bit on Intel and some MIPS variant, and you’ll be in good shape. The reason these are important is that even these days you might want to rewrite your inner loops in assembly language for the sake of performance. More likely, however, is that you’ll be either writing some microcode variant on a console, or debugging a compiler error by examining the assembly language it produced from your C or C++. If you don’t have a grasp of assembly language, you’ll be in the dark.
Lastly, it’s becoming increasingly important to look into other languages for scripting. Python, Perl, Small, Java, MEL, even LISP â?? if you’ve played with a few of these languages and you also know C, C++, and some assembly, you have enough of a grasp on programming languages that you’ll probably be able to quickly learn any new language that comes along.
Do you know of video game companies that train programmers? I am pretty good, but I just don’t have any experience and don’t automatically qualify for any real job. Will someone train me?
I doubt that there are any video game companies that train programmers; I definitely haven’t heard of any. Most development studios run at a very fast pace and don’t have many extra cycles for training.
However, the best way to get training is for you to make a game on your own, and it’s something video game companies will really respect. Team up with some of your friends, or recruit some folks over the net and create a mod or web-based game. If you run into problems, use web-based forums and mailing lists to ask questions. This shows that you have drive and a passion for games, which are two things that really impress game development companies!
Are you aware of any game programming classes that actually focus on the art of GAME programming? Meaning they will give me a really good footing in 3D, collision detection, AI, Physics etc.
While there are an increasing number of game programming classes out there, I haven’t seen many that can improve upon the tried-and-true method for learning game programming: taking apart a game and rewriting bits of it to learn how it works. The Quake 3: Arena source code is available; that would be a great place to start!
The good news about the game industry is that you can still bust in through your own veracity and intelligence â?? you don’t need a degree!
However, if you do decide to get a game programming-specific degree, the dedicated schools such as Full Sail and DigiPen will likely give you a better game programming-specific education than a general institution. I’ve been particularly impressed with the program Full Sail has put together. But I’m not going to knock going to a traditional four-year institution for a degree in computer science. If you do that, and create a game mod or web game on the side, you’ll be looking pretty good to many companies.
Are there any websites you would recommend, ones that give what you consider sound advice on real video game programming? Ones that real game programmers actually consider good sites?
The website I find myself going to most often for programming content is gamedev.net. It’s also updated frequently, does reviews of books, and posts industry jobs. Great stuff.
Of course, gamasutra.com is a standby, but it doesn’t exclusively cover programming. Definitely put it on your morning list.
Flipcode.com is also worth a check but as of this writing it seems to be on a hiatus.
There are a couple of good mailing lists that I find incredibly useful as well, and don’t forget about forums on vendor sites and Usenet. A quick Google search will give you many options worth checking out.
As an aspiring game programmer, what books would you suggest that I read? (A few suggestions would be good for Beginner (learning C), to Intermediate (getting 3D going on screen), to Advanced (shooting for the cutting edge.)
Of course, I’d recommend that you start out by buying every copy of Game Programming Gems you can find. The effect they’ll have on your programming ability is linearly proportional to the number of copies you purchase, so buy a big bookshelf. Hahahahahh. 😉
Okay, in all seriousness, of course I’ll recommend the Game Programming Gems series since they are my babies. In the first book particularly, we covered a lot of ground, a lot of the basic techniques used in game development today.
For general programming skills I don’t have a favorite. I’ve got Stroustrup’s The C++ Programming Language on my shelf, and it is not light reading. I learned C through some tutorials I downloaded off the net many moons ago, and I’d recommend doing a hunt for something similar. Frankly, some of those “Learn C++ in 21 Days”-style books are actually pretty useful as well. Worst case, in 21 days you’ll have poorly learned C++, in which case you’ll be farther along than you were!
For more advanced programming skills, you’ll definitely want to pick up Gamma’s Design Patterns, and Myers’ Effective C++. Noel Llopis’ C++ for Game Programmers is pretty solid too.
If you’re working on graphics, start with Foley & van Dam (the classic), and be sure to look at both Real-Time Rendering and 3D Game Engine Design. The Graphics Gems books are also great, of course (no relation). Between all those you’ll be in great shape, but they are quite math-heavy, so be prepared.
Speaking of math, Eric Lengyel’s book is really exceptional. On the physics side, David Bourg’s Physics for Game Developers is definitely a good starting place.
Bourg’s book is from O’Reilly & Associates, and I’ve never found a book from them that wasn’t amazing. They tend to focus on application- or language-specific topics, and if that’s what you’re after I’d always recommend picking up one of their books.
Money is tight, so can you suggest any ways I can learn to program, without having to part with too much cash? What machine would I need, and what software could I get for free? (That game companies would respect.) Are there any good engines out there that I could use?
Linux and gcc are free, and you can definitely get started by working with those. Frankly, I’d recommend it, since using gcc in a console window means you don’t have to worry about any interface code. Your standard four-line “Hello World” program will run just fine. (Note that you can also use cygwin under Windows instead of Linux.)
However, if you’re going to be serious about this, you really should invest in Visual C++. You don’t need the whole Studio package, just get the C++ portion and you’ll be in fine shape. There are a number of game engines out there that you can download and play with, but most of these require the Visual C++ compiler.
What programming jobs should new coders apply for? Scripting? Gameplay Programming? Are these dead-end jobs, or should I just wait for an engine programming position?
If you really want to get into game programming, there is no such thing as a dead-end job. 🙂 Just as most producers started out in the testing department, most engine programmers started out doing much less complex tasks. Scripting, gameplay programming, front-end UI programming … don’t be picky. If you do a great job at the task given to you, it’s much more likely that more complicated tasks will be funneled your way. Who would you rather have working on your engine: someone brand new, or someone you trust?
Do I need to know math or game design to be a good programmer these days? Are there any other skills that you think developers want us to have?
Math is absolutely necessary. Take as much as you can handle. That math course that you thought you would never, ever use? That’ll be the math you need next year to work on state-of-the-art lighting or physics. Take a look at some of the papers on radiosity or that use spherical harmonics, and you’ll get what I’m talking about.
Game design is a stickier question. Certainly, having some game design experience will benefit you as a programmer, but it isn’t a requirement. For just about any system you design, you will make many micro-level game design decisions. For example, in designing your camera control system, or the lighting capabilities for your engine, having a background of game design will help you make the decisions that benefit your game the most. Programming and game design are never completely separate, no matter how good your tools are. In fact, you could say that game design only becomes possible inside the space created through programming, so the two are intricately linked.
Working well with a team is a skill that is hard to teach, but becoming increasingly important. I’ll touch on that more in the next question.
What do you think the future of game programming is? Where’s it heading? What kinds of programming challenges will we be faced with?
It isn’t new news that game engines are getting increasingly complex. When I started out, I used to type in code listings from magazines â?? it would take an hour or two to type in the pages of code, but at the end I’d have a completely working game, assuming that I hadn’t screwed up somewhere. (And thus I learned to debug…)
Try doing that with a modern game. You’ll be typing for a few years. I wouldn’t recommend it. 🙂
A major challenge right now is that it just takes too long to create a game engine from scratch. So a number of strategies have been developed to deal with this: middleware, outsourcing pieces of your game, sharing technology across multiple projects at a studio, evolving a game engine through multiple iterations on a franchise, or using technology developed by a publisher and shared across all its studios.
But the effect of all these solutions on the individual programmer is that they need to be much more rigorous about their code. You really need to be a good communicator and work with your team â?? being a fly-by-the-seat-of-your-pants hacker, as much fun as it is, is becoming less and less useful on a project. Instead, you need to model your dataflow, partition your programs, define your interfaces, and so on. Don’t get me wrong – the challenges are bigger, and that’s definitely a lot of fun. But the challenges are not individual challenges as much as they are team challenges. So the better you are at working with others, in addition to working with code, the more successful you’ll be as a game programmer.