Kim Bruce, statement, CS2 workshop
The following are some points I've been thinking about over the last
several years as we've moved our CS2 to Java and are in the middle of
re-thinking our entire introductory curriculum.
First some ruminations on traditional CS2 topics:
- The availability of good libraries has changed the way programming is
actually done (at last!) from the emphasis of putting together many lines of
low-level code to the integration of systems of objects.
- Because of the existence of these libraries (esp. OO), it no longer makes
sense to ask students to write implementations of all the data structures
from scratch.
- One of Murphy's laws is that no matter what you have available,
what you need will be slightly different, so students need to know how
to adapt existing classes and how to write data structures and
algorithms from scratch (though we don't need to devote as much time to
do this as we did earlier).
- Trade-offs are still at the heart of much CS. Students must be aware that
there are different ways of doing things, e.g., different implementations of
data structures and different algorithms for solving problems. They need
to know how to analyze these alternative ways of doing things and to know
how to choose the best ones for the current problem.
There are also some new things that we should be thinking about:
- Event-driven programming is an important way of thinking and
students should understand how this works as well as how it is done in
high-level languages.
GUI's and active components are also important today and form a good
model for event-driven programming. We can protect students in the early
years of much of the tedium of designing good user-interfaces while giving
them experience in programming to them. From a public-relations point of
view, programming to GUI's is also much more interesting for students.
- Concurrency is no longer an exotic technique. It makes some things much
easier, but also throws in unexpected difficulties. Concurrency should be
introduced into the curriculum early (perhaps even in CS 1), while pushing
off more complex aspects to more advanced courses.
- OO design is hard - in my opinion harder than traditional structured
programming - though the rewards for a good design are much higher. We
need to start introducing students to the elements of OO design. Patterns
can certainly be part of this, but there are more fundamental issues as well.
We can't expect students to just absorb this material on their own.
Of course it is impossible to fit all of this into a single course. How
we repackage CS2 depends on how we repackage the rest of the curriculum.
I believe we need to think carefully about the entire introductory curriculum
and how it impacts the intermediate and advanced courses. CS2 is at the heart
of the matter, but we cannot make changes to it alone.
Owen L. Astrachan
Last modified: Wed Sep 2 00:07:17 EDT 1998