Crisis in Computer Science Education
Allen Tucker, Bowdoin College
Computer science education is in crisis. Our curriculum is dated, our teaching
methods and faculty development strategies are inadequate, and the computer
science education community is fragmented into interest groups whose
interactions are dysfunctional. (Otherwise, we're in pretty good shape!)
Dated Curriculum
For a long time, the popular notion that "computer science = programming" has
defined our field in the eyes of the public and our colleagues in related
fields of science and engineering. While programming is surely our lingua
franca, our curricula have failed to distinguish this supporting role of
programming from the false idea that programming is just about all there is
to computer science. This single failure perpetuates a gridlock in computer
science curricular evolution at all levels -- high school, college, and
even graduate school.
Furthermore (and this is quite surprising), the programming methodology that
introduces our curricula to thousands of students each year is dominated by
a narrow collection of outdated languages and methodologies (procedural
programming, top-down decomposition, solving small problems from scratch,
absence of teaming, ignorance of formal methods, etc.). Current programming
methodologies (event-driven object-oriented design, solving parts
of large problems, thinking about complexity from the start, role-playing in
teams, use of modern tools for testing and quality assurance, etc.) would be
far more effective at preparing students to understand the modern principles
of computer science and engineering. Yet these methodologies are not
typically introduced until very late in the undergraduate major, if at all.
The subject matter which is absent from our core curricula, due in part to our
uncommon obsession with programming, reflects a collective inattention to
certain central themes that have emerged in our discipline in the late 1980s
and early 1990s. Here are some specific examples:
- The algorithms course usually fails to integrate fundamental concepts of
parallelism, especially in its laboratory component. Yet most significant
future scientific challenges admit the need for sophisticated algorithms
running on parallel and distributed architectures (cf "Computing the Future"
and the "grand challenges" of computational science). In fact, I have recently
heard textbook authors and educators whimsically refer to the algorithms
course as "the CS7 course" as if there have been no fundamental changes in
that course since its identification in Curriculum 78!
- The core curriculum has no commitment to subject matter that covers
computer networks, theory or practice, in a responsible way. Yet the network
has arguably become one of the two or three central topics in the discipline of
computing in the last five years. On the other hand, relatively dated and
uninteresting subject matter, like compilers and assembly language programming,
continue to occupy immovable positions in our core curricula.
- Our curricula rarely provide students with an active appreciation of the
paradigm of science, which includes modeling, empiricism, experimentation,
measurement of outcomes, and hypothesis testing. There are some very
distinguished exceptions, but on the whole the scientific method has failed to
become a central component of our curricula, as it should.
- Human-computer interaction, social and professional issues, and
organizational aspects of computing, have (at best) marginal presence in our
curricula. More often our courses for nonmajors provide students with an
appreciation of these important dimensions of our discipline, while our majors
are left alone in the lab to master the art of hacking. Majors learn few
other concepts that would have important impact on their world view or
technical preparedness, such as a commitment to the principles of
human-computer interaction in software design projects.
- We have failed to effectively integrate the theory of computation into
our core curricula. Many undergraduates are able to put off the "theory"
course, and even the discrete math course, until so late in their programs
that such courses have little impact on their understanding of the discipline.
Many programs have simply given up and dropped the theory of computation
course from the major requirements.
- Yesterday's "advanced" topics are today's core topics. Yet, due perhaps
to inertia, most programs have not effectively migrated these topics into the
core in a timely way.
Many of these attributes are the direct result of widespread disinterest in
meaningful curriculum reform. Experimentation occurs rarely, and when it does
the results are usually not effectively disseminated. Until a premium is
placed on the value of effective teaching across a majority of colleges and
universities, there is little hope for significant changes to take place in any
of these areas.
Teaching and Faculty Development Methodologies
Specific issues that need to be addressed by the teaching faculties of colleges
and universities are the following:
- The large lecture class is still the dominant model for teaching, amidst a
preponderance of evidence that students do their best learning in individual
and small group settings.
- Textbooks as a medium are often unhelpful, overpriced, and unattractive to
students (and faculty), who increasingly prefer alternative styles of teaching
and learning. Discovery learning, for example, is effective in a wide range of
subject areas.
- Labs above the introductory level are usually unstructured, and lab
assignments and methods are too often haphazardly designed and executed. We
need to rethink the computer science laboratory experience, especially at the
intermediate and advanced levels of the curriculum. Graduates need to be
prepared to enter the work force prepared to work effectively in design and
programming groups, use modern tools of analysis and synthesis, and communicate
effectively with peers and customers on the technical and organizational impact
of their work. We are not doing that now, and most of us don't even know how.
- Most teaching methods and learning materials are strongly biased toward
a male, individual, isolated work ethic. Lectures, texts and lab assignments
favor the learning styles that are dominant within this narrow group. While
this is surely not intentional, we need to become more aware and responsive to
this problem, so that our discipline appears both accessible and welcoming in
the eyes of students who represent the widest range of backgrounds and
learning styles.
Community and Infrastructure
Computer science education is a collection of groups that represent various
aspects of the education community. Dominant among these groups are the ACM
Education Board, a kind of oversight group, SIGCSE, the ACM special interest
group for computer science education, the AP curriculum committee, which
oversees the AP test development effort, and various task forces that are
commissioned by the ACM and the IEEE-CS to develop model curricula for various
constituencies that teach computer science curricula.
This is a loose confederation, at best. Channels of communication seem not to
exist at points where they ought to. For instance, it is not clear that there
are criteria for membership on the ACM Education Board that would ensure
representation from the AP Curriculum Committee, the two-year college programs,
the graduate programs, the undergraduate programs, or the various professional
education programs that are sponsored by industry.
Moreover, it is not clear that SIGCSE encourages participation by a wide
constituency at its annual conference in the spring. What are the criteria for
serving on the Program Committee for this very important conference. Where is
the representation from top-10 universities with strong undergraduate programs?
Where is the AP representative? And so on.
Overall, the computer science education infrastructure seems to be ill-equipped
to address the many concerns expressed above, without first becoming functional
itself. A first step would be to greatly widen the channels of communication
and sense of inclusion among the various groups that represent different levels
and interests in the future of computer science education. Much work needs to
be done, but we first need to be organized.