Reviewers' Notebook: The Computer Science Curriculum: Strengths
From CSWiki
Our curriculum in computer science has for many years included a relatively strong emphasis on theory (algorithms, data structures, automata, and formal languages). The small size of the department and the College's rule that no major can require more than eight courses have constrained us to select our courses with great care. We have chosen the subjects that are most widely applicable and appear to have the greatest value in the long term, generally avoiding courses that deal exclusively with popular applications and programming languages that happen to be currently fashionable.
Alumni have, for the most part, confirmed the soundness of this choice. Our graduates report that it is straightforward for them to learn to work with new and unfamiliar applications and programming environments, because their undergraduate work has given them a framework for understanding them. Conversely, in graduate school, our alumni often discover that their superior background in theoretical computer science gives them an advantage over students from larger schools, who are often shocked by the difficulty and rigor of graduate-level work and less comfortable with the concepts and notations on which it depends.
The habits of mind that this approach promotes in our students affect all of our upper-level courses and our students' research and programming projects to some extent. We believe, for instance, that they incline our students to develop a disciplined, modular programming style and to document and test their programs more systematically.
The multi-paradigm approach to introductory courses fits well with this general orientation. It enables us to incorporate some of the big ideas of computer science (e.g., structural recursion, asymptotic analysis of running time) at very early stages, in natural and unintimidating ways. In particular, using a functional programming language in the first course promotes a distinctive and fruitful style of problem solving that students elsewhere often have more difficulty mastering.
Our introductory courses are "workshop-style," that is, they include many sessions in which students work, usually in pairs, on short exercises that illustrate topics from the course readings. We have found this not only to be an effective teaching method, but also to improve students' communications skills and to increase the sense of community and cooperation among students in those courses.

