While I spend a lot of time, some of it laying awake at night, thinking about the state of pre-collegiate computer science education it seems like many more people are thinking about it lately. We can argue that everyone needs computer science education (Why Johnny Can't Program: A New Medium Requires A New Literacy) or that not everyone needs computer science education (Should Johnny Learn to Program?) but I think most of us would agree that access to computer science education is important. We need students to have the option to learn computer science. We have to expose them to the field as something they may want to learn more about and even make a career in. The problem is that most students in the US do not have that option. With only about 2,000 schools offering Advanced Placement Computer Science and only slightly more high schools offering other real computer science education I estimate that students at 20,000 US high schools (out of about 26,000) have no opportunity to learn computer science in a rigorous CS course taught by a qualified teacher.
How do we fix this? Well it is not easy. A recent CSTA Chapter organizing meeting did some brainstorming on this recently (Recruiting: Lessons for a CSTA Chapter) and is still looking for answers. Leigh Ann Sudol, who was one of the co-authors of the ACM report Running on Empty: The Failure to Teach K-12 Computer Science in the Digital Age writes in her blog (Why we need systemic change in CS Education) that small measures will not work. They don’t scale.
It seems like the “answer” most common these days is “Let’s throw up a website.” Put things on the web were everyone can find them and magic will happen. And there are some great web sites out there.
Now these are all great resources. Go visit them. Use the resources that are there. Good stuff. But enough? Ah, no. The problem is not individuals but as several people have pointed out a system that does not enable people. The largest stumbling block is that computer science is outside the core of courses that students are encouraged and rewarded to take. (This is where Computing in the Core comes in BTW) Not only is computer science not offered regularly even when it is offered it does not count towards graduation requirements. This makes it hard for students to fit it into their schedules and discourages guidance departments to suggest it to students. In fact I hear story after story of students and their parents almost literally fighting with guidance departments to get into computer science courses.
Some states do allow students to count CS, usually just APCS though, towards graduation requirements. Nine states allow it to count as a science course and one allows it as a math requirement. Of course this is a political football. Math and science departments do not want to see enrollment in their traditional math and science courses go down as students take computer science. And among computer science fans we get into fights over if computer science is really a science! Or is it really a math? What would should argue, in my opinion, is that it doesn’t matter if CS is a real math or a real science but that it fills the same sorts of need, of gaps in a liberal arts education, that “real” math and “real” science fills. Students should be allowed to count it as fulfilling a graduation requirement. Let the students decide if it takes the place of a math or a science. Let’s face it parts of computer science lean both ways!
In the long run there lowest practice level for starting to effect change is the state level. Moving a school or a district is very difficult in there days of no child left untested behind to change graduation requirements or do anything that is not on a standardized test. The national level would be even better as it makes moving the states easier. There are steps in that direction. There is a Computer Science Education Act which has been introduced in the United States Congress to strengthen K-12 computer science education. This is a step in the right direction but just because we (well ACM, CSTA and others) were about to get Congress to approve Computer Science Education Week doesn’t mean getting a bill like this passed is a sure thing. It is something we need to push for.
BTW There is also the problem of teacher preparation. As Garth Flint writes in his blog (Teacher prep for CS) there are not really many – perhaps not any – universities that are really teaching people to be computer science teachers. Mark Guzdial writes in the CACM blog (Computer Science Needs Education Schools. Desperately.) that we need schools of education to help us. CS departments are not the right places to learn how to teach CS. This is in part a chicken and egg problem though. With few trained and qualified teachers it is easy for schools to say “without teachers we can’t offer the course” and for schools of education to say “with no schools offering the courses there is no point in training teachers.” Some how we have to grow both supply of and demand for teachers at the same time. No easy task.
I learned something interesting this Monday. The Montana Office of Public Instruction stats say of the 140 some odd schools in Montana, 6 offer a programming course. Next year the number will be 5 because one of the teachers is retiring and there is no replacement. Now I admit Montana is not at the cutting edge of CS education but I have a feeling we are not alone in that ratio or in the shortage of CS teachers.
The problem also is that we have an "Important but not for me" crisis as well (just google that title - its a report about how ~80% of parents in a large survey of Missouri and Kansas say that studying math and science is important, but only ~23% feel that their child or their school should require it. People are starting to agree with us that computer science is important and we need people to study it, but can't that other high school over there offer it? or just the students who are interested before they have even encountered it should take it.
I think we need a better introduction to CS in our technology classes, so that IF students have the opportunity to take it later they can make an informed choice about whether or not they are interested.
I have an idea. Would Microsoft be willing to host an event with the goal of writing an outline for a curriculum/course for teacher prep for computer science? I know Microsoft does Education Leadership seminars (I attended one in Redmond, WA last summer) and they do some teacher seminars so this may not be too far out there. Get someone from the CSTA and a bunch of high school programming teachers in to one room. Get a really big white board with a heading of “What a beginning CS teacher should know” and start scribbling. The intent would be to outline a CS methods course or short series of courses for the non-CS major who may end up teaching CS or designing a CS curriculum in their school. There does seem to quite a bit of interest in pre-service and in-service CS education but I really cannot see any action to correct the problem. Microsoft would seem to have a vested interest and might be willing to kick in their organizational skills to get something rolling. Of course if something gets organized I would like to be invited and I would prefer the venue to be in Seattle or there abouts. There are some back roads from Missoula to Seattle that are absolutely incredible on a motorcycle.
I teach at a community college in NJ, where I was formerly chair of CS. Only 10% of our incoming students had mastered Algebra II and that drastically reduced the potential audience for challenging Computer Science classes. Right now I am taking online classes in Web 2.0, hoping to resuscitate our web courses and certificate. That is technology rather than science.