Education Goals and Priorities
Owen Astrachan, Duke University
Education at the college and university level is undergoing
severe change. Fiscal constraints and priorities are
changing the climate and curriculum. Students are
increasingly concerned with training when we are concerned
with education. Changes in the funding environment will
force departments and universities to turn towards
developing industrial affiliations.
Computer Science is situated in this upheaval, while at the
same time undergoing its own crisis. Is our discipline
beholden to rapid changes in technology? Are our curricula
based on outdated assumptions and criteria of what computer
science is and what a computer science education should
entail? Can we develop symbiotic industrial relationships
without sacrificing academic integrity? Can we
cope with an increasing need for interdisciplinary
collaborations, both professionally and pedagogically?
By and large, students in our courses will not become
computer scientists just as most students taking economics
courses will not become economists and most students
enrolled in mathematics courses will not become
mathematicians. We must develop a core curriculum that
serves computer scientists well, but that offers students
with expertise in other disciplines the opportunity to
either formally minor in computer science or to integrate
the core of computer science into their major discipline.
The time is ripe for this, we must not squander the
opportunity that the Internet and the World-Wide-Web have
provided for computer science by increasing both visibility
and demand for those trained in our discipline.
Goals
We must do more than make dramatic statements. From an
educational perspective, our discipline is fragmented;
battles rage on several fronts including language, breadth,
accreditation. Ph.D.-granting institutions have different
resources and curricula than liberal arts schools.
Departments housed in Engineering schools emphasize
different aspects of our field than do departments housed in
schools of Arts and Science.
Many of our peers look to the ACM, IEEE, and
others for guidance only to find signposts leading to a maze
of twisty passages, all of which look alike. Somehow we as
computer science educators must find a way to pull together,
towards some common priorities and objectives,
rather than each (group) of us pulling in our favorite direction.
Priorities
- Despite the fact that computer science is not
equivalent to programming, we must not forget that it is
central to our enterprise as educators. Hoare puts this
well:
Having surveyed the relationships of computer science with other
disciplines, it remains to answer the basic questions: What is the
central core of the subject? What is it that distinguishes it from the
separate subjects with which it is related? What is the linking thread
which gathers these disparate branches into a single discipline? My
answer to these questions is simple --- it is the art of programming a
computer. It is the art of designing efficient and elegant methods of
getting a computer to solve problems, theoretical or practical, small or
large, simple or complex. It is the art of translating this design into
an effective and accurate computer program. This is the art that must
be mastered by a practising computer scientist; the skill that is
sought by numerous advertisements in the general and technical press;
the ability that must be fostered and developed by computer science
courses in universities.
The language used in our courses is not as important as
how the language is used. Our first courses must provide
students with infrastructure so that reasonably complex
programs can be developed by using class libraries and
augmenting existing code. We must do this in the context
of reasoning as computer scientists so that students
worry less about what kind of loop to use and more about
why the system supplied sort function isn't
appropriate. Students must learn to build programs from
existing components and learn how to build the components
as well.
- Developing a curriculum based on re-using existing
code and classes requires a large base of existing code
and classes designed for both introductory and advanced
students across the undergraduate curriculum. This is a
time-intensive enterprise. We must develop a national
and international repository of pedagogical frameworks
and infrastructure. The amount of wheel-reinventing
done in most programs is shameful, wasteful and
scandalous. The web makes this enterprise realizable,
we must start immediately and we must procure funding.
- Theory and practice must be integrated throughout
the curriculum. The algorithms course should include an
experimental component so that students learn how
realistic data sets, modern memory hierarchies, and
hidden constants affect rough, worst-case big-Oh analysis. Courses
in software design must emphasize that the right choice
of algorithm or data structure is as important as the
right widget-set.
- To make room for new courses, e.g., in networks and
graphics, some courses will need to change.
If there is agreement that courses must be removed or
coalesced, we should look for ways to integrate material, perhaps
through some kind of spiral approach, rather than
removing courses wholesale.
For example, integration of theory and practice can be combined with
modern software toolkits in integrating courses in
automata theory and compiler construction.
- We must listen to our industrial colleagues and work
to integrate their needs into our framework. We
literally cannot afford to ignore these needs. Perhaps
the technology-transfer that has traditionally been from
university to industry will begin to flow in both
directions.
- We are forced to re-tool as technology changes.
Although the core of computer science is independent of
technology, our introductory courses are forced to
track technology or lose students. Is this true of all
courses? Is this our educational destiny? If so, we must
provide resources and time for those involved in the
delivery of courses and in the development of pedagogical
tools.