Mindstorms, LOGO and Scratch: What happened to procedural thinking?

One of the key ‘powerful ideas’ that comes up in Mindstorms is the idea of procedural thinking. I can’t recall if Papert uses this phrase, but what I mean by it is, being able to think about a sequence of actions and break it down into smaller sub-procedures.  This is a fundamental practice in computer programming, although in modern object-oriented programming it also extends to grouping a problem’s set of data and procedures into smaller subdomains called ‘objects’.  Still, with or without objects, writing your own procedures (or functions or methods or whatever they’re called in your language of choice) is how we take the massive task of “Do this huge set of actions” into smaller parts that the programmer can wrap their brain around at once.  In LOGO this is done by essentially defining a new word: “TO DOTHIS” would create a new verb, DOTHIS, in the sense of “To do this thing, you should …”etc.

Papert extends this idea into the realm of a metacognitive “powerful idea” in a few different directions.  Once someone has the idea of breaking down a complicated task into smaller, “mind-sized bites” (in the words of a grade 7 student quoted in the book), they can apply this to other complex tasks outside of computing.  Papert even extends this to physical education with a research study done by one of his colleagues on teaching students to juggle, breaking it down to smaller sub-skills of “TOSS RIGHT”, “TOSS LEFT”, etc.

This seems pretty huge. Computing is definitely not the first or only domain where people have understood breaking large tasks down into smaller sub-tasks.  But it does provide an environment where students can easily create their own complex tasks and wrestle with the complexity.  This is, I think, pretty unusual – in most areas of life, the challenge of a complex task is primarily in actually doing things.  In computing, we are scripting commands and the computer does all the “doing” for us.  So in effect the challenge of “doing” is removed, leaving only the challenge of wrestling with exactly what to do.  Students experimenting in a rich computing environment will end up discovering the problem of managing complexity as a natural effect of playful building, and won’t mistake this for a problem in how they are “doing” the tasks.

Okay. This is all great, seems like an obvious win for creative computing education.

So why did Scratch leave this out?

I know, I know, go download Snap.

In Scratch, kids do get exposure to a pretty nice laundry list of advanced computing concepts: events, parallel programming / threads, objects, variables, lists, and plenty of I/O options.  But Scratch left out the ability to create new “procedures” or blocks.  This omission was glaring enough that a separate project branched off from Scratch with the sole purpose of adding this feature (initially called ‘BYOB’ for Build Your Own Blocks, now rebranded as Snap).

The fact that there’s an “advanced” version with this ability is great and fills the gap.  I’m not really arguing whether they should or shouldn’t have included that in Scratch in the first place.  I’m just kind of startled to realize how weird it is that they left it out.  Procedural thinking seems to be the biggest advantage, the most important “powerful idea” that Papert sees in introducing kids to computing.

I’m sure this was left out on purpose.  I just wish I knew the reason why.  In LOGO, allowing a student to create a new verb was relatively natural.  Was this concept too hard to integrate into the visual model for the UI in a way that younger students would understand?  Or was this tool seen as adding too much complexity – despite the fact that it exists precisely to reduce complexity?

EDIT: John Golden posted this to the Learning Creative Learning MOOC community (a course run by the same MIT lab that founded LOGO and Scratch) and the responses are interesting. In particular, Natalie Rusk offers some behind-the-scenes answers to the questions I had. (Sometimes the internet is fantastic.)

About these ads

4 thoughts on “Mindstorms, LOGO and Scratch: What happened to procedural thinking?

  1. That does seem like a pretty serious omission, particularly considering that Scratch was developed by people who almost certainly have read Mindstorms and I think many of whom worked with Seymour Papert directly.

    There is another programming environment for kids which does have the “new block” capability. It’s called Turtle Art. It’s not as flashy as Scratch, but I like it. See http://turtleart.org/. You have to send an email to someone to request the download link, but it is otherwise free to use.

  2. They have added custom blocks (procedures) in Scratch 2.0, however they are sprite-specific–you may only use the procedure for the sprite you created it in, which is huge limitation. Like with variables, should be able to make procedures available to all sprites.

    • It’s a very object-oriented way of doing things, and if the goal is to teach kids to think in terms of OOP then it makes good sense. I’m on the fence about that myself. Creating procedures for all sprites would be pretty powerful and interesting; however this limitation will help kids think in terms of encapsulation and avoid a “make everything global” mindset.

      It also avoids some possible hurdles, eg. if someone makes a new block that uses local variables then it would break on every other sprite that doesn’t have that same variable. Still, Scratch has had impossible situations before (eg. copying a script with sprite-specific blocks to the stage) and it handled it relatively well by highlighting the error in red.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s