Directions in Computer Science Education
Eric Roberts, Stanford University

Before offering my recommendations on appropriate directions for computer science education, it is important for me to outline the assumptions on which those recommendations are based:

These assumptions lead me to make the following recommendations:
  1. Colleges should seek to offer a wide-spectrum introduction to basic programming concepts. Because high-school computer science is often so weak, many students enter college with little understanding of what computer science is and why it might be interesting. Offering computer science courses to a wide audience -- our department, for example, enrolls between 70 and 75 percent of Stanford undergraduates -- gives students who choose other disciplines an exposure to programming while simultaneously encouraging more students to consider computer science as a major.

  2. Computer science students need exposure to the breadth of the discipline, but not at the very beginning. The emphasis in Curriculum '91 on early exposure to breadth is an important goal. Unfortunately, the approach of putting this material in the first course has not been very successful, primarily because students do not yet know they are interested in those topics; in most cases, they enrolled to learn about programming and see other topics as diversionary. I've recently been promoting a "breadth-second" strategy, in which students first take a programming course that piques their interest and then follow that up with a broad survey of the field.

  3. Students need exposure to modern software development practices. It is no longer acceptable to teach programming by having students write small, self-contained programs from scratch. Even though we cannot predict exactly what toolkits and programming environments students will use when they graduate, it is essential that they learn to work with some modern programming environment that forces them to add small amounts of special-purpose code on top of a large existing infrastructure. Moreover, this experience should come early in the curriculum so that students can apply these techniques in summer internships and their more advanced courses.

  4. Some classical topics must be deemphasized to make room for the new material. In most programs, the restrictions of a four-year degree make it difficult to add new topics without taking others away. It is impossible to cover such critical topics as software engineering, human-computer interaction, networks, and graphics without reducing the amount of time devoted to classical topics whose importance has faded with time, such as assembly language programming, compiler construction, automata theory, and complexity. These topics must be included somewhere in the curriculum, but it is no longer practical to require entire courses in these areas.

  5. There should be a national effort to encourage the development and distribution of good curricular materials. Given the pace of change in the field and the difficulty of developing effective materials, many colleges and universities are not in a position to undertake extensive curriculum-development efforts locally. Curriculum '91 -- for all its good ideas -- has had less impact than Curriculum '78, mostly because the 1991 document offers much less guidance to institutions that wish to adopt a more modern curriculum but lack the resources to do so. It is therefore critical to encourage institutions that have these resources to devote more time to developing materials that can be exported to other colleges and universities. Moreover, it is important to foster educational innovation in a variety of institutions along several different lines to increase the likelihood that effective educational strategies emerge from the individual efforts.