Matthias Felleisen gave a rousing opening keynote at SIGCSE 2011 a couple weeks ago. There was a lot to like about the ideas and insights he gave (slides available here). I particularly liked the design-oriented topic list for an introductory CS course, versus a language-oriented one (which looks like just about any intro course you've ever seen, which makes his point). What I didn't like about his talk was the tone of the rhetoric. "Lesson 1: Your PL/IDE must support an arithmetic of images." "Must"? I loved what they are doing with images in Racket, but it's more accurate to say, "Lesson 1: A PL/IDE that supports an arithmetic of image engages and motivates students." I buy that. I also buy that there are lots of ways to engage and motivate students without an arithmetic of images.
This last week, I visited Carnegie Mellon University, where I heard about their new introductory curriculum. They introduce computing with robotics in Python in the first course; contrast that with imperative programming with a strongly typed language called C0 ("C-not"); and finish the three course sequence with parallel programming in ML. I love the multi-lingual, multi-paradigmatic model! Then someone sent me a link to Robert Harper's blog where he claims, "Object-oriented programming is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum." Really? "Unsuitable?" The CMU report describing the rationale for the new approach is more careful in its claims:
Although object-oriented programming (in its myriad forms) remains a dominant theme in industrial software development, the use of object-oriented languages, such as Java, at the introductory level introduces considerable complexity and distracts from the core goals at the introductory level. It seems preferable to give fuller coverage of OO design and implementation methodology to later in the curriculum to allow more focused concentration on basics at the introductory level.
I can buy that. Alan Kay recently said in a comment to a post in my blog, "By my original definition of "Object oriented" neither Java nor C++ is OO." Message sending in Smalltalk and Self is both object-oriented and easily made parallel. Because Java doesn't work for the purpose, all of object-oriented programming is "unsuitable" and must be "eliminated"?
Why do we take such polarized and extreme positions in education? All across the political spectrum, there are complaints about polarization in education. Maybe we fight about it because it's so important. But I would hope that the researchers and scientists could be more careful. Could you get a paper published in a programming languages or parallel algorithms conference making statements about "must" and "unsuitable" without proof or evidence?
In Education research, there is a trend towards design-based research that I think helps to avoid the polarities. Design-based research is about doing iterative development in real classrooms. You rarely come out with definitive statements about which you can make claims of statistical significance for all. Instead, you end up with statements like, "Under these conditions, we can show that these interventions have significant learning gains." Those kinds of statements can guide future design, can help the teacher, but avoid defining A One, True Way. No absolutes, no "musts," no "unsuitables" and "eliminations." Rather, we can talk about what works, leaving open the door that some other set of conditions might make another set of interventions successful. We absolutely care about having strong and careful yardsticks, so that we can measure real learning. But we recognize that there are many ways to reach the end of that yardstick.
Human beings are complicated and messy. What works great with one set of students may not work at all with another. Laws like "F=ma" are rare in education. Instead, we need guidelines that inform future efforts. Let's celebrate our successes in computing education, without claiming that ours is the only path to that success.
I would like to correct a point I made erroneously in the above: CMU is *not* using robots in their introductory course with Python. The quotes do seem to be correct, and I stand by my claim that we need to improve our rhetoric and explore a wide range of perspectives.
Displaying 1 comment