How to program independent games

On April 1, 2011, I was invited by UC Berkeley's Computer Science Undergraduate Association to come give a speech. This was pretty interesting because that's where I went to school, and I was once a member of the CSUA. I approached it this way: if I were going back to speak to my undergraduate self, what would I say to help him be most effective at making video games, programming-wise?

The talk's about 38 minutes long, with about 40 minutes of Q&A afterward. Here's a slideshow:

If the above embedded player doesn't work for you, or you prefer to download the files directly, here they are:

audio track
slides (ppt format)

108 Comments:

  1. Mr. Blow, as a prospective independent programmer/game developer who will be heading to college in the Fall of 2012, is it smart that I major in Digital Media BA (which specializes in game design) and minor in Computer Science, or am I perhaps heading in the wrong direction?

  2. I have no idea what a major in “Digital Media” really means (you say it’s specialized in game design, but then why isn’t it called game design?) And I wouldn’t really trust most of what people in academia have to say about game design — most of that is just a waste of time (unless you go to one of a *very* small number of schools who have teachers who actually understand something about game design).

    The valuable skills that you would learn in school, pertaining to games, are things like computer science, classical art techniques, etc.

  3. Perhaps I wasn’t clear enough, for which I apologize, as I’m still trying to piece it together myself, but here’s the link to the degree program: http://www.catalog.sdes.ucf.edu/academic_programs/pdf/Digital_Media_BA.pdf As you can see on the right, it breaks down the specific courses for the “Game Design specialization” of the program, and below it is Web Design, and such. The overall program also includes courses on art, like you mentioned, but I’m still not sure if it’s right. Your assistance is much appreciated.

  4. Jonathan O'Brien

    This presentation broke my heart when I couldn’t see your preview of The Witness…

    Interesting presentation, though – taught me a thing or two.

  5. I’m just about to start my CS degree and while I didn’t understand everything… I did understand a fair amount and was able to take in and learn from the lecture as a whole.

    Thank you for uploading :)

  6. You say there are a very few schools where the teachers understand game design – any in particular come to mind? Or are you just kinda guessing?

    Very interesting talk, I often have to fight my urge to optimize and generalize early. Good to hear some more concrete reasons to avoid that.

  7. Looked at the slides. Sounds like fair advice on the whole. : )

  8. Just wanted to thank you for sharing this. Very interesting, as always!

  9. Great talk, nice to hear practical advice from someone working in the field.
    I have the same question as Devin. I’m aiming at game design and have found a degree that covers a broad range in that field (http://informatics.iupui.edu/media/undergraduate/specialty-areas.html) I have a friend who is going to the same college, but he is going with a CS major because it is more marketable if one is looking for a job than just game design.
    What are your thoughts on that?

  10. Any course that says it teaches game design is probably a good one to avoid – I learned this from experience.

  11. Devin, I recently graduated from the ITT Technical Institute’s “Digital Entertainment and Game Design” BS degree. The program was very very terrible, with exception: the person who taught most of the classes was a 30-year veteran of the industry and knew what he was talking about. I blame the corporate-generated curriculum and lack of progressive computer-use policy for making it a bad degree program. If I could do it over, I’d go get a CS degree from a community college and learn game programming on my own.

    ITT’s program focused on game design theory (which is important) and project management, and lacked programming classes or game-art classes, also there were about 4 classes that were redundant. It wasn’t worth it.

    Frankly, I only see 2 programming classes in that BA. Unless you’re going to teach yourself programming, you won’t come out of that degree knowing how to make games.

  12. Really angry when I can only listen to the game preview! :B

  13. What you said makes a lot of sense, and gave me a fresh perspective on coding. Very interesting stuff, thanks for sharing!

  14. Yeah, that UCF course listing does not look good. I would not recommend going to that school.

    It looks like one of these newly-thrown-together programs made by a committee that doesn’t understand anything about what the real goals are.

    Keep in mind what’s going on academically: now that some schools have established good game design programs, they have seen admissions to those programs skyrocket because a lot of people want to learn how to make video games. So now there is a wave of “me too” schools who want to boost admissions / keep relevancy of certain departments that seemed to be in decline. How do they do this? By saying they have a game design program, just like some other school.

    You don’t want to go to a “me too” school, you want to go to a place where there are people who actually know some things. I don’t follow video game schools very closely, but I have a positive impression of the NYU Game Center and of the stuff that USC does. Valve also says they tend to be pretty happy with people they have hired from Digipen (though keep in mind they are saying this about hiring a select minority of people from there).

    I myself went to UC Berkeley for computer science (there was no such thing as a video game major or minor at that time, and a serious school would never have been able to establish such a silly thing)… and then I dropped out before getting a degree. It was very good for me to go there and learn the things I learned, but I also spent too long there. Anyway, after that, I was able to leave school and go make video games just fine (at the hardest possible time to go try and do this in the entire history of video games). So yeah, if you just go to a good school for computer science, that is still maybe the best option.

    If you are not familiar with the “education bubble” argument, be aware that some prominent people are thinking that the cost of education is now high enough, and opportunities to learn outside of school now rich enough, that going to college is a net lose (financially and in terms of life skills) and that you may well be better off just finding really smart people to learn from in the real world and going and doing those things. Peter Thiel went so far as to offer a bunch of $100,000 fellowships for people to go do creative things instead of amassing debt in school: http://huff.to/mFKEvx

    Keep in mind that even if you go to a potentially good school, it is only really what you make it: it can be a good school or a bad school based on what you do there. For the minority of people who come out of Digipen or wherever and are really good and creative game programmers, perhaps many of them would have become just as good if working on their own just trying to make things, using the Internet as a reference. It’s hard to say!

  15. I’ve been set on learning C# so i could use XNA and publish on PC and Xbox, but i’m wondering, now that i’ve listened to your talk, why does Microsoft uses it as it’s default language for XNA since anytime the garbage collector could jump in and lower the fps at any moment, thus failing their own quality standards?

    Would you recommend i should simply learn C++ once and for all (which i have been avoiding for years, judging it too low-level for my tastes…) ?

  16. Alex: It’s a good question. I suspect that they drop that requirement for XNA games. It’s actually a “softer” requirement in that you can get it waived if they like you enough.

    Keep in mind though that there are very few XNA games released on the 360 under this cert process (almost all are XBLIG games, which do not go through certification). I know that The Dishwasher games on XBLA are XNA, and there may be a few others, but really almost all games use the native API.

    As for what to learn, I don’t know… if you are able to make pretty good games in a higher-level language, but are having problems getting the performance you need, then maybe. If you are not at that point then maybe there is no good reason?

  17. Thank you for the talk and the response to the question of school. I can’t even describe how valuable they both were as they would decrease my coding productivity too much.

  18. Braid is a pretty big inspiration for me to be an independent video game developer, so hearing this talk was really cool.
    This made me feel more confident that I’m going about my current hobby work in the right way even though I know there’s still a lot I need to learn.
    Thank you.

  19. Thank you for your time. So, Computer Science would be my best bet as a major? (http://www.catalog.sdes.ucf.edu/academic_programs/pdf/Computer_Science_BS.pdf , I am basically restricted to Florida due to financial reasons)

  20. Jon was not only a member of the CSUA, he was the president!

    Still no word on the video, eh?

  21. Someone was saying in an earlier thread that they were told the video was lost (which is why I finally got around to putting this up.)

  22. Devin: That CS degree listing looks *way* better than the game design one.

    However, I have no idea how good of a computer science school UCF is. If it’s a good school, cool. If it’s a bad school, do you really want to go there for 4 years?

    Part of what I was trying to get at with my earlier posting is… back when universities were invented, the world was fundamentally different. If you didn’t know something, there was usually no way to actually find out about it unless you went somewhere and studied with people who knew it. Now due to the internet that is different, so the role of universities will have to change. Going to a mediocre school back even as recently as the 1980s-1990s could still be a good idea, because it was the best way to find out about things. Now that is no longer the case. So I think as we go into the future, the utility of mediocre schools will go down (but good schools will probably still have high utility)… especially once outfits like the Khan Academy become more-pervasive.

    I am not saying UCF is mediocre; I don’t know anything about it, it might be great. But I am just saying that, this being a big influence on the future course of your life, it deserves more consideration than “I am going to a 4-year university because that is what I am supposed to do in life at this point, and I am restricted to Florida for state financial aid reasons” or whatever.

  23. If you want an example of how bad a bad school can be, read this story by Richard Feynman about science education in Brazil:

    http://v.cx/2010/04/feynman-brazil-education

    Of course that is an extreme case, but a lot of stuff that happens at bad American schools reminds me of this (though in different ways that are subtle and that I find difficult to describe fully…)

  24. As a student entering college next year at UC Berkeley as a CS major, this was really awesome. That being said though, my plans are to go into game development.
    A quick question though, how do you feel about the current way colleges are pushing game development degrees? Are dedicated “games studies” programs more useful than building upon CS programs?

  25. Great talk and tips for approaching programming in general. Time of your life spent is a great metric to prioritize when thinking optimization, you probably just saved us all a couple of years if we can apply this principle regularly. :)

  26. Thanks for posting this talk. I wish I had heard it 4-5 years ago. I’m starting to learn some of these lessons myself and it’s nice to hear them expressed succinctly.

    (I’m also depressed that the Witness preview was audio only :p, but it’s probably best not to follow it too closely so I can really enjoy it when it is released)

  27. Two quick questions…

    Firstly, I agree with you on deleting code and preferring hard coded (to over abstract) systems, but do you see the contradiction that can occur between the two? I sometimes find myself in the position where I could get rid of 2-3 systems by creating 1 generalised one. My preferred option is not to delete here. Wonderfully abstracted systems have got into trouble many times over the years.

    Secondly, have you ever suffered from the fear of shipping? I’m now over 3 years in to my game (121,619 lines) and whilst I have that burning desire to get it into the hands of as many players as possible I’m often paralysed by the fear of what people will think. Is it just me that suffers from this resistance and how can it be fought?

    Anyway, great talk.

  28. Hi Jon, I found your video/ presentation really interesting and thought provoking, so firstly thanks for putting it up here for us to digest!
    I’ve been a graduate Computer Scientist for a whole year now, and my goal is to become a self-sufficient independant games developer, pure and simple. However, this dream is clearly relient on me first producing a game which actually makes money! I’ve already learnt a bucket load in this last year about myself, my programming style and some ways to optimise my ‘time spent working on a project’.

    Anyway, moving onto the question; I’m working currently on my second personal game project, but I’m frustrated at the limited amount of time I get to actually progress with it, what with having a full-time job as a web developer.

    For my own interest, I was wondering what your early game dev days were like. Were you working a “proper” job during the day to pay the rent, while chipping away at your games in the spare time? Or did you go all out on games from day one and manage to get enough back to finance the next one?

  29. Hey that was a very good story about the education system… don’t you have that guy Feynman quoted in in the main page for the site?!

    Thank you for sharing the lecture with us, it will come in handy and make my life much easier.

    Totilo made a nice live blog thing with Gabe Newell talking about games for education and training, its also a very excellent lecture.
    http://kotaku.com/5814405/liveblogging-whatever-smart-stuff-gabe-newell-has-to-say-today

    i just graduate from high school the 2nd of June nad there are two programs at the community college that i will go to: game development and computer science. I was thinking it was better to go for the CS program but in that program there is no modeling, animating or engine work with real time graphics and i consider that important as well. i don’t know if i will learn other aspects of game development if i just go to CS, I don’t think it has any hands on with modeling and animation… but i would need that right? so what do i do im going to college. just drop the animation and and game developing for straight-up CS only?

    …also, did you notice how there is capcha now in the site? idk if its just for me b/c i tend to comment a lot, but there is a ReCapcha thingy under the “leave a reply” section of the article. What’s up with that?

    Capcha: Lunch Toperig ???????

  30. Damn Philip, having played your game (though the last time was a long time ago — send me a new version!! I was just thinking recently about dropping you a line asking how it was going.) I am a little surprised at the 120k lines thing, though maybe that includes blank lines and comments? Or maybe you just keep adding crazy stuff to it?

    Definitely there are contradictions all over the place; there just isn’t any hard-and-fast rule that one follows 100% of the time. Sometimes a generalized system really is the right thing, sometimes a handful of specific systems are the right thing. But the reason I slanted the lecture in the way I did was to directly counter the overzealousness toward certain ideals that tends to be taught in school (always generalize, etc, etc).

    I personally don’t have a fear of shipping because I myself am a harsher critic than just about anyone I know. So if I think the game is good, well, that is good enough for me. (Certainly other people can disagree, but then usually it’s because the things they think are interesting / good are very different from the things I think are interesting / good). And also, lately, especially on this new game, I am sort of moving away from a good/bad spectrum and more toward the idea of just whether this game acts as a lens or as a tribute to a certain part of the universe, in the way I would like it to; and this is quite far removed from the idea of “is this a good or bad entertainment product?” I find it’s pretty easy for me to see whether a game is acting as a lens in that way, and as long as it is doing that, I am okay with it…

  31. Thomas: I worked on hobbyist games in college, etc, but I started making “real” games just by having a little money in the bank and then starting a game company with a friend from school. We just jumped out there and did it (not with 100% success by any means!, but it was the best learning experience of my life.)

    Gabe’s talk about educational games is interesting and I agree with him in general (at least from what I can tell from the liveblog-type notes!)

    The thing about learning modeling and animation at school is that there isn’t anything deep here. They are just going to teach you how to operate modeling software, which is fine, but this is also something you can learn yourself by experimenting and going to web sites on the internet. Most of what makes people good modelers and animators is about their fundamental art skills, which that class probably isn’t going to teach. Computer science, though, is a very deep subject and there’s a lot of wisdom involved there, which is why it makes sense to learn that in a school (because the internet is actually kind of a garbage source when it comes to CS — there is just *so* much bad advice out there, vastly outweighing the good advice, and if you are just learning, how are you supposed to be able to tell the difference between what is good and what is bad?)

    The recaptcha is just to prevent the huge amount of spam that we tend to get, to cut down on how much maintenance this blog takes (so we can work on the game instead!) It is a little bit inconvenient for users, probably, but hopefully it won’t ask you more than once after it’s installed? (It is not asking me…)

  32. Great talk and some very good points. It’s reassuring that a lot of your advice isn’t totally new to me though I agree that those realizations often have come to me with experience and _after_ my formal education.

    Regarding the “premature optimization is the root of all evil” advice I found that it’s a good approach to write straight forward (often bruteforce) code and use a profiler every now and then to identify the worst bottle-necks then optimize these specific parts of the code. The difficulty is in maintaining a project where this refactoring is easily possible and where the refactored code is not only faster (thus eliminating the bottleneck) but also in harmony with the rest of the project so that maintainability isn’t hurt. You have to constantly make decisions (e.g. between straight forward “to the point solutions” and a generalized, loose coupled architecture) and just because something seems a good idea now it might still hurt the project in the long run. This might sound unprofessional but I think a good programmer develops some kind of intuition to help him answer these question. It’s really hard to formalize… and probably something you’ll never master completely.

    I really liked the idea of optimizing for saving life time. When considering that point two things seem to be important that I used to undervalue: The build-times of the software and the workflow/asset pipeline. If you’ve ever worked on a project with long build times you know how much that can hurt your productivity and it takes care early in the project to avoid build times exploding later. The same is true for getting content into your game. If the tool chain is bad you can waste a lot of time just exporting, packaging, merging, loading and other things that involve waiting for a progress bar to fill up. As a game developer I become increasingly interested in software that aids the creation-process of the game as opposed to actual game code.

    For indie games where we can’t throw a million man-hours at a project but at the same time have to compete with other products that might have had more resources to spend I’d like to suggest another target to optimize for. Wow-factor! :)

    Optimizing the level loading code in Doom does not increase the Wow-factor but identifying the one thing that could make your product special might be worth all the optimization you can spend on it. That’s one reason why I found myself to work a lot with Flash in my spare time. Because with Flash there are limitting factors other then my time budget. That’s why the guys in the Demo scene chose to work under artificial constraints (usually size constraints of the executable) because it’s not only *fun* but also educational (right word?) to have to optimize things beyond the naive approach.

    My last hobby game project was a retro style flash game. I pixeled the graphics myself (so they are quite bad) did the level design (bad) and story (english is not my first language – bad) and it’s tile based and I used creative commons music and some beep-sounds. Why bother making it? What makes it unique and worth my development time and the time of players? The gameplay idea I wanted to explore involved light and shadow and so I’ve spend about half the coding time on getting dynamic light and shadow into the pixel graphics game. I think it was worth it. That visual combination is something fresh and hard to copy and it got some people pretty excited. It’s what makes the game unique. (Have a quick look: http://runehunt.pixelpracht.net/) One great feature is enough to set you appart from the crowd which doesn’t mean that it makes a great game just not a complete failure.^^

  33. Great talk and great advice in the comments here. Thanks a ton.

  34. @justin If I’ve gathered anything from this, it would be to stay away from most design classes (out of curiosity, I’ve been doing some Internet snooping on Full Sail and apparently it’s not very good, and if a school based around getting into most media entertainment is shit than I wouldn’t put much hope in programs from most “regular” universities directed at game design specifically).

  35. Great lecture; I felt a fair bit of vindication by the end of it.

    A few years ago when I decided that academia wasn’t going to be my path to game development I turned to the internet to learn how to make games. This started out as just working on mods for the Source engine, and reading what documentation I could find in forums and wikis. Over the years, as I moved from Source to the Torque engine and eventually the Unity engine, I’ve always been able to find the information I’ve needed either to solve specific problems, or to expand upon the theories that I’ve been exposed to.

    Now I’m coding complicated strategy AIs in Unity without any formal education. I think you’re very right that it’s in the end more about what a person makes of their circumstances than the circumstances themselves and that the advent of the internet has given self-motivated people (who are usually are the ones succeeding at school and in the industry anyway) to acquire as much and as many kinds of information as they need. My circumstance of not having a proper cs education allowed me to forgo all of the “academic standards” of coding and forced me to think about code in as simple and subtractive a manner as I could, because I didn’t have the internal knowledge-base to construct overly complicated code.

    Additionally, I think that the arrival of all of these game engines that are cheap to license (Unity Pro costs $1500 per developer seat, and a free license also exists) adds to the ease of learning and working outside of academia, especially because you can start working without having to spend years learning about and developing proprietary engine technology.

    I’m not a good programmer by any traditional standards, but I like to think that I’ve managed to optimize both my life and my development process by approaching code in this way and with these tools. Thanks for sharing your ideas and helping me to be more comfortable with this development lifestyle.

  36. For those of you who want a decent, yet affordable Game Design Program, look into the Game Design Bachelors Program at Rochester Institute of Technology. I have been in the program for the last 3 years and I love the atmosphere. All the professors know you by first name, and the class sizes are around 25 (Except for LA, which average 60). I plan on continuing into the Masters in Game Design in the Fall (2011). For those of you who think that you cant get jobs in the “real world” if you major in Game Design, I am currently working for Boeing. Send me an email if you have questions, I would be more than willing to answer them. dlw4736@rit.edu

  37. Hello Jonathan,

    I am very glad I watched this video, it cleared up a lot of the worries I had from my CS classes at my university.

    I have one question that is fairly broad, but I would be very grateful if I could get some insight.

    Using the infinite resources available to me, how do I learn how to make complete software systems?

    I go to a school with a pretty good CS program, and have been getting A’s in all of my classes and find myself to be a fairly adept programmer in terms of accomplishing the assignment, but I don’t see how it all fits together. And if I were told to “go make a video game” I would have no idea where in the world to start. I know nothing about objects, all I know is how to make objects and data structures and use standard output to print text out…

    How do I use all of the resources around me to learn where to start, how to make graphics, how to tie that into my code, how to make an environment to move around in, how to make AI’s do this and that, etc?

    If my question is too vague just let me know and I’ll try to make my question more direct…

  38. Well Kevin, how far through that CS program are you? If you are close to the end and you still have no idea how to “go make a video game” — even a simple one — then I hate to say it, but it is actually not a very good CS program. [If you are close to the beginning, then, well, it’s not too surprising if you don’t know that much yet. Then again, I was making little games in the 6th grade, so it’s hard for me to think you need a college education for that…]

    (Not that a good CS program would necessarily say anything specific about games, but it should have you building complex-enough stuff that you could easily see how to make a game of equivalent complexity if you wanted to.)

    Is graphics your only question, or is it more fundamental than that?

    Does your CS program not have any AI classes? (If not, it is probably not a good CS program! etc…)

    Actually, let me turn the question around… what is it about your school’s CS program that makes you think it is pretty good?

  39. Thank you for this lecture. I am about half way through an undergrad degree in CS (well, actually computer engineering) at a local university, and I thought it would be a good idea to try my hand at video game creation, although with a focus on making them for cell phones. I also appreciate your comments on how you got started. I was a bit worried that not having a specialised degree in game development would put me behind those that do. It’s good to hear that this isn’t the case. Again, thank you.

  40. Videos like thsi make me wanna go and do CS at uni. thanks for posting.

  41. I’m rather disappointed in what I’ve been taught in Uni in regards to programming. Not so much because of the “optimise and use data structures” slant, but more because of the “do this and it works” slant that came with it and everything else. If they don’t explain *why* we do things certain ways, we can’t learn when *not* to use them. I never learnt the why of things ’til I left.

    Loved the talk. I’ll probably watch it again to remind myself of some of these things.

  42. Hello!
    First of all, thank you Jonathan for posting the talk. It was fresh and enlightening . I myself went to study animation to get into games, and made game all along. I do not have any programming background, aside from a basic ActionScript course… So I studied from tutorials and I do have a basic ability to do anything, but the performance of my games is weak. I have a few questions for you.

    First, you wrote all your code from scratch. Why? What do you think of using tools like Unity?

    Second, I want to become more proficient at coding, and I have no intention of going to school again. What do you think of this program which is taught online? http://www.gameinstitute.com/courses.php?tab1=foundation

    Thanks again!

  43. Can you give an example of what you mean by an ‘array of records’?

  44. Matt: A ‘record’ is just when you use a struct in C++ or whatever. It is just a way of naming information. An array of records is just when you put those into an array.

    The other previous few questions I don’t have time to answer right now, it’s going to be a busy day, but I will hopefully get to them a bit later!

  45. “I am a little surprised at the 120k lines thing, though maybe that includes blank lines and comments? Or maybe you just keep adding crazy stuff to it? ”

    Sorry yes, both.

    593 files – 85k lines code, 20k lines blank and 15k lines comments.

    Lots of systems commented out too.

  46. Re: Philip Bak on fear of shipping — I think fear like this is often totally justified. I have been involved in a lot of productions where shipping the game was like stepping off a cliff. Especially, with smaller productions that don’t get extensive testing, you can be blind-sided by weird problems. For example, one game I worked on made some people violently motion sick.

    Unconventional games often give a negative first impression. This usually coincides exactly with your tiny window of hype you may be able to generate at launch. Unless you have a ton of good will from a previous product, or a lot of well positioned friends, this can be a recipe for disaster.

    We are trying out open development for our project, and letting pre-orderers play around with the current, totally incomplete, builds of the game. This allows us to have a lot more feedback, and to get a core user base used to the main conceits of the gameplay.

  47. @Hadas Contrary to what Jon says, I use this (http://www.youtube.com/watch?v=cFA2hT0JsPg&NR=1&feature=fvwp) instructional guide which has proved very useful for me and many others (mind the 19th video, that’s just where I am). Obviously it is free, and the instructor is very concise. Hope that helps!

  48. A useful talk. Thanks. I particularly enjoyed the function example and the generalizing versus specific use point.

  49. Fantastic presentation Jon! I like the no-nonsense approach to datastructures and algorithms. That is definitely something all the green programmers I work with miss. Have you thought of contributing to #altdevblogaday? You obviously have some wisdom you could share.

  50. Jon, your main points might even contradict each other in certain contexts. For instance, there are situations when the general solution is easier to implement than the specific one. Or there is an off-the-shelf well-tested clever data structure that takes less work to incorporate in your code than to create even the simplest viable solution from scratch.

    What I took away from the talk is that your main advice is to optimise for development effort as long as it doesn’t violate other constraints. However, the specific tips are somewhat tied to your particular situation: developing code largely from the ground up and using a language like C++. I think this could have been emphasised a bit more clearly. But this is just little gripe, and I really enjoyed the presentation on the whole. Thanks for sharing!

Leave a Reply

Your email address will not be published.