Though I know I’ll eventually go to school for a CS degree, I am currently teaching myself to program. As I’ve said before in other posts, my goal is that someday I’ll be working in the video game industry as a programmer.
I’m starting with C++ and have already been studying a few books I purchased. The books I’m working with right now are:
Good luck. I’m a casual programmer with an interest in game development but I lack the commitment to do it seriously. That said, I’ve learned an awful lot about development over the last few years.
Having a good C++ reference book along with McShaffry’s Game Coding Complete is a great way to get into it. Depending on your experience, McShaffry’s stuff may be a bit difficult to follow. Make sure you know C++ going into it.
Beyond that: it depends on what type of game you are programming. There are books and online resources for very specific things. Don’t be afraid to use open source toolkits for UI/Physics/Graphics handling, especially early on when you’re trying to get a grasp on the game logic code. The free popcap (I think it’s called sexyapp) toolkit is a good start.
I don’t like books because they are not searchable, its harder to find feedback on them, and they can easily become out of date.
I’m sure there are some great books out there, but its not my preference. I hope some people do point you to some good books… I responded to emphasize the importance of doing, and when you do feel the need to research, stay current and focused.
Just as an open question, why start with C++? I’m not sure what your degree of programming expertise is, but there’s a lot of housekeeping and lower-level stuff that doesn’t get done for you in that language, and if you’re at the point that you’re just trying to learn concepts…well, it might be a little much. Is XNA a viable alternative? I’m an applications developer now with not much intention to break into the fabulous world of games development for less money than they could possibly pay an entry level guy, so it’s not really an issue for me, but I would think that working in what’s basically .NET would be a little bit cleaner for self-teaching.
For what it’s worth, though, I do prefer C++ for guided teaching, because you do need to learn that housecleaning at some point to know why your code explodes.
I started with C++ because it seems to me a fundamental and universally learned language. It also seems that the concepts learned in the process would be applicable to other languages as well (not one for one, but you know what I mean). Also, I’m working on a Mac in Xcode, so I don’t think XNA is a viable option for me.
There’s a certain truth in that, but it really depends on the book. I keep a copy of Herb Schildt’s C++: The Complete Reference by my desk because I can refer to it without having to muck with my windows on the computer to look something up. Also: I find the information more reliable than any online source I’ve found, but that really is a matter of personal taste.
Books like Game Code Complete are useful because it is meant to be read from end-to-end and gives a full picture of how one can go about constructing a game in an object-oriented language.
The first step for me was to just pick up a couple of books on C++ programming, stick with those for a year or so, get an understanding of the language, and then move on. When starting out, the language is the biggest obstacle, so getting a firm handle on that is an absolute necessity. And, yeah, I think C++ is a good place to start. It has all of the necessary fundamentals and when you move to other languages you’ll be thankful about how much simpler things are to get done. I’ve had friends who have started using C++ after learning Java or C# and simply can’t grasp the necessary concepts; I learned C++ starting out and jumping into another language tends to be fairly straightforward.
And books are fantastic, don’t let anyone tell you otherwise. I’m an entirely self-taught programmer and my ability to figure things out on my own (and not having to rely on other people to get help) is probably my single greatest asset as a developer. I have a job as a game programmer in the industry as well, so don’t feel like any path you take getting started somehow ruins your opportunities in the future.
Thank you for some very uplifting advice. Much of the advice I’ve been getting so far on these forums has been negative and depressing. You’ve confirmed so much of my own thoughts on what path I’ll take. Teaching myself is the only viable option I have right at this moment, so I’ll keep heading down that path until a more viable, and logical, option comes along.
I really resonate with your comment about the ability to get things done on your own. That’s a talent I have as well and one that I think will serve me well as a programmer. It’s also the main reason why I struggle through formal schooling; I just can’t stand to sit there and wait to be given info I could have found and learned myself in half the time. It’s like jumping through hoops just so you have that bullet point on your resume.
Some subjective opinions, from a professional programmer:
C++ is not where I’d start off, although it’s important to (later) understand what it means to get so close to the bare metal. Something like Python or C# is probably better. Take into account the preferred language of any experienced programmers you know.
Programming Books are a good idea, definitely better than random blogs.
Game Programming books, not so much. That said, you need a project you’ll be passionate about.
Also, make sure you learn how to use a source control system like Subversion. This is the first thing you should do – it is essential if you’re serious, and will save you a bunch of grief down the line. The second is to make sure you’re not editing in Notepad. ;-)
I’d recommend starting with C and moving up the chain to C++, C# or Java. I’m biased however as a low-level programmer so take the following with a few grains of salt.
IMO, it is best to start from the ground up. C has a very low barrier-to-entry, will let you do a lot of stuff, and gives you a good low-level understanding of how things really work. It’s a good compromise on assembly which is good to understand but too painful to work with to be much use for practical learning.
Once you start trying to make fairly sophisticated stuff you may decide to move over to higher-level languages. IMO there are some very good reasons for choosing to work in a language like Java but they have more to do with software engineering strengths and less to do with pedagogical strengths. Learn to lean on a strong API and higher-level language concepts after you learn the basics, not before. When you are starting you want to spend your time learning the logic and flow of programming and not worrying about all the details, pouring over API docs, etc. Something like C is going to give you a good, clean environment in which to do that.
And you won’t really need a lot of books to start with C. I would pick a few projects to do. Start with some simple text-driven applications and work your way up to developing an ASCII version of Tetris, for example.
P.S. in that same vein, I would say that design patterns, etc., are something to focus on later. At first you really want to spend all your time getting really good at writing simple, direct code with little more than if’s, for loops, functions and structs. There you’ll learn the concepts that are going to underpin everything you do later with larger, more ambitious projects.
Do you want to learn how to be a crack-shot programmer, or do you want to start toying around with spiffy game ideas? If the latter, consider Flash/Actionscript. (Not that the two are mutually exclusive, but it’s waaaaay less work to start driving widgets around the screen in flash).
Now I’m starting to get confused. I’ve heard from many sources that starting with C++ is a good plan. And now I’ve heard starting with a high level language like Python or C# is a good idea, and then you’re recommending going with a lower level language like C. What gives? hehe.
Can someone please explain what the advantages are in going starting with the various languages? Say, C, C++, Java, Python and C#? Taking into account of course that I eventually want to be programming games, AI, physics, etc.?
I figured going with a lower level language like C++, but not the lowest levels like assembly language, would be a good way to learn the fundamentals and how things actually work at the lower levels, while still being manageable for a newb.
I found the material to be very clear and concise. At the time, the 3d courses they offered were geared for DX9, but that was a while ago - they may have expanded their repetoire since. They also offer introductory courses on required mathematics and programming in C++. I didn’t take these personally, so I can’t comment on the content.
For the 3d courses that I DID take, the information they provided was extremely helpful.
I had read a number of books on game development previous to this, and I found they tended to quickly gloss over more complex subjects (e.g. when/why to use quaternion calculations for vertex rotations over matrix transforms - and good luck finding a book with a decent explanation of mesh animation) in order to quickly get something up on the screen.
I can see why they do that, as some of the concepts are quite complex and might require 100+ pages of pre-amble to sufficiently communicate what’s going on. When they skip over it though, you’re left with knowledge of how to build exactly what they were attempting to demonstrate, but no clear idea on how to take that knowledge and build your own game.
All that to say that the courses I took at GI were very helpful in establishing foundational knowledge that could be applied in building your own stuff.