Tuesday, September 14, 2004

Is the AP Test to Blame for Shifting CS Enrollments?

It is no secret that undergraduate enrollments in computer science have been dropping over the past five years. Students follow the money and, with the perception of a weaker job market in computer-oriented careers, less students are willing to study computer science.

Why does computer science follow the job market so closely? We don't see such swings in physics or history but such swings are common in engineering disciplines. Are undergraduate viewing computer science more as engineering than science? And why?

One theory I recently heard puts the blame on the Advanced Placement (AP) Computer Science Exam given to high school students. The reasoning goes as follows: The AP exam has a strong emphasis on the Java programming language and so high school teachers, teaching to the exam, focus most of their course on syntax and coding of Java. This gives the impression to students that computer science = programming.

I don't agree with this assessment. I looked at some sample CS AP tests. The tests, particularly the AB exam, requires some knowledge of data structures and simple algorithms. Nothing deep but enough that students should realize that computer science is more than just programming.

There was a surge of interest in computer science when I started college in the early 1980's (with the advent of personal computers) before an AP test in Computer Science even existed. Also I've heard of declines in enrollments outside the US where they don't use the AP tests.

But in the end we shouldn't be that worried about shifting enrollments. Advances in computer technology have helped drive computer science from a virtually non-existent discipline forty years ago to one that many universities now consider one of their most important departments. Better to have enrollments that swing up and down with the state of the computer industry than one that stagnates at the low end.


  1. In the case of physics and history it's hard to make a career without an advanced degree. Computer science is one of the few areas where you can get a professional-grade salary with just a BA or BS (well, it used to be, before the "job-less recovery").

    Another aspect is that, at many schools, you don't need the "science" part so much, and the program *is* very focused on programming. A CS degree, after all, is the degree you'd imagine a computer programmer would have (modulo generation).

    For myself, I have troubles even describing what a PhD in computer science means. I was talking to someone at a car dealership who was convinced that I knew "what was inside computers," as if one could get a similar PhD in "Cars". I ended up telling him it was much more like mathematics, though that is somewhat not true. So, you can see that someone who has a better clue of computer science might see that it mostly involves programming.

    So, Lance, how would you describe computer science to the layman?

  2. In response to your comment, I think it is certainly true at my institution that lower-level CS classes (say, up through sophomore year) are taught more
    as "engineering" than as "science".

    On a somewhat related note, one thing that strikes me about CS is how ill-defined an *undergraduate* major is. In particular, the classes that one is expected
    to have taken before graduation seem to vary tremendously from institution to institution, more so than in, say, physics.

  3. In my program, we are expected to take (core requirements) the following classes:
    1 intro class to programming
    1 in object-oriented concepts
    1 in discrete math
    1 in algorithms and data structures
    1 in software engineering
    1 in operating systems
    1 in assembly
    and 1 senior design project class

    Computer science itself is only partly about computers. you need both theory and engineering for it to work. The IT industry sees the engineering part of CS, so that's why it's the first thing we see when we think about a degree in computer science. MS isn't selling an operating system (or concepts of ir), it is selling its own product, which is palpable and has been made thanks to the efforts of thousands of coders.


  4. (first comments are always so awkward)

    I doubt the AP exam is to blame for a drop in enrollment. Instead, I suspect the economic boom caused unusually large enrollments, and that we're in a period of readjustment.

    I was also pleasantly surprised when I saw the AP CS exam at some point (though I didn't elect to take it in high school). I don't think the subject suffers from a bad test; instead, I think it suffers from undertrained teachers even more than most every other high school subject does. It's not uncommon in high schools today for math teachers to sit down over a summer and learn Java to conform to a mandate from above to offer the class. Their knowledge rarely goes beyond the subject matter of the class, and sometimes it doesn't even extend that far --- sometimes the teacher relies on bright students to clarify subtle points!

    This was especially true when the AP shifted from Pascal to C++ to Java, but it remains true and a major problem today.

  5. It's a dismal view indeed for computer science education, if one goes by the google ads (on the sidebar) brought up for this topic...

  6. Hi,
    I had a similar conversasion with a taxi driver. he asked: What do you mean a phd? if i bring you a computer can you fix it?
    my answer was (it took me few seconds ...): how can you drive a car without knowing how to fix it?


  7. OK gang, what do you think of this:

    "Computer Science: The field of study of the construction, analysis and limits of different models of computation."

    That seems to cover theory, languages, algorithms, compilers, software engineering, networking, and I guess AI fits in there too.

  8. My confusion:

    Even inside a computer science department, why theory people seldom look upon engineering issues, and why engineering-focused people (e.g. from networking, database) told me theory is useless ???

  9. I don't see what the problem is with the emphasis on programming. The vast majority of people who get CS degrees go on to be programmers, and the bulk of CS theory is a complete waste of time for those people. If anything it would make sense for colleges to move most of their students from CS degrees to some kind of programming degree, but most institutions don't offer any kind of degree like that.

  10. When a technology becomes common, people take it for granted and forget the origin gradually. When surfing the internet, enjoying being online, how many people will actually think about those people who worked hard to build this whole thing. The same is how much time do people really think with their heart about how much our ancestor's contributed to our beautiful life. If the theory community did something to the benefit of people, should we not just let it go or should we keep on telling people how great we are?