Archive for July 26, 2009

The meaning of computer science: What our students are thinking about

If you haven’t seen these blog posts yet by “The Wicked Teacher of the West,” I recommend them.  The author is middle school computer science teacher whom I think is terrific–smart, cares about teaching, trying hard to learn something new.  The challenges she had in her workshop are probably like those of our best students when they are struggling in our computing classes.

I also know a bit about the workshop that she was in, and I also hold it in high regard.  It’s got great ideas in it, and there are definitely things in that workshop that Wicked Teacher might use in her classes.  Here’s the rub as I see it: those two things weren’t connected for her.  As she put it, “I felt like I didn’t ‘get it’ but other than saying that I felt like I had no context, I couldn’t articulate what I meant.”

Today, I’m currently working on the lists of “Big Ideas of Computer Science” for the new APCS “Computer Science: Principles” Commission (and connecting these to Peter Denning’s Great Principles of Computing), and for the last few days, I’ve been working on the lecture slides for the Second Edition of our Python Media Computation book.  The combination of these blogs and these activities have me wondering, “How do we explain the big picture to students, especially when we don’t agree on the big picture?”

Whenever I hear someone saying matter-of-factly, “Computer Science is really just engineering,” I know that they haven’t really thought about what computer science is, at least in terms that students are looking for.  I think the workshop leaders had a reason for telling the Wicked Teacher why they were asking her to do all that she did.  But not only didn’t they tell her, I don’t think it was the same one that  she was looking for.

The workshop leader saw the meaning of the code as being the correct execution.  What Wicked Teacher was looking for was why should she care.  The state education officer who critiqued me for not thinking hard enough about the match of standards to computing principles was right.  If I want teachers to care about computing, I need to show them why it’s important in terms that they consider important.

This connects to my Python slides and Great Principles. In one example, in the book, we show how to decreaseRed in a picture:

def decreaseRed(picture):
  for pixel in getPixels(picture):
    value = getRed(pixel)
    setRed(pixel, value * 0.5)

Then we parameterize that function further:

def changeRed(picture, factor):
  for pixel in getPixels(picture):
    value = getRed(pixel)
    setRed(pixel, value * factor)

Why do that? Why should we add the additional parameter to the function? I completely believe that this is an important part of introductory computing that we should teach. But what’s the story that we give students to give this meaning?

In our Python book, we give the traditional, engineering-based explanation: By adding the additional parameter, we make the code more reusable so we can later build even more complex things more easily.  But what if someone doesn’t care about building more complex things, or building anything later?  What if they care about other things that are just as valuable?

I realized that I really could tell a story about “bindings” here, about associating names with values.  Peter Denning’s Great Principles touch on some of these.  By delaying the association of a value for factor, I maintain flexibility and expressiveness.  That’s a path that leads me to thinking about a wonderful set of abstractions that are powerful and unique to computer science: scopes and namespaces, functions as first class data objects, lambda (as the value for a function binding), creating new kinds of control structures, aggregating data and procedures together to create objects, and the power of “messages” where the function to be invoked for a given “name” is decided later, by the receiver.  That might be engineering, but it’s closer to mathematics to me.

What many of my most serious students really care about is exploring the effects of this new function.  What visual effects can you get by manipulating red?  When do you want to?  What is the power and  limitation of a red/green/blue color model?  What can I say easily, and what is more complex?  They care about the power of representations, and choosing a particular model, and about empirical data resulting from experiments with these program.  Now, computer science looks like science.  That’s yet another, equally valid meaning for adding the factor parameter.

The Wicked Teacher was looking for a meaning in what she was learning, and I suspect that it’s a different meaning than what the workshop leaders were offering.  There are several efforts, like Peter Denning’s and those of the APCS Commission, to define what “Computing” means. The real challenge that we face (in these efforts, and as teachers) is to offer a variety of meanings. We want to encourage deep thought and engagement in the power of computing.

July 26, 2009 at 1:44 pm 8 comments

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 10,185 other subscribers


Recent Posts

Blog Stats

  • 2,060,430 hits
July 2009

CS Teaching Tips