Well, part of the motivation for blocks is that you don't need to know any special incantations. Instead of being faced with a blank text editor and a cursor, you're given a toolbox full of toys to explore, which (for me, at least, when I was in the 5th grade) is extremely empowering.
> But what I do know is that if you aren't using text, I have a hard time describing what you're doing as programming.
The thing is, kids using Scratch end up creating amazing stuff: I've seen recursive raytracers, real-time multiplayer-over-the-network FPS games, a chess AI (game tree + alpha/beta pruning), emulators for various video games… I can't really look at that and not describe it as programming.
> What's the visual representation of a type?
Shape. In Scratch and Snap!, a block that returns a boolean is diamond-shaped, and holes for boolean arguments are diamond-shaped. So you can't accidentally put a number into the condition for IF--the shape literally doesn't fit.
This beats TYPE ERROR: COULD NOT COERCE "INT" TO "BOOL" (LINE 12) any day.
> Good luck with find/replace without text.
I think it's easier to right-click a variable's block and select "rename…" from the dropdown than to run :%s/badname/goodname/g and hope you don't accidentally change non-variable instances of that substring. And since the block knows its scope, you know that only in-scope uses of that variable will be updated.
> Version control is tied to text
It turns out that version control with Snap! and Scratch projects is really easy, since the internal datastore is just XML and JSON, respectively, both of which play reasonably well with git. But when you're teaching someone to program in an introductory CS course, version control should be very low on your priority list. There are so many more exciting big ideas worth teaching.
> When you finally expose them to actual programming, all the parts that were too scary to show them to begin with are all there.
The way I see it, once you get them excited about computer science, the things that were too scary aren't scary anymore: they're exciting.
> Well, part of the motivation for blocks is that you don't need to know any special incantations. Instead of being faced with a blank text editor and a cursor, you're given a toolbox full of toys to explore, which (for me, at least, when I was in the 5th grade) is extremely empowering.
Okay, so why couldn't you do the same thing with text? If you can fit a bunch of blocks on the screen, why can't you fit a bunch of function names and keywords on the screen?
> The thing is, kids using Scratch end up creating amazing stuff: I've seen recursive raytracers, real-time multiplayer-over-the-network FPS games, a chess AI (game tree + alpha/beta pruning), emulators for various video games… I can't really look at that and not describe it as programming.
Okay, that is impressive. But are those same kids also writing C or Python? I've done some cool stuff with Scratch back in the day, but I don't think I could have done it if I hadn't already been pretty well-versed in HyperTalk, BASIC, and C++ (at the time).
> Shape. In Scratch and Snap!, a block that returns a boolean is diamond-shaped, and holes for boolean arguments are diamond-shaped. So you can't accidentally put a number into the condition for IF--the shape literally doesn't fit.
That's certainly easier to understand, but it's also far less capable. How can it handle structs (or classes)?
> The way I see it, once you get them excited about computer science, the things that were too scary aren't scary anymore: they're exciting.
I really hope this is true, I'm just not sure it is.
However, I really hope people keep researching this and prove me wrong.
> But what I do know is that if you aren't using text, I have a hard time describing what you're doing as programming.
The thing is, kids using Scratch end up creating amazing stuff: I've seen recursive raytracers, real-time multiplayer-over-the-network FPS games, a chess AI (game tree + alpha/beta pruning), emulators for various video games… I can't really look at that and not describe it as programming.
> What's the visual representation of a type?
Shape. In Scratch and Snap!, a block that returns a boolean is diamond-shaped, and holes for boolean arguments are diamond-shaped. So you can't accidentally put a number into the condition for IF--the shape literally doesn't fit.
This beats TYPE ERROR: COULD NOT COERCE "INT" TO "BOOL" (LINE 12) any day.
> Good luck with find/replace without text.
I think it's easier to right-click a variable's block and select "rename…" from the dropdown than to run :%s/badname/goodname/g and hope you don't accidentally change non-variable instances of that substring. And since the block knows its scope, you know that only in-scope uses of that variable will be updated.
> Version control is tied to text
It turns out that version control with Snap! and Scratch projects is really easy, since the internal datastore is just XML and JSON, respectively, both of which play reasonably well with git. But when you're teaching someone to program in an introductory CS course, version control should be very low on your priority list. There are so many more exciting big ideas worth teaching.
> When you finally expose them to actual programming, all the parts that were too scary to show them to begin with are all there.
The way I see it, once you get them excited about computer science, the things that were too scary aren't scary anymore: they're exciting.