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.