This Washington
Post article reports on the elimination of underenrolled Advanced
Placement (AP) courses in American high schools. The subjects affected are:
Italian, Latin Literature, French Literature and, hold on to your hats,
Computer Science AB. (The College
Board designs high school courses that aim to be equivalent to college
courses. High school students who take the course and pass an exam are often
given college credit.)
Has computer science become as unpopular as Latin for American teenagers? That would have serious consequences for our industry. As it happens, I just finished serving on the Development Committee for the AP Computer Science courses, so I have a little more inside information.
The number of computer science majors has dropped substantially after the dot-com bust (see the graph below). At the same time, U.S. employment in the IT sector is solidly up, outsourcing nonwithstanding, and there is widespread concern about a looming skills shortage.
Why don't students major in CS? Nobody knows for sure. The Dilbert image of working long hours in cubicles, only to have your job outsourced, surely doesn't help. We do know that most students have made up their mind by the time they reach college, so the way to their hearts and minds is in secondary school.
That's where the AP program comes in. In the past, there were two courses, AP CS A and AB. The A course covers college-level CS1, the AB course covers college-level CS1+CS2.
That, of course, begs the question
what college-level CS1 and CS2 are. In most universities, CS1 is an
introduction to programming, and CS2 covers data structures (linked lists,
trees, hash tables, etc.) While CS2 is fairly standardized, there is quite a
variety of approaches for CS1. The most popular programming language is Java,
followed by C++, but there are enthusiastic proponents of Scheme, Python, C,
assembly, and just about any language other than Intercal. Some CS1 courses
are “breadth first”, covering a bit of networking, databases,
software engineering, and theory rather than diving deeply into programming.
MIT starts out with robotics, mixing hardware, software, and systems design.
That sounds like a lot of fun but it is so expensive and labor-intensive that
it is unlikely to become mainstream.
AP CS must have a single curriculum, so they go with the middle-of-the-road approach: Programming and data structures in Java. That doesn't make them popular with the (intrepid experimenters|lunatic fringe)—see this article. Some of that criticism is below the belt. You can't judge the quality of a course by the weakest question on the final exam. But not all is well with AP CS. There needs to be more room for excitement and fun, not just teaching to the test.
Enrollments in the course have declined somewhat less than at the college level. Here are recent numbers of test-takers, courtesy of Dave Reed, the Chief Reader who administers the CS exams:
YEAR A AB --------------------- 1998 6,478 4,057 1999 12,218 6,619 2000 13,646 6,876 2001 15,827 7,595 2002 15,660 7,799 2003 14,674 7,071 2004 14,337 6,077 2005 13,924 5,097 2006 14,662 4,939 2007 15,049 5,064
Compared to other AP subjects, the CS numbers are not very impressive. In 2007, Physics had over 60,000 test-takers, and US history over 250,000. Latin had about 5,000.
The College Board decided to cut their losses. Without bothering to ask any CS people, they eliminated the AB exam, leaving AP CS as a one-semester course. (As the VP in charge, Trevor Packer, emailed me: “We do not see this as a decision dependent upon disciplinary input.”) This is rather unfortunate since the kids taking AB are the ones most motivated to go into computer science.
There is some talk by the College
Board administrators about growing CS A back into a two-semester sequence,
but that is pretty dubious. Who would heal themselves by first cutting off
their healthy limbs and then waiting for them to regrow? (Trivia fact of the
day: According to the April 2008 Scientific American, Salamanders are unique
in their ability to regrow severed limbs.)
As
you can see, CS in American high schools is in bad shape. That is a problem
for all of us in the computing industry. What can you do? If you have kids in
school, make your voice heard with the school board. Volunteer in the CS
club. (They don't have one? Start one. I fondly remember my high school days
in the physics and technology club, the
refuge of the nerds. We were a proud group of nerds, and many of us ended up
with a Ph.D.) Get your company to send speakers, volunteers, and equipment.
Get kids into your company so they (hopefully) see that it's not Dilbert
land. And remember, what got you into CS may not be what excites them, so be
on the lookout for new approaches such as this or this or this.