I love how everyone and their brother has an opinion, and
it always stops there. I’d like to take a moment to rant,
and point out that opinions do not a curriculum make.
The question of “what is computer science?” has been
around for a while. The question of “what goes in a CS
curriculum?” has worked the academic circuit for a few
years as well. What’s great is that every Tom, Dick, and
Harry will come up with an opinion, but not a lot of
people work hard at actually trying to come up with a
justifiable answer.
Dan Zabonini is a Tom, Dick, and Harry. Over at O’Reilly’s
“Policy Center”, he’s posted his half-baked thoughts
online (http://www.onlamp.com/pub/wlg/7757); it isn’t
worth an active link. Just before a bulleted list of
random thoughts, he qualifies his thinking with this
choice quote:
So, what would you include in a modern Computer
Science/Software Engineering course? I’ve started
jotting some draft notes below (in no particular order,
this is just a stream of conciousness…)
“This is just a stream of conciousness…”
If you want some thoughts on the topic that are not just a stream of consciousness, you might start reading
the ACM Model Curricula documents; I’ve read them all.
They’re complex, they consider a wide variety of issues,
and they reflect the state of the discipline at the time
they were written. Smart, hard-working people who have
given their lives to the study of computing, who spent a
lifetime teaching the discipline, crafted these documents.
Curriculum 68 was incredibly math-focused; it proposed a CS curriculum
that, among other things, included thermodynamics and
quantum mechanics. Curriculum 78 saw a lot of maths drop from the curriculum, much to the
dismay of many; this is a theme that can be tracked
through the ACM DL from the seventies to today. (Here are afew links to get you started.) The writings of Allen Tucker and Anthony Ralston are
both particularly insistent on the role of mathematics in
the CS curriculum.
The Joint IEEE/ACM Curricula 91 and CC2001 expand the scope of the discipline; CC2001 is
particularly painful, as it defines an incredibly broad
disciplinary set, yet sets up evaluation criteria that,
75% of the time, can be met without a student ever
learning to program. Granted, in practice, programs are
not run this way, but the criteria (as stated) do not
explicitly require programming skill. I stress skill, because in most all CS departments, programming is not
taught as a scientific practice, but as a skill- or
craft-based activity. Again, there’s a literature on these
different kinds of knowledge (scientific vs. skill vs.
craft), and different theories of teaching and learning
associated with each.
The curriculum is under constant revision—often pushed and
pulled by industry and technology. Physics isn’t pulled
about this way; nor is Mathematics, Chemistry, or Biology.
Why is it, for example, that the AP curriculum was
switched from Pascal to C/C++, and then (in a just a few
short years) to Java? The language was incredibly young,
untested, and has a convoluted, involved syntax to do
simple things. From a first teaching of programming
perspective, it’s an abomination. You don’t think so?
Perhaps, then, you’ve never tried to teach 45-year-old
returning students how to program in Java then.
If you’re going to walk around suggesting what should or
shouldn’t be in a computer science curriculum, then
perhaps you should begin by catching up on the arguments
that have been made for the last 40 years. While you’re at
it, I think it would be good if you understood the
fundamental research on reading and writing that’s been
done in the last 100 years, the research methodologies
that were employed in that exploration, and the
significance of the findings made with respect to teaching
and learning theory over the last five decades. I don’t
claim to have a complete grasp of all of this material,
but I’ve made a start—and that’s more than 98% of the
people who think, just because they can write some Java to
transform XML documents in a servlet container, that they
have important insights to offer the world regarding the
teaching and learning of programming.
Once you’ve made a start on the literature, then we can
have aninformed discussion, which is much more
interesting than pissing in the wind.
End of rant.