I am archiving older pieces I have written on other sites, making this the definitive home for all my work. This is one of several I am porting over from my GameDev.Net user journal. Enjoy!
I've long been critical of the way programming is taught in most computer science programs, at least in the US. I've had the opportunity to partake of two: UNC Greensboro, where I was enrolled for two semesters; and Stony Brook University, where I am taking my second CS course (for upper-division credits, so I can graduate this May). Both are excellent schools and excellent programs, with excellent professors and excellent facilities, so the problem clearly is not with the infrastructure. It is with the content.
The problem? An overemphasis on "subsystem reimplementation." In today's software development environment, integrating subsystems and architecting elegant larger systems are by far more important than writing yet another memory manager or windowing system or renderer or linked list or sparse matrix. Teach these kids to think about how to solve problems, show them common data structures (allow them to implement a few, ask them to reason through the rest without implementing), then set them to work building systems from standard implementations.
The most frequent and most pitiful question asked in the beginner forum, beside "Where do I start?" is "How do I put it all together?" And the truth is, we don't have enough resources on putting it all together.
I remember the first time I picked up 3D Game Engine Design. I was thinking, "Yes, finally! A book that talks about how to put it all together!" Boy, was I wrong! And I wasn't the only one, so much so that Eberly wrote 3D Game Engine Architecture, which I haven't yet read, when he realized that lots of us had different expectations of the title. Software design remains an understated area. We vaguely say things like "be sure to design your system before you start implementing it," but we don't teach the necessary design skills or tools with anywhere near the fervor that we teach the math and coding skills. Most college CS graduates have taken precisely two courses that touch on design techniques like Software Development Cycles and tools like UML. Witness the relative unpopularity of our own Software Engineering forum.
We need a greater emphasis on architecture and engineering, here on GameDev.net, in the game industry (all aspects, including indie development), and in computer science in general.
Boy, that was a strong case for the obvious...