The following are hand-picked sections from the syllabus of the 3-year Cambridge University CS course. These are just syllabus, i.e. describing what you need to learn / teach yourself.
EDIT: this list was originally created to help people internally who were network programmers or general programmers – it covers all the common core elements, but is still slanted towards MMO development.
NB: For each URL I’ve listed underneath the key topics you should focus on learning – anything not listed, I’m basically saying “don’t bother with this, it’s of no use to you”. In some cases, the topics I have missed out are extremely difficult, so unless you’re really interested in them I’d suggest avoiding them for now.
*SOME* of the courses you can get PDF or similar course-notes here:
http://www.cl.cam.ac.uk/teaching/0708/
…for the ones that are missing, you may find equivalents at MIT, which has it’s complete course notes online here:
http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#ElectricalEngineeringandComputerScience
…for anything you can’t find there, google is your friend. You have the syllabus (if you follow the links below) so you should be able to craft good google searches.
Also, the University of Hawaii used to have some especially good free slides for a lot of the trickier subjects.
Final note: IME, both as student and later as a private tutor, in practice a lot of Computer Science learning is self-taught. Apart from the syllabus (telling you what to read about, what to learn), the only part where you need the university is in marking your papers throughout the year, and so telling you where you were “wrong”. Of course, at university you get 3 years to devote your entire working week to learning, so it’s much harder to do it in spare time – but it’s possible.
http://www.cl.cam.ac.uk/teaching/0708/CST/node12.html
Recursive functions.
O Notation
Lists
Sorting
Queues and search strategies
List functionals
http://www.cl.cam.ac.uk/teaching/0708/CST/node18.html
Regular expressions
Finite state machines
http://www.cl.cam.ac.uk/teaching/0708/CST/node21.html
Simple data structures
Sorting
Searching
http://www.cl.cam.ac.uk/teaching/0708/CST/node29.html
Graph algorithms
Geometric algorithms
http://www.cl.cam.ac.uk/teaching/0708/CST/node31.html
Concurrent systems
Distributed systems & transactions
http://www.cl.cam.ac.uk/teaching/0708/CST/node51.html
Algorithms and problems
Non-determinism
http://www.cl.cam.ac.uk/teaching/0708/CST/node52.html
Introduction
The relational data model
Relational algebra
Schema refinement I
Schema refinement II
Transaction management overview
On-line Analytical Processing (OLAP)
XML as a data exchange format
http://www.cl.cam.ac.uk/teaching/0708/CST/node65.html
Foundations: probability, uncertainty, information
http://www.cl.cam.ac.uk/teaching/0708/CST/node84.html
Time
Algorithms and application protocols
Communication
Naming
7 replies on “Self-learning guide for Game Programmers without a degree”
[…] the AI Bot Library from the Quake 3 Source Code (@ aiGameDev.com) Far Cry 2 and AI promises Self-learning guide for Game Programmers without a degree AI : Open Problems Creating Real Artificial Intelligence Original SimCity Source Released 100 Ways […]
I just came across this, and I’d like to point out that this would also serve as a great list of things that CS college students should be certain to learn while they’re in school, if they want to become great programmers… which has a positive correlation with being able to get a job as a game programmer.
I would also add exposure to either database programming or distributed systems is not strictly necessary… and another potential area of study is computer graphics:
http://www.cl.cam.ac.uk/teaching/0708/CST/node43.html
2D Computer graphics
3D Computer graphics
Image processing
http://www.cl.cam.ac.uk/teaching/0708/CST/node82.html
The polygon
Ray tracing
Splines for modelling arbitrary 3D geometry
Subdivision surfaces
Implicit surfaces and voxels
Other ways to create complex geometry
Radiosity
Computer animation
@ Matthew – doh, yes – this was taken from a syllabus I put together for MMO programmers in particular, and assumed that anything core to your programming areas (graphics courses for rendering programmers, TCP/IP courses for network programmers, LISP for AI programmers, etc) you would already know just from on the job learning.
i.e. it was aimed to cover the things that people wouldn’t necessarily realise they needed to know.
The graphics courses you outline are a good selection, thanks. Assuming you do all the core courses above as well, I’m not sure how essential the extra graphics ones are these days – when it comes to the finer points of graphics, I suspect you’re better off doing the complete NeHe tutorials, reading up in forums, asking on IRC, etc?
Well, to be clear, I’m assuming we’re talking mostly about someone either in college, or who did not go to college, and I’m assuming the only programmers who need to do much of any graphics programming these days are people working on an existing engine or creating a new engine. It’s not necessary of all game programmers, and if it’s outside your primary duties then a less comprehensive approach is totally reasonable.
With that said, it doesn’t look like the NeHe tutorials cover anything like the depth of maths I’d consider necessary and appropriate for graphics programming. What I’d recommend for self-directed study more than any community resources I’ve seen are a good book on linear algebra (like http://joshua.smcvt.edu/linearalgebra/ which is both good and free) and Real-Time Rendering (http://www.realtimerendering.com/). Tutorials could then help you extend the theory to practice, the same way working through assignments in a graphics class would.
As a disclaimer, I’m not working as a graphics programmer: I am working my way through Real-Time Rendering on the side, and I actually got my degree in mathematics (so I’m a bit biased, perhaps, toward more math rather than less).
Having interviewed a number of progammer candidates over the years I can say that the degree has not proven a good indicator on whether they have an real understanding of these topics. In fact some of the best candidates I encountered were self-taught.
University is a great place to acquire this knowledge but something has to be said for anyone who goes through the effort to obtain it all on there own. Personal drive and the ability to teach oneself is key to being a GREAT programmer regardless of the degree.
I want to be a game programmer. Would this guide help me get a certificate of some sort? I am working and not in school at the moment but I still have plenty of time to read (i rather study alone btw) Please tell me how this guide is gonna help me get a stable job in the future. Thanks in advance. Have a great day.
Well, if you then applied to Cambridge University, you’d have an interesting story to tell the admissions tutor.
But no, this is NOT about getting a certificate – this is about learning in order to be better at your job, your career, and everything you do.
If you read and understand this stuff, and think about it, and experiment with it, I can guarantee it will show through in every job interview you ever do. And that will be a good thing.
Some hiring managers in games companies actively reject people with degrees (they have their reasons, although I don’t agree with that practice), so you may even find yourself in a better position than most people.