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