Gamasutra: The Art & Business of Making Gamesspacer
View All     RSS
September 2, 2014
arrowPress Releases
September 2, 2014
PR Newswire
View All
View All     Submit Event





If you enjoy reading this site, you might also want to check out these UBM Tech sites:


 
How do I get started programming games???
by Tommy Refenes on 01/07/13 07:52:00 pm   Expert Blogs   Featured Blogs

The following blog post, unless otherwise noted, was written by a member of Gamasutraís community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.

 

How do I get started programming games???

I remember maybe 5 years ago I emailed a M.I.T. professor after seeing her on a PBS special talking about AI. I poured my brain into an email to her about my theories on AI development, how machines can be programmed to recognize environments, how emotions can be learned through experience,etc. I spent a good 4 hours writing the email because I felt a connection to this professor’s work. It was an exciting email to write because it was something I was very interested in and I wanted to reach out and talk to someone about it. There was so much hope while I was writing it that maybe I would get a response back and I would have someone to talk to about this kind of stuff, maybe get me started on the path to creating advanced machine AI. Sadly, I never heard back from her…I don’t even know if she read the email.

Lately, because of Indie Game: The Movie and Super Meat Boy, I get several emails/twitter mentions/formspring questions a day from people wanting advice. Most of the emails are from younger fans and are requesting advice ranging from “What language do I use” to “How do I get my game on Xbox”. I read every email but I don’t always respond because it would take a good part of my day, not to mention there is little variation between emails.

I legitimately feel bad when I don’t respond because these are people that are just reaching out and want someone to shed some light game development. They are doing the same thing I did with that M.I.T. professor so many years ago. They are interested in what I do and want to know how to do it, they want to be a part of game development in some way. Well, I want to help but don’t have the time, knowledge, or desire to be a teacher …so here we are. This is an FAQ for anyone who wants some advice in some way from me about making games.

Where do I start?!?!

Where do I start on my dream game idea?

Where do I start is the most common type of question I get. I feel like starting is the biggest hurdle for a lot of people because they don’t realize that everything, even the crazy AAA game you see out there,started out as nothing and built upon itself until it became what it was destined to be. When your dream game is sitting in your head and you take that first step towards creating it, it can be very overwhelming to go from a state of imagination to implementation. For someone who has never made a game, something as simple as making a character move can be something that just seem like a huge impossible hurtle and can quickly become a huge discouraging defeat. It doesn’t have to be like this, the key is to start small.

Super Meat Boy started off as a quad with the image of Meat Boy on it. Mew-Genics started out as a black square that moved back and forth on the screen. Goo! started out as circles with smiley faces on them. “Game 2” started out as a vectorized image of the character in “Game 2”. Everything starts out at the very most basic level and builds up from there.

It’s very important to take things one step at a time. If you approach your dream game all at once, chances are you will get frustrated and overwhelmed. If you approach the same dream game one little step at a time, your chances of realizing your vision are exponentially higher.

Breaking your game down into small pieces forces you to analyze and evaluate your ideas on a deeper level. This is essential because you always want to be open to changes, you never want to set yourself into a path that you feel you can in no way deviate from. Deviation from the plan can yield the most interesting parts of a game. It’s a more organic way of developing because you are thinking within the game system and are applying new ideas to ideas that have already formed.

So, try your best to break down your ideas in to small chunks that can be accomplished easily within your current skillset. It’s easier to see progress that way, you don’t get frustrated as easily, and you can come back to your work later and easily pick up where you left off. Remember that there is no time limit on when you have to get your game out (if you are starting out like that, you are in for a rough time). Learn at your own pace and build your projects like you build Legos…one piece at a time.

For a more detailed example, let me go through how SMB started. Once I had that quad with the MeatBoy image on it, I hooked up input so I could move it back and forth. After I played with that a little bit I made it so that when I pressed a button my Meat Boy quad would jump, then I worked on stopping him when he landed on a platform, then I worked on stopping him when it he a wall, then I made him stick to walls, then when he stuck to a wall and I hit a button he would wall jump, then if he hit a greensquare he died and so on and so on until the last line of gameplay code was written and Super Meat Boy was complete.

No task is too small, no amount of progress is too little. What is important is that you do not get frustrated and you continue to work on your game.

What Language!?

What programming language do you recommend?

This is the second most common question I get and to be honest I don’t like this question because it is a question I cannot answer. I always try to answer the question with “whatever language you feel the most comfortable with”. I don’t think this answers people’s questions effectively because I feel people are looking for a definite answer or they are just starting out and do not feel comfortable with any language. I’m going to try to elaborate on my answer to maybe help people understand how to choose a language that is best for them or help them understand that using what they are comfortable with is the best way to start out.

If you are looking for advice on what programming language to start with you don’t need to concern yourself with “Will Flash run on iOS” or “Does Xbox run Java” or “Does XNA run on Mac”. Your foreseeable end game at the starting point is realizing a game, not releasing it or selling it. These questions are important when worrying about shipping a game, but shipping a game is way easier than realizing a game. You can worry about shipping your game later.

Find a language that clicks with you and start coding. In the beginning it is important to have as much instant gratification as possible. You want to be able to get something on the screen quick and build from there. You want to be able to edit what you create and add on to it easily. Instant gratification is key to staying motivated when starting out, you probably don’t want to be learning a new language while making your game. If you try to learn a new language while creating your game, chances are you will spend weeks reading and have nothing to show for it except knowledge that you have not yet been able to apply to your game. That can be pretty discouraging. 

Stick to what you know, or go the easiest most comfortable route possible to acquiring skills to start work on your game. So if you know a little Flash, use Flash, if you use C++, use C++, if you only use Java, then use Java. There is no such thing as “the official game development language”. ALWAYS remember that. Minecraft is written in Java, Super Meat Boy is written in C++, Farmville is written in Flash, some other game people play is written in HTML 5, some other game people play was made on Index cards. The point is: It doesn’t matter. Find a way you can make your game comfortably, and make it with that.

Don’t take that as me discouraging you from learning new languages and working outside of your comfort zone. Once you get the ball rolling, you will want to reach out of your comfort zone and learn new things if you want to grow as a game developer. Worry about growing later, in the meantime get your base established and start coding.

If you don't know any languge and are looking for a place to start, I would recommend Flash, Game Maker, Unity or something similar. All those programs make it very easy to get something on the screen quickly and with a very small learning curve. You don't want to start out with something like C++ if you have no experience with any other programming language and are anxious to start creating your game. 

Books!?

What books or tutorials do you recommend?


There are two books I recommend but they are only for C++ development and they are not beginner books at all. They are Effective C++ and More Effective C++. These are more advanced C++ books so if you don’t know C++, do not be like “Oh I need those to make games”. You don’t.

Other than those two, I haven’t read any other books. The way I learn is by reading SDK documentation. It’s not very typical, but it’s how I learn.

I do recommend going on line and looking up tutorials for things. The internet is full of example programs, tutorials like NeHe, etc. There are no tutorials that I recommend, mainly because I haven’t gone through any but I do know the resources online are abundant and varying. I’m sure with a little help from Google you can find exactly what you need.

I DO NOT recommend copying and pasting from tutorials to make your game. You aren’t learning anything that way, you are just copying. That goes double for open source programs. They are fine to look at, study, and reference, but they are not a means of making the game for you. You will not become a good and effective programmer by copying and pasting source code into your game unless you fully understand it. Do not cheat yourself this way, take the extra time and understand something before you use it.

Software!?!

What software did you use to create the game?


I feel when this question is asked, its being asked by people that assume there is a magical tool that makes games for you. Fact of the matter is there are tools that do a bunch of the engine stuff for you. If you aren’t interested in learning a programming language for the purposes of building a game engine look at something like Unity or UDK. They take the heavy lifting away from you and allow you to just create a game. There is a cost to this though. You are limited by the system presented to you with those tools. These tools are full of features that are well built, stable, and amazing, but sometimes they will not do what you want.

Personally I don’t like limitations and I really enjoy having my hands deep in the development so I avoid these tools and build my games from code I’ve written over the years. That’s not to say Super Meat Boy couldn’t exist in something like Unity. It could to an extent. Due to the limitations though it would not be the same game, it would not control the same, and it would not look the same. The essence would be there, but the game as we know it would not be. It’s up to you though. Again, it’s what you are comfortable with. Amazing games are made with UDK, Unity and the like...and amazing games are made without them.

I use Visual Studio for development, but I could just as easily use Eclipse, Code Warrior, XCode, or Notepad and a compiler. Just like selecting a programming language, it doesn’t matter what you use. Visual Studio is what I am used to. I don’t use any of the crazy functions built into it, I use it as a way to organize my source code files, compile, and debug. Tons of editors do this.

For art and animation, Ed uses Flash. I wrote an exporter for the animations in Flash because it was easier than writing tools for Edmund, and…again…Edmund is the most comfortable in Flash…so why fight it! Writing that tool meant learning JSFL and working in Flash, but it was what worked best for Ed and me for Super Meat Boy. You don’t need my animation exporter to make your game. One day I will offer these tools to developers, but this won’t happen for a long time so don’t wait for them.

Motivation!?!?!?!

How do you stay motivated to finish what you start?

There is no secret to staying motivated and there really isn’t advice I can give you to stay motivated on your project. There’s no special trick I use, or mindset, or organizational task list, or anything like that. In order for me personally to stay motivated, I have to believe in and enjoy the project I’m working on. If I don’t like what I’m working on, chances are I will not finish it.

There was a game I started a long time ago called Goo!. I worked on it for 2 years, and it went nowhere. It wasn’t my idea, it wasn’t a game I would personally want to make, and because of that I could never make it what I wanted it to be. I stopped working on the game to start on Super Meat Boy.

The time working on Goo! wasn’t wasted because I learned a lot about development, but the game was never meant to be because it wasn’t something that excited me. The only aspect of the game that did excite me was the multi-threaded physics engine and I spent almost all of my time on that. It was important for me to work on that game because it made me realize that loving the game you are working on makes it much easier to work on. It is the ultimate motivation.

When you believe in and love what you are working on, it is difficult to stop working on it. You obsess over it, you want to add to it, you want to make it better, and you really want to see it completed. Believing in what you are working on tends to shine through in the finished game. You are more likely to spend more time on extra polish, add features you think make the game better, just generally go above and beyond and really make the game yours.

HOW!?How do I get my game on Steam/Xbox/PS3/WiiU/Anything else?

This is a question no one should ever be asking when they are first starting out or even if they have a game they are working on already. Your end game should be “I’m going to make a good game” not “I need to get this on XBLA”. The path to getting your games on any of these platforms is public knowledge. There is no secret email, there is no magic form you fill out, you don’t need to know anyone in the biz, nobody’s cousin works at one of these places and can get you a secret meeting, nothing like that exists.

It’s very simple to be approved for any of these platforms: all you need is a good game. That’s it. It’s a harsh reality that some people refuse to believe. I’ve seen people scapegoat everything but their game when it comes to getting approved for Steam/XBLA/whatever. A good game will gain attention and serious consideration from platform holders based on its own merits with a little help from you. Talk about your game, be excited about it and if your game is good and other people like it your enthusiasm will spread to others.

If your game is not good, you are going to have a very rough time getting it on distribution platforms. Focus on making your game the best it can be, don’t focus on what platforms you can get it on. A good game sells itself way more than exposure on a platform will ever do.

Whyyy!?!?!?!

What if I finish my game and no one wants it?

If you work hard, and you think your game is the best thing ever and you still can’t get on any distribution platform don’t take that as a failure and a sign that you should stop making video games. Very few people hit a home run with their first game. SMB was the first game I ever finished, but there were a few before SMB that went nowhere.

At one point I was a few steps away from getting a Sony deal identical to fl0w and Everyday Shooter for the game I mentioned earlier, Goo!. A change in management at the last minute (literally two days before final papers were to be signed) caused the game to be cancelled and for me to never hear from Sony again. The game wasn’t good and even with the Sony deal it had a chance of never being finished and a very good chance of being a huge failure. It hurt, it stung, but it didn’t stop me.

Don’t let that kind of set back kill your dream either. People might think your baby is ugly...that's fine though. Keep making games. Be inspired by setbacks and one day if you have the strength to push through it, chances are you will realize your dream. 

LOVE!!

Conclusion

Just make your game with whatever you can, start small and worry about other things later. Programming languages and software are irrelevant to creating a game so choose what you are comfortable with or what you want to learn but don't take on too much when starting out. Make sure you make enough progress to stay motivated and keep frustration at a minimum. Love your game, talk about it, obsess over it and it'll be hard not to work on it.


Related Jobs

Playtika Santa Monica
Playtika Santa Monica — Santa Monica, California, United States
[09.01.14]

Sr. BI Developer
Wargaming.net
Wargaming.net — Hunt Valley, Maryland, United States
[09.01.14]

Engineering Manager
Wargaming.net
Wargaming.net — Chicago, Illinois, United States
[09.01.14]

Engineering Manager
Wargaming.net
Wargaming.net — Hunt Valley, Maryland, United States
[09.01.14]

Graphics Software Engineer






Comments


Sam Coster
profile image
Thanks for the note, Tommy. I'm an enormous fan of you and Edmund's work, and it actually got me started as an aspiring indie about 2 years ago. I'm now full time along with my brother, and I honestly can't express how much SMB impacted me.

It's good to see that you haven't come ungrounded. Keep up the work, I'll always be supporting your projects.

k s
profile image
All useful advice, not really new to me but for others new to game development it will be helpful.

Kristofor Durrschmidt
profile image
I enjoyed reading this article, good stuff Tommy.

Julian Gosiengfiao
profile image
Thanks a lot for posting this. Having played through lots of your stuff lately, reading this article gives me quite a lot of inspiration to follow through with my own pet projects.

Ricky Bankemper
profile image
I feel this gives excellent fundamentals to always keep in mind while developing in general. Coding is complicated and tough, so make sure you enjoy what you are working on. When I first got out of college, I found my first software engineering position a reality check. A lot of the work wasn't very interesting when compared to school homework or tinkering at home.

I think most people get into programming because of their desire to develop video games. When I saw Indie Game: The Movie it was the inspiration I needed to finally take that first step. I enjoy coding, but gaming is where my passion is. I had a hard time starting up though. I would obsess over potentially running into design/platform limitation based on engine or language choices. I would never accomplish anything, just perpetual research and overwhelming fear of failure. After watching the movie, I will fully admit to wanting to talk to you, Tommy. You had all the knowledge and confidence I wish I had as a programmer. I felt you had some deep secrets about programming languages such as "Java is complete crap for games as its garbage collection is too slow and unreliable, use C++ if you want to be a pro". I am relieved to hear it can be much simpler than that. In the back of my head, I always knew that wasn't true, but hearing it from someone who has been through it successfully is reassuring.

So, thanks for this write up. I have been trying to plan out too much, when I don't even have anything started. I was putting game development on a pedestal, when it really isn't much different in how I approach my everyday office coding.

Tyler Yohe
profile image
"Everything starts out at the very most basic level and builds up from there."

Love this comment Tommy.

I live in an area where noone is involved in game development, so when I told my friends I was making a game it was a huge joke. They were laughing at the fact that all I had was an excel sheet with VBA code that let me test my game mechanics before moving into a C# engine.

But I had a vision in my head and had to start somewhere. Now that my vision is starting to take shape as a true 3D game though there is a new-found support for the game. Best advice I could give to anyone is just to believe in yourself, trust in your vision, and then just have a plan to execute from those humble beginnings.

[User Banned]
profile image
This user violated Gamasutraís Comment Guidelines and has been banned.

Matthew Mouras
profile image
You didn't get a slew of questioning emails before "Indie Game: The Movie"? You've always been a rock star in my book, Tommy!

This is a great read. There is lots of practical advice, examples, and some inspiration. I hope it reaches a bunch of young developers with questions. Thanks so much for the article.

Adam Mcpolin
profile image
"Donít let that kind of set back kill your dream either. People might think your baby is ugly...that's fine though. Keep making games. Be inspired by setbacks and one day if you have the strength to push through it, chances are you will realize your dream."

Perseverance is key! Thanks for the article!

Joseph Cook
profile image
Thanks so much for this article. It echoes much of what I always tell others. I've worked for a software company awhile and do on-campus interviewing with universities all the time, and that goes along with Q&A sessions where people always inevitably ask the same thing:

"What classes should I take to get a job with your company?"

In the end, it never comes down to classes, or specific things. Just go make something! There are so many incredible platforms today that are free and so ridiculously easy to develop for. Don't fret over language, or whether people will like it, or whether you'll sell any copies. Just make something. Start from scratch, build slowly, and watch it evolve along with your skills. You'll instantly become more valuable to a company than any class could ever make you.

Alejandro Trejo
profile image
hey man i really enjoyed reading these article and makes me fell more confortable about starting in game development. Thnx so much :D

Anthony Peak
profile image
As you touch on, and I think needs to be reiterated, I believe far too much importance has been placed on: "How do I get my game on Steam/Xbox/PS3/WiiU/Anything else?"

This isn't just limited to first time programmers - even bigger name indie developers that should know better really worry far too much about this. If your game doesn't get on Steam - release it yourself! Promote it yourself! Build a simple webpage and accept Pay Pal and sell it direct. Perhaps release it on other platforms like Desura, or use sites like Indievania.

Especially on iOS, I see far too many indie developers unhappy because their game "fades into obscurity" too quickly. To me, that sounds like being unhappy somebody else isn't doing your promotional work for you. As Tommy says: "Love your game, talk about it, obsess over it".

Anthony Peak
profile image
One more quick point I'd like to make, and some people may disagree with me here:
"Don't quit your day job, or don't be afraid to take one."

Chasing one's dreams is all well and good, and when you're young you can take higher risks. But we all have to support ourselves, and sometimes you're going to have to work the job you don't really want in order to finance the dream that you do.

Indie devs: Don't expect your first game to pay your bills, and don't quit the job that puts food on your table after your first mild success, expecting lightning to strike twice. Accept that there are risks involved, especially for the indie developer, and build a career carefully.

Company devs: Don't be afraid to take "boring" jobs until you land that developer gig at Game Company XYZ. The bigger the company you're shooting for, potentially the harder the gig is going to be to land. Joseph Cook makes good points above. You're probably going to have to brush up on your skills first, and you're probably going to have to do it on your own time.

Vincent Dumont
profile image
Good read! Very well explained!

TC Weidner
profile image
Good stuff

Rey Samonte
profile image
"Iím sure with a little help from Google you can find exactly what you need."

It was good to hear someone say that since that's how I usually find the solutions to many problems. Also, understanding what you're learning from the examples or tutorials you find online is key to empowering you to implement things the way you want them to behave. Always ask yourself, "Now that I have a good idea of how it works, how can I take this knowledge and apply it to my game? And what is the best way to implement it that works best with my engine?"

Definitely a fun read.

Kevin Patterson
profile image
This is a great article.

A few friends have started down the road to making their own game, I think this is filled with great advice, and will pass it along.

Adam Spragg
profile image
Even taking the time to write this article shows a huge amount of class. Thanks for that.

Marvin Papin
profile image
Imagine the time to read all or most of the mails and the answers...

Kelsey Gardner
profile image
The most encouraging thing I found about this article was that it didn't come to the unilateral conclusion of "Use Unity," as so many advice columns do. Many people are answering the question "How do I get started making games?" but few are answering "How do I get started programming them?" and it was great to see an answer from someone who enjoys the nitty gritty aspects of building something from the ground up.

Antonio Restivo
profile image
Good article! Gives me no excuse to delay my game project!

Michael Joseph
profile image
RE: "When you believe in and love what you are working on, it is difficult to stop working on it. You obsess over it, you want to add to it, you want to make it better, and you really want to see it completed. "


It is often said that necessity is the mother of invention. In your case it sounds like the necessity to make manifest a vision you have for a work that does not yet exist.

Fernando Ponce
profile image
thank you very much for this information, its what ive been looking forward to reading the past few days. I also sended Team Meat an email asking about what type of programing, and how did you get started questions but never heard from back, but i know that it is not easy for an independent team to replay to the thousands of email they get. I feel alot better because this article gives me the info i have been waiting from team meat, espacially from tommy refenes. Thank you again. :)

Ron Dippold
profile image
Yeah, do not start with C++. I'm (relatively) good at it, and I love the Meyers books, but it will CUT YOU. It's the nastiest real language I've ever learned (BrainF@#$, M, APL, and Intercal don't count). For your first games you don't need much performance, so start with something that focuses on the content rather than the process.

If you can't make a good game in a reasonable framework, you can't make a good game. Start with as simple as you can and focus on the ideas. I like python + sdl, but even that is a bit dated these days.

Bryan Powell
profile image
Great article, Tommy. My partner and I are on our first indie project, and a lot of the things you talk about resonate with us. Actually, we're from Asheville too, and we were just 2 weeks into our project when we saw you at the Indie Game screening last March. The film and your Q&A afterward were insightful and motivating at exactly the right time. We'll send you a copy when its done. :)

Curtiss Murphy
profile image
One phrase floored me: "Other than those two, I havenít read any other books." I can't imagine where'd I'd be if I hadn't read, 'The Art of Game Design', or 'A Theory of Fun'. And it's hard to imagine designing games without, 'The Paradox of Choice' and 'Flow'.

But, one thought makes me cringe ... Not having read 'Mindset.' That was a turning point. The moment I stopped believing that skills were innate and started believing I could learn almost anything. There was just one catch - I had to be willing to fall flat on my face. Game design, public speaking, charisma, writing, creativity, ... all just skills. That's when I began to bloom.

I really enjoyed the article. Thanks for sharing! And do yourself a favor ... read more!

Matt Stafford
profile image
Couldn't agree with this more. Online is a great resource but there are still some fantastic books that have an amazing collection of knowledge, all in one spot. I'm glad you mentioned "The Art of Game Design" as well.

Game Engine Architecture and Code Complete are two that I'd add to the list and recommend to pretty much any programmer. While Tommy raised some good points of the iteration of development, you still need to learn how to structure code properly, how to write good quality code, debug your defects, etc.

I also found "Core Techniques and Algorithms in Games Programming" a great one as well. There's nothing particularly unique in here, but it does cover a whole lot of things.

tony oakden
profile image
great article with really sound advice. Thank you! Incidentally those are the two c++ books I recommend to my students as well. But my advice to students looking for information is to go on line.

Kenan Alpay
profile image
Excellent article, your story and success is inspiring. Best of luck to you and your future projects!

Greg Walter
profile image
After reading your blog, watching your film (Indie Game), and obsessing over SMB (countless hours clocked in on Steam) I have finally taken the plunge to tread the waters of Indie Game Development myself.

You have given me hope, where there was none.

Thank you for more than you will ever know.

Jon Landaburu
profile image
I would like to learn programming video games. I've been learning c++ by reading books and following tutorials on internet.
I would like to help people making any game. As beginner I could test code or anything not too complicate.

Adrian Alcomendras
profile image
I watched indie game the movie and you guys are my heroes. I always wanted to make video games but dont have the schools for them here so I just tried and experimented on stuff found on the internet. Indie game the movie really motivated me to dig deeper. I hope that one day I'll be able to make a game that runs and is as fun as what i'd imagine it to be. This has been a very inspiring read. thank you so much!

jorge gomez
profile image
Hey everybody i'm new to programming and honestly I have been stuck trying to figure out what programs to use, i've been using Xcode because its more compatible with my Mac OS X. I was wondering if anyone with a Mac would recommend using a different program or would Xcode be a great project to use? Also I have developed the basics of a; (Illustrations, artwork, game functions, a revenue plan, basically everything but the programming). I would like to create my game, but i'm not to the level of 3D game development yet, so I was just seeking some help by others. Maybe we could partner up and share some ideas. Trust me you won't want to miss out on this opportunity.

Ryan Morin
profile image
Hello Jorge, i saw your post and well, being in the same position you are in, i figured id ask and see if you'd want to team up and figure out how to build games and such, i have a C++ book i'm borrowing from a friend, but i rather work on this with another person just an idea. if your intrested email me at Bostonboy13@msn.com hope to hear from you soon. - Ryan

Raja Biswas
profile image
Thank you very very much Tommy, it was a really helpful article. It's really important to stay motivated and full of excitement while completing your project. I know c++ and bit of java and wanna be a hardcore game developer. I'm really very very excited to get on this journey, someday wanna be like you. Thank you very very much .

Friends if you wanna contact with me, and learn together, as i like to meet people with same interest,
please mail me on: rbsupercool@gmail.com..
twitter: @rbsupercool

Hoping all the future game developers a great career.. :)

Wayne Marsh
profile image
Use a fixed-update game loop and don't make SQL calls directly from your client.

Ahem.

Anthony Becker
profile image
Second time I've read this: at least as important as the first time. As I make my first full game from scratch in C++, this article continues to inspire! Thank you so much Mr. Refenes!

... Now I need to play SMB XD


none
 
Comment: