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.
- Microsoft Faculty Connection
- Computing in the Core
- Computer Science Education Week
- Exploring Computer Science Website Arrives!
- NCWIT STEM Resources
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.