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?
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.)