Almost a year in the making, the ScratchEd team just posted a video interview I did with them. It’s actually a series of edited sections from a longer conversation that address questions about teaching computer science and specifically about using Scratch. Many thanks to Karen Brennan, Ricarose Roque, and especially Michelle Chung for being such great interviewers and editors. They were able to pull out a lot of things I think are important about teaching CS, help me talk about them, and then assemble those parts into a coherent whole.
I’m having an Asimov phase: I recently started rereading the Foundation Trilogy, and then today I happened across this interview. I don’t actually know much about Asimov, but this clip makes me feel like I would have really enjoyed hanging out with him.
He pretty much predicts (in 1988) how the spread of computers will lead to the rise of the creative class and the role of the internet in personalized learning. Except they didn’t know back then that it would be called “the internet”. I love how clearly he sees the importance of self-direction in motivation.
Bill Moyers: “What if I want to learn only about baseball?”
Isaac Asimov: “Well that’s all right! You learn all you want about baseball, because the more you learn about baseball the more you might grow interested in mathematics to try to figure out what they mean by those Earned Run Averages and the batting averages and so on. You might in the end become more interested in math than baseball, if you follow your own bent and you’re not told! On the other hand, someone who is interested in mathematics may suddenly find themselves very enticed by the problem of how you throw a curve ball.”
I gave an Ignite talk (20 slides that auto-advance every 15 seconds = 5 minutes total) yesterday at DML 2012. My topic was “Teaching Programming in Every Subject” which was on one level about cross-curricular integration, and on another level about how programming is a great model for how to work on any problem. Just now, I realized that Jasper Johns also knew the secret:
He was talking about how to make art, and I think the advice pretty much applies to anything. But Papert is the one that I give credit to nailing down the connection between programming and an iterative approach to learning. In my talk I quoted from his book Mindstorms:
“[M]any children are held back in their learning because they have a model of learning in which you have either “got it” or “got it wrong”. But when you learn to program a computer you almost never get it right the first time. Learning to be a master programmer is learning to become highly skilled at isolating and correcting “bugs”.”
I’ve written and talked about the significance of this connection before. And I wasn’t the only Papert fan in the house: both Rafi Santo and Henry Jenkins referenced him in their Ignite talks as well. All of which lead to the following observation:
I think videos of our talks will eventually be posted, but for the time being here are examples of student work on the three projects I discussed:
1. Shakespeare vernacular translations and stage directions, with recorded dialog
2. Regular polygon drawing
3. Age of Exploration Adventure-style games, and the assignment details
I’d love to find more creative approaches and projects for teaching CS and other subjects at the same time!
I hear that Scratch 2.0 will include procedures, a capability that has only been available in BYOB until now. This is great news, because functional abstraction is one of the most fundamental concepts in programming. In my high school classes, I always find that I need to switch from Scratch to BYOB at some point so that students can create more complex programs without getting tangled in a million stacks of blocks that all broadcast messages to each other and rely on global variables.
It pains me to lose the sharing and community aspects of Scratch when we switch. But BYOB does a great job with adding power, making blocks themselves first class and offering the ability to create “command”, “predicate”, and “reporter” blocks. These three categories correspond with functions that return nothing, return a boolean, or return some other value. Because this “return type” determines the shape of the block, which in turn determines where that block can be used, it’s an important choice.
I hope the Scratch team includes all three of these. Commands alone will leave us needing to use global variables for outputs even if inputs are passed in as parameters. This means we can’t fully teach the value of encapsulation and abstraction — knowledge about the larger programmatic context will always seep in to our otherwise isolated function definitions.
There is an interface challenge, however. In BYOB, when you create a reporter, the return value is specified at the bottom of the dialog, in an awkward little box that isn’t a part of the program flow.
Early returns would be nice. For example, I’d love to be able to write this implementation of linear search:
But that means having a “report” command that only has a meaning/use inside reporter blocks. And then for predicates (that is, boolean returns) do we have a restricted version? This seems to invite confusion. Here’s my proposed solution:
A reporter block palette, only available within the block editor, containing a report command with the correctly-shaped parameter (depending if we’re creating a reporter or a predicate). I’m not sure if this idea has already been proposed or discussed, but I wanted to throw it into the mix. Perhaps the “script variable” block could live there as well, to encourage the idea that local variables are local.
[Update: I just talked to Mitch Resnick here at DML and found out that Scratch 2.0 will implement commands using a special cap, not blocks in an editor dialog. And they will not implement reporters or predicates. So I think my user interface idea is actually a suggestion for improving the interface in BYOB/Snap!]