The following points lay out some important issues to be addressed in designing more up to date curricula in Computer Science. There is no attempt here to be complete, and no claim is made that these are THE most important issues. Instead they reflect my concerns about the impact of programming languages and paradigms as well as my concerns about the role of theory in computing.
Unfortunately, for all of the advantages of the object-oriented paradigm, there are corresponding disadvantages. While a good library for an object-oriented language is much more likely to be useful than a similar library for an imperative language, it is also correspondingly more difficult to design a good library. The designer must not only consider the needs of users of the components, but also those who wish to make incremental changes to the provided classes in order to adapt them to slightly different situations. Similarly it is often hard for those who have first learned a more standard imperative approach to learn the object-oriented way of designing algorithms. Those who have shifted to object-oriented languages often report an "aha" experience after several years using these languages. Object-oriented modelling is more difficult to understand and do and will require extra effort and time for the key ideas to get through.
I believe that the object-oriented approach will need to permeate our curriculum, but fear that it may take more time to get the ideas across than more traditional approaches.
As stated above, accumulating evidence suggests that object-oriented languages are likely to be dominant in the future. This has led many to advocate C++ as the introductory language of choice. However most programmers have found C++ to be difficult to master, especially if one wants to adopt a truly object-oriented approach to program design. While languages like Eiffel might be a much better choice, political considerations suggest that it is unlikely to emerge from the pack. Instead the new language Java may provide a useful compromise. It's C-like syntax and support for programming on the world-wide web make it an attractive choice for many, while its relatively simple conceptual model, support for garbage collection, and relatively comprehensive graphics library make it an attractive choice for introductory courses. While Java desperately needs support for parameterized classes, there is every indication that this will come in the near future.
Moreover, object-oriented languages' support for modelling suggests that an introductory sequence can be created which discusses issues of modelling as applied to many different areas of computer science. Students could add features to an emulated computer architecture, experiment with different data structures for indexing data bases, or experiment with different heuristics for AI problems. The object-oriented paradigm should make it easier for the instructor to provide a simulator which can then be added to or modified by students. Thus students can build their programming skills while learning about other areas of computer science via emulators. Moreover, the use of inheritance will require students to read other programmers' code, making it easier for them to write good code themselves. This mix of programming and broader-based approaches may prove to be more successful than either of the alternatives.
However, colleges and universities need also to think about their graduates long-term needs. If a curriculum is designed around today's industrial needs, what happens to the students when those needs change? Moreover some faculty seem to feel that if most entry level positions require competence of language X on architecture Y with operating system Z, then this means that students should learn these items from the beginning of their academic careers. Others have argued that this is analogous to requiring pilot trainees to begin learning to fly on jumbo jets. As faculty our job is to ensure that students have mastered certain ideas and skills by the end of their academic careers. Starting with simpler ideas and tools allows students to master the fundamentals before attempting to deal with more complex situations and tools. We need to ensure that our students have the ability to keep up with the inevitable changes to the field throughout their careers, as well as have the necessary skills to find productive employment upon graduation. Because of the difficulty of forecasting exactly what those skills are, we should be conservative about chasing after the latest technology, while actively pursuing breakthroughs which have an impact on fundamental principles underlying the discipline.