You Can Teach Yourself
Most of the skills that you’ll need to make videogames, you can teach yourself.
…says the guy that devotes much of his free time to teaching videogame making.
What I most like to do is help people that already know how to make videogames learn how to do it better. The sort of project-specific and game design expertise that I have to offer isn’t of much use unless you can already make videogames, and a big part of that is knowing how to program. In sharing free materials and information to help you teach yourself, I’m growing the number of potential developers that I can work with on the challenges that I find most engaging.
There’s a Process To It
Being good with computers isn’t about knowing everything. It’s about knowing how to look up or figure out what you don’t know. Similarly, teaching yourself to make videogames is largely a matter of knowing which resources are available to you, and how they can best be used to accelerate your progress.
There are a few other resources than Google to consider in this case, though. The main types of resources available to you for teaching yourself basics are Books, Websites, Programming Language/API Documentation, Forums/Peers, Code Libraries, Sample Code, Practice, and Past Project Files.
There are books on every topic, for every ability.
Many are available online for free, although a number of those may be relatively outdated.
Relying early on too much on purely online resources encourages sloppy habits that shortcut learning, like copying and pasting blocks of code instead of getting in the habit of typing it. Web resources are awesome for looking up information – they can be searched trivially if you know what you’re looking for – but to develop a full understanding of fundamental skills a sequence of material can be really helpful.
Cost can seem like a factor, since good books on this subject can easily be in the $30-$80 range, but the important things to think about are that (a.) the cost per hour is quite low, (b.) the overall cost pales in comparison to paying for classes, and (c.) it’s impossible to estimate value of “this professionally prepared and edited content was what enabled me to succeed in learning this” (I can say that last one about at least a few books I had growing up).
Websites are terrific resources for providing answers to specific questions, and finding links to other useful resources like sample code. As explained above, I believe that they’re not as good for conveying fundamentals.
Programming Language/API Documentation
APIs, or Application Programming Interfaces, are massive branching directories of information indicating what functionality is built into a programming language’s default functionality. Languages that are newer than C/C++, especially programming languages used for online content, have extensive APIs, like the Java API (Java is great for learning programming, and though often not ideal as a final platform for game making, its API is a classic great example) and here is the ActionScript 3 API (which is still used for many web games).
There’s more information in there than any one human being should read in their lifetime, and a good 95% of it probably isn’t at all relevant to what you’ll be using most of the time to make videogames. These are handy references to keep a link to, and can be a lifesaver in clearing up detailed questions about what to expect in terms of handling of errors and edge cases. But once again, digital resources are a good way to hunt for specific answers to specific questions you have, or to find other resources.
But learning to program starting from the API would be like trying to learn creative writing in a foreign language beginning with their native dictionary.
Just like in school, if you have a question, there’s a pretty good chance that other people trying to learn the subject have this question, too.
Unlike in school, your class size ranks in the hundreds of thousands, and there’s a detailed record of virtually every question asked in the past decade or longer.
If you’re finding yourself stuck on something – and I know this seems obvious but I’d be remiss to not reiterate it – do an internet search or crawl relevant web forums for an answer. If you can’t find one, then – keeping to the school analogy – do a favor to hundreds of thousands of people over the next decade by speaking up on forums with your question someplace that others with your same question will find the answer.
In programming, a library is just a packaged chunk of code someone else wrote to handle specific functionality. This might include network operations, text display, sound playing, image manipulation/loading/displaying, physics simulation, etc.
A good programming library can address a problem that you had no clue how to solve, in a way that’s (a.) fast (b.) easy (c.) leaves you clueless how to solve it without using the library. If your goal is learning about something in particular, like graphics programming or network code, point (c) may be a problem. In many cases, a library is used to do something that very smart people have spent decades researching and perfecting. In that case, that library can save you literally years of frustration, and let you focus instead on what you’re doing with the graphics, network, and physics code to make your game stand out.
Finding good sample code can be the difference between taking hopeless shots in the dark about how things tie together, and working with confidence that what you’re starting with should work. This is also invaluable early on because by starting with code that you know should work, it can help you determine whether your programming environment is installed and configured properly – if it fails with sample code that came from a dependable source, you know that your project, environment, or compiler isn’t set up correctly. That’s way better than tearing your hair out hopelessly changing things in your code wondering why it’s not working.
Find sample code. Read sample code. Compile sample code. Retype sample code. Modify sample code. Try commenting out various lines of sample code to see how it affects what happens. Add comments to sample code.
Search for sample code appropriate for your level of comprehension. If it’s not too long, and it doesn’t make perfect sense to you just yet, verify that it compiles in your environment, then print a copy to keep folded in one of your books for occasional review.
[Shameless but relevant plug: I designed the Code Pack Bundle specifically to help fill in this need, by writing code in a style and platform more easily understood by beginning game developers, and outlining exercises for ways to tinker with it productively.]
Good programmers are dramatically faster and more efficient than less good programmers.
“Good” here isn’t in reference to total years of experience, how many different programming languages someone knows, or what projects someone has been a part of building. “Good” is referring to how quickly someone can synthesize the code needed to solve a problem, how well that someone can generate code which is structured with future needs/readability/adaptation in mind, and how easily the person can digest and interpret code put in front of them.
Some people are as fluent and comfortable with programming as they are with their primary speaking language. Others fumble through it like it’s a secondary language they remember traces of from when they took a few semesters of it many years ago in school.
I chalk up that difference to the comfort that comes from countless hours of practice. The kind of usage that goes beyond fulfilling a specification someone else handed over. The kind of experience that comes from stretching and applying knowledge to solve problem or create a project that the programmer was personally invested in.
On one end of the spectrum, there’s the way that someone with zero background in programming, but access to the internet, could cobble together code they don’t fully understand to make something happen. On the other end of the spectrum, there’s someone that can just breeze through whatever problem you put in front of them, perhaps occasionally taking a moment to reference documentation or copy something out of their vast library of past project files.
I’m reiterating this distinction for an important reason:
1.) You absolutely, positive, unmistakably, want to be in that latter group. You want to be the person that is really on top of their stuff.
2.) There is no doubt, none whatsoever, about why you will or won’t wind up in that latter group, instead of that former group: practice.
Your Past Project Files
Your past project files are much like sample code. The main differences are that you understand everything in it. Because you were responsible for the whys and the hows, you know exactly where to find what.
Time and time again, my mountain of past project code has been the source of my confidence in taking on a new project. Provided that I’ve done something in a past project, or done something like it, there’s no doubt in my mind that I know how to do it, and can probably make it work again without much fumbling around. Instead of spending my implementation time thinking about how to do something, I could start from my past solution, and spend that time finding a way to do that something better.
The only way to get that mountain of past project code is to (here it is again!) practice. On your own time.
If it’s done to satisfy classwork requirements, it won’t be any different than what every other programmer has been exposed to.
If it’s done to satisfy business goals, it’s likely company property that you’re not free to reuse.
On your own time.
(Originally posted as GameDevLessons.com Vol. 6 Sec. 1)
Learn and practice team game development with Gamkedo Club.
Membership worldwide. Professional support. Proven process.
Subscribe by e-mail to receive weekly updates with Gamkedo.Community interviews and YouTube training videos for game developers!