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.