If students are to pay more attention to the problem than to the programming medium, they need a set of problems to work on. There is, therefore, a perfect opportunity to act upon an alterior motive, and use a problem domain that would have to be taught later anyway. If enough people agree which of the many curricular elements can be used at this level, then it becomes the defacto second purpose for the course. An interesting fact about CS-2 is that its alterior motive not only has become universally accepted, but has displaced the first goal in the course's title, burning the name "Data Structures" into course catalogs across the world.
I hope to see in CS-2's future a revival of the first goal, and a long-overdue update of the programming techniques the course presents. This does not have to take much time away from data structure study -- it will take a couple of weeks to present the modern programming mechanisms, then normal data structure programming will illustrate their advantages. In a semester course, this still leaves plenty of time to cover the linear structures, binary trees, and at least one design of balanced trees, including the performance analyses. There are other opportunities in the CS curriculum to address topics such as graphs (and there are advantages to studying graph theory without spending time chasing pointers around one's program), but where else can we expect students to learn good programming? In a capstone sofware engineering course? That's as useful as taking English Composition in your senior year, after three years of submitting poorly written term papers.
We need to teach good programming techniques, and since data structures are the problem domain, we need to use a good programming methodology that fits them. I favor object-oriented Design by Contract, for these reasons:
Jacob Gore, ToolCASE Computing Inc. jacob.gore@toolcase.com