Why do CS PhDs, who spend 98% doing theory (math), need to know anything about installing an OS? Why do undergrads, who probably use preassembled OEM boxes, need to understand the differences between hardware brands?
More to the point, how does learning memory management or class design through C++ help one learn these things?
To address a less ridiculous point, if I'm spending all my time in Java, Ruby or Python, why do I need to understand anything about pointers and memory management in C? For the sake of argument, let's say we need to understand how the stack, heap, and reference variables work in a garbage collected language. Why do we need to learn C to do that?
In undergrad I was required to take a class which involved writing one's own implementation of malloc. Like so many other classes required for a CS degree, I use nothing from it in my day-to-day work as a Ruby developer.