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. (See our video interview with Dave Eberly and Tim Cox of Morgan Kaufmann at the GDC for more.) 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...
There was a third module building on the previous two, but I know of nobody that chose it as one of their options for this year.
That's not to say all my CS pals are just 'hackers'. A few of them really enjoyed the Formal Methods module, which could be looked at as 'software design using maths' or something like that :)