I stumbled upon a really good talk by Simon Peyton Jones from Microsoft Research about teaching computer science early on today. In it he talks about some things I have been thinking a lot about myself lately. That being computer science education throughout the school years. Not just a single or pair of courses late in high school but a series of including CS starting in the primary grades. Even if you don't read the rest of my post I recommend the video.
I’m teaching high school computer science and for most of my freshmen this is their first experience with computer science. Oh sure they have been using computers for many years but that is hardly the same thing. They have been exposed at some level to just about every other science and math subject for years. We don’t wait until high school to teach addition for example. That would be silly. Is it less silly to wait until high school to start computing science training? I think not.
By high school students are using math to help them learn other subjects like physics and even social studies. Can you talk about financial systems without an understanding of math? Not hardly! And they have been using reading and writing for over a decade as tools to learning other things. But not computing and that is a shame. I feel like I get my students just to the point of being able to do interesting things and then we are out of time. Frustrating!
I had my Explorations in Computer Science students write a temperature conversion program recently. It was a great way to talk about the difference between concepts like integers and real numbers, order of operations, and even number bases (1/10 is an infinitely repeating fraction in Binary). This is all material that they learned (sort of) in middle school if not earlier. Why could they not learn it with computing? Personally my understanding of those important concepts was enhanced when done with programming. I suspect it would be for many others as well. That is the tip of the iceberg for me. I really started to understand algebra when I got into programming. Programming allowed me to do so much more is less time that it became a wonderful tool for me.
What I would like to see my high school students is using computing and programming as a tool for more than just learning how to program. I want to see them getting creative. I want them to solve problems but not my problems. I want them to solve their own problems. In my university statistics courses I kept getting bogged down in the arithmetic so I wrote programs to do the math for me. As my professor pointed out to my peers who complained about that I had to really understand the formulas and their application to write the programs.
I’ve had students go on to write programs to help them with their other school work. It is a wonderful thing to see. I would like to see it become the norm rather than the exception. For that to happen we have to start earlier. And it has to be a regular and, dare I say it, required, part of the curriculum.
People say that making computer science required will make it boring or that it will cause students to be turned off from it. And that is always possible. A poor teacher can make the most interesting topic dull, boring, and horrible. That is a very pessimistic and self-defeating attitude though. The other problem is a serious shortage of people qualified to teach CS. What that means is we need to train and prepare more teachers not that we should just give up on the idea of doing what needs to be done.