Tucker Balch, a computing professor at Georgia Tech, blames the decline in computer science students in part on what he calls the "prime number" syndrome. According to this AP article the Prime Number Syndrome is:

It's the traditional way to teach computer science students by asking them to write programs that spit out prime numbers, the Fibonacci sequence or other mathematical series.

In short part of the problem with computer science courses is that they are too much about the math. Students are not all interested in the math. That may be partially a result of computer science courses originating from math or engineering departments. A lot of the people in the early years of computer science came out of mathematical traditions. Math was/is interesting to them so that is how they teach computer science. Some of the problem today may be that not everyone thinks that calculating prime numbers is really that exciting. They are interested in a lot of other problems though.

Some computer science departments are realizing this and are bringing other disciplines into the mix earlier in the program. At some places it is robotics. In some game development. In still others there is this new idea of "media computation" programs. There are a growing number of computational biology programs as well. These programs are all about getting students interested by expanding beyond just doing the math.

Now at some point most computer science majors wind up needing more math classes. And there are a lot of concepts that computer scientists use that are related to mathematical concepts. But the days when we need to weed out students early by forcing them to fit the mold of pure math interests are long gone.

A lot of high school computer science teachers also teach math these days. In fact in some states a math certification is required to teach computer science. I guess I was a rarity though. I'm never been a real mathematician and while I assigned the odd Fibonacci sequence a lot of the projects I came up with on went in other directions. I like the idea of the robotics curriculum they are developing at Georgia Tech. But I'm a robot sort of guy. I'm sure the media computation and bioengineering programs also attract a lot of fans. I tend to think that at the high school level, especially for a very first course, what you might want is a lot of variety. The more different disciplines that come into play the more likely you are to catch the interest of more students. And to me, getting students interested is a major goal of a first programming course.

Its sad to say this but if I have two job candidates one with a cs degree and one with a mathmatics, I usually hire the mathematician. I bet if you look around your workplace and make a note of who get things done and right now, it will almost always be the mathematician.

Loyal opposition time again: We had a mathematician as a computer teacher, and it was a, shall we say, less than stellar experience. (The guy was a genius, could calculate 6-digit primes in his head, etc., but knew little about programming beyond what he taught the kids, and they knew it.) Now we’ve got a CS grad, who like me came out of industry, and can teach knowledgably as well as entertain with stories from the real world. Together, those skills make the CS experience rewarding for the students.

Tony, a lot depends on the job. WOuld you hire a math degree over a CS degree for a job teaching CS? I would hope not. No one is saying that math isn’t important or that we don’t need more mathamaticians. All I am saying is that there are better, more inclusive ways to teach CS than a totally math focus.

I think there’s some confusion here between computer science ("the study of the theoretical foundations of information and computation" – wikipedia) and computer engineering (building real world stuff).

A course that teaches people how to write real-world stuff is great and useful, but someone still needs to know how to write a compiler.

A compiler isn’t real-world stuff? Have you ever written a compiler? Sure there is a lot of theoretical mathamatical knnowledge required but if you don’t have computer engineering (software engineering?) skills the compiler is likely to be rather useless.

I think most people need some good mix of theoretical base and practical "engineering." That mix may vary depending on where you go but at the very earliest stages I think one needs some of each. If you are going to be a PhD doing research you are going to be mostly theory but unless you have some practical "how to build things right" you are going to run into limitations. Like wise theory is important for any practical application.

"Compiler" and "real-world stuff" were thoughtlessly-chosen examples.

Computer Science degrees teach computer science, and that’s good.

Computer Engineering degrees teach computer engineering, and that’s good, too.

The original AP article is wrong to complain that CS courses don’t prepare graduates for industry because that’s not what they’re <em>for</em>.

As an aside I agree with you that a good engineer understands the theoretical underpinnings of their craft, though I would say that most development done today involves skinning databases and doesn’t require good engineers.

Lately there has been a lot of discussion in the world of computer science education about mays to make

"Some of the problem today may be that not everyone thinks that calculating prime numbers is really that exciting."

I don’t think anyone ever thought this was a particularly exciting exercise. But it is a pretty good exercise for practicing loops. At one time, before the age of innumeracy, an instructor was able to draw upon a shared vocabulary of mathematics among students, so this exercise was easy to formulate without a lot of explanatory text.

Cay, I agree with you to some extent. You’re probably right about there being a time when that shared vocabulary was more common. It was a pretty safe bet where I taught but that is a private school where most of the students arrived with a good solid base. The problem is two fold in my opinion. One is that some teachers do not see the lack of shared vocabularly and act as if it were there. That makes the learning experience more difficult (if only because now they have to teach prime numbers as well as how to compute them) then it needs to be. The other problem is that today’s students are not as willing to do exercises just for the sake of the exercise as they once were. We can debate causes and how good/bad that is but it is a reality we have to deal with. Finding more interesting exercises doesn’t seem all that unreasonable a response to that reality. At least not to me.

Note to other readers. Cay Horstmann has written some very good textbooks that are widely used in HS CS programs. I’ve used some of them myself.