Go Confidently in the direction of your dreams. Live the life you've imagined." - Thoreau
Another Thanksgiving has come and gone. Much food was consumed, and many beverages were taken in. Life was good. Perfect in fact.
Well, perfect unless you later realize that you've got an article due in a few days which you completely forgot about due to Thanksgiving vacation... a situation in which I happened to find myself once I returned from my trip back home. Needless to say, the additional stress didn't do much to alleviate my (already quite full) workload, and the clock was still ticking.
So I'm sitting here a few hours ago scrambling to get the source for this week's "scheduled" article wrapped up (the second part of the DirectDraw layer), when I take a minute to flip through the email. Then I start counting the number of recent "Will you help me get started", "How do I get hired", "I want to make games for a living" emails, of which there are quite a few (usually I get about 25 or so of those a week, this week was close to 30), and I realize... maybe I don't need to scramble for this week's article after all. Maybe I've got enough of a topic sitting right here in front of me. Even though a lot of industry folk have written editorials on getting started, I haven't... perhaps now would be an ideal time to rectify that.
So sit back and relax, it's time for a little fireside (well, monitor-side) turkey day discussion. No source code, no project stuff, no nothing... just a plate full of mashed potatoes and gravy.
So You Want To Be A Game Programmer
You've been playing computer and video games for years, and now you've decided that you want to make them for a living. There's a lot of different facets to making games, such as design, artwork, and so forth, and you have to choose what you want to focus on. You end up choosing programming. Now that you've chosen, you want to know what your next course of action should be, where you should get started, what path you should take toward a career in game programming, etc.
Unfortunately, there is no one correct path to take. Every game industry programmer I've met has ended up where they are now through a bizarre series of situations that's almost totally unique to them, and I'm no exception. If you'd told me five years ago that I would end up being here in five years writing 3D games for a living, I simply would have laughed and said that I didn't know zilch about programming, let alone writing games. But I'm here nonetheless. Everybody's path is different, and there is no single "right" way to start. A lot of folks will point you to various FAQs on the net, or a generic "game programming" book or two, but is that the only way? Not remotely.
So I thought I would give a short version of the path I ended up taking, just to shed some light on what I'm talking about. Consider this a quick career-related summary of my life for the past five years.
I started my freshman year of college in the fall of '93, majoring in Computer Engineering (the hardware side of things). I didn't know anything about hardware design, but I knew I liked computers and there was money to be made in them, so it seemed as logical a choice as any. I also liked playing games on them a lot. One of my favorites at the time was a little title by Accolade named Star Control 2, which I found incredibly entertaining. One day I'm sitting in the dorm room playing it, when a friend of my roomate mentions offhand that he had the "mod music" to SC2 incase I wanted to snag it. I had no idea what he was talking about, but I knew I liked the game's music, so I said sure give me a copy. What I got was a disk with a whole lot of files ending in .MOD (which I guessed was some oddball music format at the time, I didn't learn more about them or other tracked music formats until later) along with a little 4-channel "modplayer" executable. I thought it was the coolest thing in the world, the fact that these tunes were made with regular audio files mixed together on four separate "tracks" at different speeds on the fly... the whole thing was just so mindblowing.
Coincidentally, when you loaded up a .MOD in this little DOS-based (Windows wasn't exactly a gaming platform in '93) modplayer program, it also listed the name of the editing program used to make the song you were playing. For the majority of these SC2 .MOD files, a program named "ModEdit" was displayed. So I suddenly found myself on a quest to find this "ModEdit" wherever I could. Now at that time the Internet was not exactly the cultural hotbed it is now, so I knew next to nothing about how to use it... and what little I did know how to do didn't help very much when trying to find ModEdit. But as luck would have it, less than a week later, I'm browsing through the computer books of a neighborhood bookstore when I find one (Blaster Master I think it was called, something to do with the Sound Blaster) that says it has "ModEdit 2.0" (or was it 3.0?) on the accompanying CD. I was overjoyed, and got the book simply to get my hands on that CD. ModEdit ended up being quite cool, and I mucked around with it a bit, at least enough to create my first cheesy song in it (called "Wieland the Happy Pig Goes Dancing In the Meadow", don't ask) which I think a couple people in existence may still have a copy of.
So after fooling around with ModEdit, I decided to check out what other cool stuff might be on that CD. I ended up finding a subdirectory called "shows", which I looked in for the hell of it. What I found became my first exposure to the PC "Demo scene", with three or four demos by some group named "Future Crew" (don't laugh Remedy guys, I had no clue at the time, remember? I thought these demos were the coolest things in the world, and I wanted to see more. I saw in one of the demos' info files that an FTP site was out there for demo-related stuff, and that convinced me that now would be a very good time to learn how to do something on the Internet.
I finally figure out how to deal with FTP, and I get to the site, which began with the name "Hornet". I dig around, and I'm completely overloaded with cool stuff. I downloaded megs upon megs worth of demos, watching and enjoying them again and again. This was about the time my grades began to plummet. After a while I decided that these demos were too cool to just watch, and I wanted to make them. Of course I had absolutely no clue how, so I put the idea on the back burner. Not long after, I end up reading a recent issue of Hornet's online newsletter "DemoNews" and I notice a mention of a demo programming tutorial series by some guy with the nickname of "Denthor". I don't know anything about programming, but saw how the mention said the tutorial series is in Pascal. At that point I think, "Didn't that guy in high school give me some Pascal thing in 10th grade?" I go through my old disk box, and by some miracle yes, a working (albeit outdated) copy of Turbo Pascal 5.5. So I downloaded the Denthor tutorials, loaded up Turbo Pascal, and got intrigued. Unfortunately the version of Turbo Pascal was a little too old for the tutorials to compile, so I went out and bought a copy of the more recent version 7.0, and that worked. I also bought a Pascal book by Tom Swan, since Turbo Pascal's online help wasn't doing much to teach me how to program. Anyway, the programs compiled, and the fact that they did what they did with so little code just amazed me. So I started tinkering with them a bit, all the while flipping through this Pascal book to help me figure out the language as I go.
It was at that point that I realized I needed more books, so I scrounged up the cash and bought a few, including an assembly language book (also by Tom Swan since I recognized the name), and an EGA/VGA reference guide since I saw it on the store shelf and it looked like it might be helpful. I figured those would be enough for a while, and I started experimenting. My grades for the next few months weren't exactly stunning.
By the time the end of freshman year rolled around in the summer of '94, I was relatively comfortable with most of the DOS-based 2D graphics programming essentials, plus a little bit of 3D here and there like rotating a flatshaded cube (my linear algebra textbook helped with that). I spent the next year and a half (up until Christmas '95) taking in as much overall programming knowledge as I could about as many topics as I could, although still stressing on DOS-based graphics stuff. Whenever there was something I thought I should learn about, I either mucked around on-line for it, or more often went to a local bookstore and hunted. Some of the books I bought came from recommendations, but most were just "hey this looks useful" impulse purchases. My summer earnings from both '94 and '95 were spent largely on computer books, and few if any had the term "Game Programming" anywhere in the title. The real meat was in the thick academic books, not in those things. During this year and a half I'd also formed a small demo group with a few buddies and met up with other local demo fiends, and while the demo group never did end up going anywhere, we all had a good time.
Right around Christmas '95 I thought it'd be a good idea if I got away from Pascal and started learning C, since the good games like Doom were written with 32-bit C compilers like Watcom, and there was no decent 32-bit Pascal compiler. So I got Watcom C 10.0 for Christmas, and left Turbo Pascal to rot. The next five months were spent learning C and moving over into a 32-bit programming world. I'd also joined up with the Hornet group, the very group that ran the site I'd found a couple years before which got me started in all this.
My grades by this time made a distinct sound. Take your upper teeth, push them down against your lower lip, and blow. If you spelled out that sound, you'd have my grades for the most recent semester (in American school systems that is; for you international folk, you only need to know that the letter F is bad).
Fortunately my grades really didn't matter much shortly after, when I got hired by Raven Software. I got a mail from one of my Hornet buddies saying they were looking to hire someone, and applied to them on a whim. When they seemed interested, I threw together a quick little five-day demo thing for them to look at (nothing miraculous, believe me), and that was enough to get me hired. It was good that I was hired, because if I'd stayed at college it would've only been one more semester before the school would have kindly asked me to leave (by way of their foot punting my rear). So I thought, cool, I've learned enough to actually be able to take what I've picked up over the past few years and use it to make games.
Little did I know that I actually knew a lot less than I thought. The first few months at Raven were an exercise in hitting the ground and running, and I had to learn as much as possible from my coworkers as quickly as possible in order to avoid being drop-kicked by them. The remaining 9 or 10 months weren't flawless either, and I made plenty of mistakes, but nobody died from them and I learned quite a bit, so it was worth it. Plus I got to work on a couple products which actually got shipped, and that was extremely cool. It was also during this time that I gradually worked my way into the programming "philosophy" you read from me in this column, which solidified after I left Raven and came here to 3DRealms.
So there you have it, that's the path I took. Now why should you care? Well, if you're looking into just starting game programming, or looking to get hired somewhere or whatnot, then it should serve as an example that there's no predefined surefire way to do it, and that sometimes random coincidence makes a difference. If I hadn't been playing SC2 that one night when my roomate's friend had walked in, or if I hadn't seen that book with ModEdit in the bookstore when I did, how might that have changed my situation?
You can't control random chance, but if your goal is to program games for a living then you can still tilt the odds in your favor. You do that by learning whatever you can, whenever you can, however you can. Don't expect somebody to spoonfeed you through your education... that may work when you're younger, but it doesn't work that way with this industry. You have to take your motivation to learn into your own hands and act on it, not expect somebody else to act on it. If you need books, get them. If you don't have enough money to get the books, get a slop job to help pay for them until the cost pays for itself (and it will). If books aren't enough to solve a particular problem and you need assistance, don't be afraid to ask for it, but try everything you possibly can beforehand. Try working with a team and creating solutions with your team members. Just never go so far as to assume you know everything there is to know, because no matter how much you know there's somebody that came before you who knows more. Learn from them. You may have to make the journey on your own and in your own way, but there's help all around if you take the time to look for it.
When all's said and done, my advice for those who ask "How do I get into game programming" is simply this: Get a compass and a good walking stick, because there's a lot of terrain out there.
Alright, 'Nuffa That
Now go and enjoy some rest and relaxation for a bit while you can, because it's back to the grindstone next week.
Until next time,
- Chris"Kiwidog" Hargrove is a programmer at 3D Realms Entertainment working on Duke Nukem Forever.
Code on the Cob is (C) 1998 Chris Hargrove.
Reprinted with permission.