A good third of the mountain of mail I’ve gotten since my first post has been of the general form:
“What should I study in college/learn to do/work at to get hired at Valve/have a good career/have a good life?”
The most useful response I have is drawn from my own life: Do what you love. There are no guarantees, especially in the short run, about where that will lead – but at least you’ll enjoy the trip, and it is likely to lead to exciting things. It is true, however, that it can take a while; consider my own long journey to being a full-time programmer.
In 1975, I was a freshman at Clark University with absolutely no idea what I wanted to do with my life. I was a Geography major, but only because I had taken an intro course and done well enough so that a professor had decided to mentor me. I did my Geography homework and papers the way I did all my homework and papers – under pressure and generally at the last minute; classwork was just what I had to do to stay in college. Then, as part of my major, I took Dick Howard’s FORTRAN course, and something interesting happened.
Dick had the habit of writing each homework assignment on the blackboard (this was before whiteboards) at the start of the class that covered the relevant material for that assignment. So during class, I’d listen to the lecture with half my mind, and with the other half I’d figure out how to do the assignment, then write the code for it in my notebook (this was before laptops, let alone tablets). As soon as class was over, I’d head for the computer center (this was before PCs), type the assignment out on punch cards (this wasn’t before teletypes or terminals, but those weren’t available to normal users at Clark), and see if my code worked. Once I had it working, I’d extend and embellish it beyond what the assignment required, seeing what I could coax our feeble Xerox minicomputer into doing. It was easy, it was fun; in short, it was what I wanted to be doing.
That summer, I decided to stay on campus, so I had to take a class. I picked the one that looked like the least work, a half-credit class in assembly language taught by Andrea Goodman – and unexpectedly got a hint of just how deep the rabbit hole went. I hadn’t even realized there was a native language the computer used, and suddenly I was learning it. I did well in the class, but Andrea told me I had a lot more to learn, and suggested I TA her programming course the next semester, which I did, staying about one lecture ahead of the students, since I’d never had a real programming course myself (as opposed to FORTRAN for Geographers). I started to learn about algorithms, program design, coding for readability, and the like. I even had my first taste of crunch time, going to Andrea’s house with the rest of the TAs and a pile of pizza and spending a whole day grading finals.
I’d say I loved programming back then, but it wasn’t even that complicated – it was just what I did naturally. I was good at lots of other things I did academically, but they all felt like work. More importantly, the material in those other classes didn’t lead anywhere for me; I learned it, and thought about it no further. Programming was different; I remember my roommate Chris Caldwell and I sitting on our beds and trying to figure out as many different ways as we could to convert from ASCII to binary. How’s that for wild dorm life?
Clark didn’t have a programming major, though – in fact, Andrea was half of the entire computer department – and even if it had, programming was not on my career radar or that of anyone I knew. So I remained a Geography major, albeit one who programmed at every opportunity, often to the detriment of my classes.
After I graduated, I eventually wound up as a PhD student in the Energy Management and Policy program at Penn, studying under Steve Feldman. This was near the end of the great oil price spikes of the 1970s, and energy was a hot area. Steve was a brilliant entrepreneur, landing lots of grants and projects, and one of them involved computer-based energy modeling and analysis, a godsend for me, since I had been starved for programming since becoming a grad student. I headed down to the computer center and started implementing the code on an IBM mainframe…
And found out that, unlike Clark, neither students nor professors got free computer time at Penn. Steve’s project would have to pay for its time – but there was no money for that in the budget. We were well and truly screwed.
I don’t remember what made me think of it, but it occurred to me to check out a microcomputer. By now it was 1980, and I had been seeing ads for Radio Shack computers for a few years, but I didn’t know anything about them. I assumed they were toys, but there were other systems around that seemed more businesslike. There weren’t a lot of computer stores around; I finally found a place in Haverford that had a very sharp tech named Richard Beyer; Richard sold me a Vector Graphics VIP CP/M computer loaded with 56K of RAM and dual 320K floppies (quad density; the controller couldn’t keep up, so every sector read required the floppy to rotate twice, which was incredibly slow – but think of all that storage space!) – and one other very important thing, a Microsoft FORTRAN compiler. (This wasn’t before C, but it was before C was widespread on microcomputers; I had never even heard of it.)
The only way to get my work to date off the IBM system (short of retyping the whole thing) was via a serial port; to do that, I had figure out how to write a serial comm program, which resulted in the worst week of my programming life until Richard saved me by explaining the concept of a null modem. Then I finished the project on the microcomputer, uploaded the results to the IBM system and wrote them onto a tape, and delivered the tape to complete the project.
That was just the start for me and the VIP, though. CP/M was pretty lame in terms of built-in utilities, so I wrote a bunch of utilities for it, such as a full-screen disk browser; it was a great learning experience to try to replicate the functionality I had taken for granted on minicomputers and mainframes, and see that I could do it myself. Better yet, the VIP had a button that dropped you into a ROM monitor from which you could dump the contents of memory and do disassembly, which was a revelation to someone who had only ever used computers that carefully sealed users off from the OS and hardware. Best of all, though, was that it had memory-mapped video.
We’re not exactly talking desktop-class RGB bit-mapped graphics here: The VIP could push the grand total of 160×72 black-and-white pixels.
Doesn’t sound like much, does it? In those days, it was magic. I figured out how XOR-based animation works, learned Z80 assembly language, and wrote a Space Invaders-type game; the VIP didn’t have sound, but otherwise it was a complete, smoothly-animated game, complete with levels and high scores. Only a handful of people ever played it – I didn’t even know yet that there was a computer game industry – and none of them understood just how cool it was, but that was okay. Creating the game was its own reward.
As you might expect, the time I spent programming reduced the time I spent doing energy research, and especially the attention I gave to figuring out what my dissertation was going to be. In fact, I did my best to figure out a way I could work programming into my dissertation, with no success. While I was trying to get myself moving on my academic career, something happened that forever changed the course of my life: The IBM PC.
When I read about the new IBM microcomputer, I mentioned to my wife that if I ported my game to the PC, I could probably sell a lot of copies. (By this time I had met Dan Illowsky, who had the best-seller Snack Attack on the Apple II, and I knew that there was money in selling games.) She generously agreed to let me spend half our life savings on a PC (all the more generous since she was the one holding down a real job to support us). I got the PC, ported the game in a few months (to 320×200 – nearly six times as much resolution – with four glorious colors!), and sold it through Dan’s publisher, Datamost. Space Strike shipped in plastic baggies with printed cardboard inserts; I still have one, complete with a floppy that I can’t read on any machine made in the last two decades.
And then one day I came home from Penn, got the mail, opened a letter from Datamost, found a quarterly royalty check for $8,000 – and I was on my way. I immediately dropped out of the PhD program, and went on to write or co-write three more games in the next year. The funny thing is that I never got a royalty check nearly that big again; it turned out that the PC was a business machine in the early days, and apart from Flight Simulator, entertainment didn’t sell nearly as well on the PC as on the Apple II and the like. So eventually I got a real programming job, then moved to Silicon Valley and started writing articles and books; there were plenty of bumps along the way, but it was obvious that I was finally doing what I was meant to do.
If you can read that story and see any master plan – or any planning at all, for that matter – you’re more insightful than I am. The only thread that runs through it is that I did what I loved, even though most of the time it wasn’t what I was supposed to be doing and seemed counterproductive. (My mother was convinced I had thrown away my professional career when I decided not to get my PhD, changing her mind only in the mid-1990s, somewhere around the time of my first meeting with Bill Gates.) The point is emphatically not that you should neglect everything else in order to program; it’s that you should figure out what makes you want to neglect everything else, and do that. It might be video games, it might be repairing cars, it might be starting companies, it might be raising a family. Whatever it is, find it and do it.
Perhaps the most useful way to figure out what you really want to do is to observe what you actually choose to do. Lots of people say they want to write games, and get excited about it and make plans and talk about it, but just don’t find time for it. To be really good at something, you have to immerse yourself in it, and that’s just too hard to do unless it’s what you want to be doing all the time – unless it’s what you have to be doing. Something that seems compelling from the outside may not suit you when you actually try to do it; writing video games is nothing like playing them, any more than writing novels is like reading them. So if you think you want to write games, start doing it, and see what you learn – about yourself, most of all.
In general, try things that seem worthwhile, set goals and work hard to achieve them, and see where that leads and how you respond. It’ll be clear when something becomes compelling, because it’ll be where you choose to spend your time and attention. It may not be what you expected or wanted it to be – but by definition you’ll find it fascinating and satisfying. And when you think about what you could do with your studies/career/life, really, what more could you want?
There’s no universal prescription for such things, but I’ve seen similar patterns with many other people with interesting careers. Your mileage may vary, of course; it’s your own personal journey, and, in fact, that’s the whole point.
This is just my own opinion and experience, offered in response to some major life questions I’ve received; it’s strictly personal, and doesn’t represent Valve’s position in any way. That said – if your journey eventually brings you to Valve, all the better!