How to Become a Game Programmer
shawnpresser.blogspot.com
shawnpresser.blogspot.com
When I was in university, we learned graphics programming by taking a linear algebra course or two. This was applied in a graphics course in which all students built their own software renderer, from top to bottom.
I have seen coworkers who never learned matrix math fumble with obfuscated code that could be replaced with one line of matrix operations. Several game companies I have interviewed at make linear algebra a very big part of their technical interview process. IMO if you are even remotely comfortable with math, learning matrix math is a HUGE benefit (maybe even a necessity) if you want a serious job as a game developer... the easiest way to get going with it is to just take a university-level intro to linear algebra course. That is all you need to understand the math underneath the entire rendering pipeline.
And how much calculus is required to have a chance at understanding the material?
It might be nice to have some study groups in the bay area for people looking to get into this with a regular schedule.
What kind of non-position are you talking about?
At least here in Germany, there's absolutely no problem with attending a linear algebra lecture as a guest. Just ask the lecturer whether it's okay for him/her, and everything is fine.
But of course, you need to be close to a university with decent linear algebra lectures, have enough time and so on. That's harder.
So all you need is a university that provides natural sciences. I can't imagine such a university being hard to find.
It can be found here: http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-...
Assuming no class is available, depending on how deeply you want to learn the subject, linear algebra is fairly accessible. It sounds like the introductory level stuff (University 200 level) is what is recommended in that article, so the good news is you don't need a class to learn it.
I don't think not having calculus would prevent learning it at this level. Personally I'd just look at reviews for linear algebra textbooks on Amazon and buy the best one. One thing I often do when trying to learn a subject on my own is a go to the University bookstore to figure out what materials I should start with.
Then just read the chapters and work the sample problems. When doing any matrix manipulation by hand (boring, but good to verify and help internalize understanding) it's easy to use that software to check results.
Basic linear algebra is one of the easier mathematics to teach one's self.
No excuses: http://www.khanacademy.org
There is a book Math for game programmers or something, I forgot, but these are the basic tools you have as a graphics programmer. I'd argue you need to expand knowledge into physics if you want to be a good graphics programmer (optics), and without some calculus, namely integration, forget about advanced graphics programming. You could do it, but you won't understand it - you'll end up waiting for others to code examples and publish non-scientific papers in order to understand what you need to do. Thus, you will always lag behind cutting edge and won't be able to read published papers and implement/expand them.
I have kind of a bad memory, so I have these two books I find very helpful when I want to refresh my pre-calculus knowledge: http://www.amazon.co.uk/Mathematics-Physical-Sciences-Robert... and http://www.amazon.co.uk/Further-Mathematics-Physical-Science...
That said, if you do want to dip your toe in the water and figure out if programming is for you, I'd really disagree with the suggestion of using Python as your language, particularly if your intention is to later focus on C/C++. Python is great, but its structure and constructs do not map particularly well to those languages. A better first step would C# (native on Windows, Mono on other platforms). In most ways its syntax is virtually identical to C++ and shares the same project and compile/run concepts. If you are using Windows, you'll also be using a best in class debugger and the same environment as you would in C/C++.
Also, for the "enter a name" and "guess a number" programs, for the beginner, everything I can think of will look effectively the same between the two languages. Furthermore, you can see the results right then and there when you're programming, rather than compiling, running, and repeatedly earning segfaults.
That said, the moment they begin to understand the flow of logic, they should move away from that language, so they can comprehend pointers/etc. This is, of course, all my opinion. Dijkstra would disagree with me, and so would many hackers, I'm sure, but wouldn't it be advisable for them to first begin to think in the minuscule steps, like a programmer does, before they have to deal with some of the stresses of C, and, even more so, classes?
But 'no classes' and 'no functions'?
class NewClass:
def NewFunction(arg0, arg1):
print("Hello, World")
Python has both.Pointers wise, I think you can learn them fairly late. I certainly didn't struggle to pick them up after years of using pointer-free languages.
(edit fixed my formatting)
If an entry level candidate developed a game we could download and play, it was almost guaranteed we would bring them in for an interview. It didn't matter if it was text based in C, a simple card game in Python, or a Galaga clone. Sure a background in C/C++ is good, but it was pretty low on the list of things we looked for in entry level applicants.
So if you want my advice, complete game of your own as soon as you can, in whatever language works best for you. Pick up the skills and tool knowledge you need as you go along.
The book was written for teenagers who wanted to learn how to make videogames for the first time. I used a language called Blitz Basic to teach the kids. Why? Because they learned with a very basic language, how to make a cool game that was fun to play. They could even share with friends! But they didn't get bogged down in the intricacies of the syntax of C/C++.
I found that the teenagers who've read my book tend to get really inspired by the BASIC language, and that passion carries over to finally finishing the game in C/C++
Maybe it's because Im older and there wasn't as much need for 3D graphics when I was starting out, but I'd argue that for most people, focusing on a 2D API first will be much more rewarding.
On his mentioned other paths, I would fall squarely in the "texted based MMO => Network programmer path", except I did write plenty of graphical games along the way, just never with a 3D API of any sort.
I do think I will just link this article next time someone asks me that question though, he said it all better than me.
(Credentials: World of Warcraft was the first 3D game I worked on)
However, the industry sucks. I left after about a year. In that time I learned the terms "stress migraine" and "death march." Compensation is pathetic.
Upside: wanting to make games propelled me to learn to create software. Now, I have a fantastic career as a software developer, minus the games and the stress migraines.
On the downside, sometimes I feel I learn more from reading things such as this and going off and building my own things than I do from classes. I'm currently trying to solve this by focusing on my math major first then switching focus to my computer science major so I can approach it with a "larger toolset".
That's probably, even by my very low standards of beginner, one of the dirtiest pieces of code I've ever written, but yay ! it works !
Seriously. Why do people make this out harder than it has to be? Sure, your first few games won't be sale-able. They'll probably be crap.
-NOTHING- you can do will skip the crap games you are going to produce at first.
I was enthralled by this article, not so much because I'm interested in game development (I'd rather eat a bug), but because I can imagine how valuable this article form would be for software protection, or reverse engineering, or network protocol design, or operating systems development (wow, would I ever like a series of step-by-step projects that ended in a basic functional virtual memory management system), or (somebody, please, please, please) FPGA dev.
(sorry for the prior opening snark).
(That first homework took me 25 hours because it was my first time ever using a hardware description language. Feeling like a freshman again was humbling.)
Serious. Remember Hypercard? Well back when I was 12 or so I used powerpoint to write adventure games. I put these links on each slide, and when you click one you get linked to another slide. Then I discovered gamemaker and used that. http://alstaffieri.com/gamemaker.html (Still no programming yet.)
After gamemaker, I got up to "Runtime Revolution". http://www.runrev.com/ I stored "variables" in textfields and wrote gui programming scripts (when you click this button, put 5 into that textfield. if the textfield contains 5, show dialog box "you went into the wrong tunnel and fell".)
When I finally realized revolution can't really make games either, I moved forward to TNTBasic http://tntbasic.com/ and finally learned what a "variable" really means. Took me maybe 2 years.
These days, I program websites, not games.
Sorry for my english.
1. Tools: C#, Maya & 3DS Max APIs, pipelines, UX. IMO the most important area in games (hence my startup), also very sort after.
2. Networking: learn about how to write networked games and servers that handle lag and heavy load.
3. Low level systems, memory, optimisation, in C/C++.
These areas are all heavily sort after in my experience. What the games industry doesn't need is more wannabe graphics programmers.
Games are computer programs just like all the other computer programs.