Saturday, June 15, 2013

Teaching Kids To Code Part 3: Scratch 2.0

The past two posts were a roundabout way of saying we shouldn't learn to code to learn to code. That premise is silly. Nobody thinks that anyway. I guess I could have just stated that and not put together the previous two posts. Dang it!
Okay.
Start over.
Forget about everything else I've written up to this period ->.

Good morning!
In May of this year Scratch 2.0 was released to the general public. At the beginning of 2013, Mitch Resnick, one of the leaders in developing the Scratch programming software, gave this TED talk:


To Summarize:
1) Scratch 2.0 uses a web cam or a microphone to interact with the computer.
2) Scratch allows the young peoples to express their ideas with new technologies.
3) When kids learn to code, it opens up opportunities to code to learn.
4) Programming teaches working collaboratively, thinking creatively, and reasoning systematically  so therefore everyone should learn to code.

I want to talk about each of these points in turn. And I'd like to talk about it partially in terms of what was discussed in Teaching Kids To Code Part 2, and specifically what Bret Victor outlined in his essay:

The environment should allow the learner to:
  • read the vocabulary -- what do these words mean?
  • follow the flow -- what happens when?
  • see the state -- what is the computer thinking?
  • create by reacting -- start somewhere, then sculpt
  • create by abstracting -- start concrete, then generalize
The language should provide:
  • identity and metaphor -- how can I relate the computer's world to my own?
  • decomposition -- how do I break down my thoughts into mind-sized pieces?
  • recomposition -- how do I glue pieces together?
  • readability -- what do these words mean?

1) Scratch 2.0 uses a web cam or a microphone to interact with the computer.
I put this point first even though it is not first in the talk because it's the silliest, and really doesn't belong in the talk. But it's important in this discussion because it's been a fairly big feature when promoting Scratch 2.0, but no one really seems to know why. As one Youtube tutorial put it, "I'm still trying to figure out how we are going to use this, but it will be brilliant experimenting with it." 

In the Golden Circle, this is a classic example of the "What" being answered first, a search for the "How" and not a clue on the "Why." Jay Silver has a "why" though.  But I don't want to talk about that. Not yet. Instead I want to talk about what Scratch does well, and how these new features, although really fun, seem to go against this.
What Scratch does well as a language is Bret Victor's idea of identity and metaphor. The default sprite is a cartoon cat:
Top of the mornin' to ya!

And many of the commands are intuitive. There's not a whole lot of guessing when it comes to the following code:

We know that it will do something like this:
Except with movement

But let's look at the command that allows sprites to react to the motion from your webcam:

"Identity and metaphor" seems to be thrown out the window. So is "Readability." To get the sprite to react to your hand, something like this would work just splendidly:

But that doesn't seem intuitive at all. So in a sense these new features came at a cost of what Scratch users and learners truly value; that the coding language is easily identifiable and easy to experiment with. That is offset by the initial 'wow' factor; it isn't that hard to program web cam motion and sprite interaction, and that's really cool. But beyond the initial excitement, what can we do with it? I have some ideas, but that comes later.

2) Scratch allows the young peoples to express their ideas with new technologies.
This is true for many children, and primarily because Scratch does the following pretty well:
The language provides:
  • identity and metaphor -- how can I relate the computer's world to my own?
Most of the commands are intuitive, and the sprites that they control are easily relatable. There is even a subset of commands grouped under "pen" because often we want to draw something.

  • decomposition -- how do I break down my thoughts into mind-sized pieces?
This is an important feature of Scratch. Commands are shaped like lego blocks that can be snapped together or wrapped around each other. Their color coded based on the group each command is found in, and it is relatively easy to visualize your ideas into chunks.

  • recomposition -- how do I glue pieces together?
Scratch 2.0 does this exceptionally well, and is in fact it's greatest selling point. This is how Brett Victor defines recomposition:
Creating is remixing. To a large extent, new ideas are old ideas in new combinations.
A programming language must encourage recomposition -- grabbing parts of other programs, assembling them together, modifying them, building on top of them. This gives creators the initial material they need to create by reacting, instead of facing every new idea with a blank page. It also allows creators to learn from each other, instead of deriving techniques and style in a vacuum.
Scratch 2.0 encourages remixing. In fact when you make a scratch project there are two options for sharing; you either keep the project private, or open to everyone. The Scratch developers deliberately only allowed those two options. You can't share among a small group, or distribute a link to those you choose. You either share your project to the world, or you don't. 

When you're looking at another person's project then, you can remix it. The code is open to you, and you can change it to however you want. The environment keeps track of various changes by updating a "remix tree". The tree shows visually where the original project came from, and the different remixes it has spawned. 
The remix tree for the Scratch project, "Stupid Hair!!!

The environment encourages sharing and discourages plagiarizing by keeping track of the remixes itself. 
HOWEVER...
Another important component for sharing and learning that Scratch 2.0 has incorporated is the Backpack- a virtual space that transcends your Scratch projects where you can store important sprites- code and all. 
One of these sprites I made, and one of them I stuffed 
in my backpack when the others weren't looking.

This is critical so that you don't have to worry about wasting time recoding the same sprite over and over. I love this feature. But using the Backpack seems like a way to get around the authoritative gaze of the remix tree, in that there is no "Backpack" tree, and no sprite history. So it's possible for someone to completely rip off a sprite without giving due credit.
"I found away around the eye, Hermione!"

  • readability -- what do these words mean? The idea of course is that when we look at a command, we understand what it does. We don't need to learn a new language to translate its meaning. Scratch does all right with this, but it could do better. Especially, as mentioned above, with its new set of sensing sub commands. But you know what really bothers me? And I just discovered this right now as I'm putting together this post. THIS really bothers me:

Can you read that? No? Then you can't read Thai. The language changed while I was working on this post, because it saw that my laptop happens to be in Thailand. I hate this feature. It's not helpful to people who travel outside their country. I'm not just talking to Scratch or Adobe or Google or whoever is responsible for this. I'm talking to EVERYONE who is responsible for this terrible feature. Stop doing it. I can't read it. You're not being helpful. You're being a bully. 
Grrr.
Ack.
Meow.
I have to take a break. I'll talk about the next two points of Mitch Resnick's TED talk...

3) When kids learn to code, it opens up opportunities to code to learn.

4) Programming teaches working collaboratively, thinking creatively, and reasoning systematically so therefore everyone should learn to code.


 ...in the next post.

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...