The state of computer science, part 2: Is CS becoming a service discipline? Should it?

In a previous post, I posed some interesting questions based on our recent enrollment patterns in our 111 and 20x-level classes.  In this post, I want to delve into the first 2 questions a bit further:  is CS becoming a service discipline, and if so, what are the implications for what we teach in our 111 and 20x-level courses?

CS as a discipline in general is still fairly new, and thus as a discipline we’re still all figuring out exactly what we are, and thus what our core principles should be.  (In fact, there was an article in the April Communications of the ACM that sort of argues for data structures as the “core concept” of computer science.)  Thus, it’s kind of hard enough, sometimes, to think about what we should be teaching our majors.  And in fact, as a department we do discuss this at length, and have taken on renewed energy in discussing this lately as we prepare to bring in a new faculty member and to start some assessment initiatives.

The discussions we have, though, do tend to focus on what our majors need to know.  That’s somewhat relaxed when we talk about Intro—there, our concern is typically “what do our students need to know before they get to 201 (data structures)?”  (Which is also kind of interesting, because now students can go from Intro to one of four courses, and yet we still think of the logical progression as 111-201, and not, say 111-204-201 or 111-202-201.  I think that’s still an artifact of the fact that 201 is still the prereq for basically everything else in our department.)  And that used to make sense, because 111’s been more of a service course for a while, and 201 has largely been intended majors and math majors and maybe a few others.

But what happens when 201 starts to look more like a service course, too?  Or 204 (software design)?  While the two populations—majors and non-majors—have some overlap in goals and desires for taking the course, their needs are ultimately different.  Non-majors, I suspect, take these courses to gain more meaningful coding practice and experience.  Majors need this, too, but also need the theoretical foundations.  So in 201, at least, we straddle these two worlds, and are never really sure if we’re hitting the right mix, or serving one population better than another.  (And I suspect there’s enough variation among the profs in the department that the mix is not the same between sections, either.)

So when push comes to shove, who do we serve?

This is a timely question, because we are considering a language switch earlier on, so that our majors are exposed to two different languages early.  But if we do so, say, in data structures, how does this affect the learning of the student whose goal is just to gain coding proficiency?  That will be the topic of my next post in this series.