I think most CS degrees still do (and should) require the algorithms and data structures programming.
They are useful skills, and, I think the reason that the section seems "old-school" comes from the proliferation of Java in early CS courses.
Java has most of the algorithms and structures implemented already, and there's no point in anyone redoing it once they find those implementations, so the skills fall out of use.
Well, the point of binary trees and linked lists is also more of what gaius said.
Yes, it definitely helps to be able to visualize how things are structured, but I think the biggest thing you learn comes from understanding the asymptotic performance of various operations on those data structures.
Without understanding these structures, the fact that one provides much faster lookup, but slower deletes seems totally arbitrary and magical.
(Not sure I'm so much disagreeing with you as elaborating here.)
Thanks - I should have elaborated more. I was meaning more of the way memory is structured and accessed. Yes, it's all abstracted now - but it's still important to know and understand.
Just because you don't need to write your own sorting algorithms don't mean you don't have to know how to write one. First of all it is a good introduction to algorithms, analysis and construction and you still have to know the complexity of each to choose the correct one in some cases.
They are useful skills, and, I think the reason that the section seems "old-school" comes from the proliferation of Java in early CS courses.
Java has most of the algorithms and structures implemented already, and there's no point in anyone redoing it once they find those implementations, so the skills fall out of use.