I recently read an article in Communications of the ACM about making computer science in the classroom more socially relevant. The author, Michael Buckley of U. Buffalo, points out that “there isn’t a textbook out of the 60 I have on my shelf that makes me see computing as socially relevant…. If I was a student, beginning these important four years, and I was taught programming via doughnut machines [, pet stores, and games -- the types of examples he finds in the textbooks --], I would quit and go do something important. Major in some field that had an impact.”
The author argues that when intro computer science is taught using silly, simple examples, students just don’t see the potential power and relevance of the tool. ”Even… pure mathematics has me counting and measuring planets and populations.” He’s created an alternative set of examples that are much more socially relevant, involving for example voting systems (counting), pollution in the great lakes (2-d arrays), disaster evacuation (optimal paths), and drug interactions (databases).
These observations struck me as stunningly accurate. I think a big part of why I was drawn to computer science was that I had a strong sense of the power of programming long before I took an actual CS class. I think I saw very early on that you could learn how to do math, and then you could program the computer to do that math a billion times in a second. It could do all these things for you. It just seemed like the ultimate tool.
Also, I remember thinking that the coolest part about taking Statistics 201 in college was getting to use all sorts of real-world data sets. Historical SAT scores come to mind. We ended the course by doing a project where we had to gather some data in the real world and analyze it with statistics. My team looked at whether people’s close friends have the same sibling status (i.e. only child, older sibling, younger sibling). Not rocket science, but certainly socially relevant!
Conversely, I remember spotting contrived examples from miles away. In algebra and pre-calculus, you spend a fair amount of time learning how to do vector math, and most of the examples involve things like canoes in a fast-flowing stream. It always seemed bizarre to me that we were spending so much time on something with so little real-world applicability. Finally, I got to calculus and realized that the real reason we had to learn all that vector math was because it was vital for calculus, which allowed us to model physics, economics, biology, on and on. My thought was “why didn’t you just tell us about calculus, instead of boring us with canoe examples?”
Mr. Buckley has gone even farther by setting up a lab where more advanced students work on “socially relevant” problems, including educational tools and devices for the disabled. That’s fine, but it seems to me that the critical insight here is about how students are introduced to the field. Once you’re advanced enough to work on real problems, you’re hopefully way past the point where you understand why computer science is interesting and relevant.
I share his outrage that none of the textbooks are up to the task. Let’s get moving.