Jonathan Krop's Scratch Journal
While I was fiddling with my game in Scratch, I found myself comparing my experience with the "graphical code" to what I imagined it would be like to do the same thing using straight text-based code. I began noticing the areas where the graphical nature of Scratch was clearly helping me out--for instance, parts where the command chains were so long that I couldn't keep it all in my head. When there was a problem somewhere in one of these long chains, it wasn't hard to scan the screen and pick out the likely problem area--the puzzle-piece design made it intuitive. Once I found the trouble spot, it was usually fairly easy to suss out what needed fixing (although sometimes a bit tougher to figure out how to fix it). I think this aspect of Scratch makes it a great teaching tool. First, obviously, it lets you program at a higher level than you'd otherwise be able to by "keeping track" of the various strands of code and their components for you. I think this helps develop at least a vague conception of and appreciation for exactly what high-level programming might entail, in all its complexity. Also, I think by making the code visual, it helps a beginner (like me) to concretize the relationships between the different commands more easily by framing them as images, which for me makes them easier to grasp and less abstract--along the lines of "well, this command contains an if/then inside it and runs parallel to this other command, both of which are stuck inside a recursive loop, etc etc."
I think there is a downside to the leg-up that Scratch gives beginners, but not really an important one. Like I said earlier, it makes coding long, complex threads a little easier to do and keep track of. Which is awesome... but it doesn't force us to develop the capacity to hold those threads in our heads, the way I imagine text code must. I could feel as I was making my cruddy little game that the possibility of doing something much more sophisticated was there, but that my mind wasn't developed enough in these ways of thinking to grasp it or pull it off. I suspect that Scratch is not the best way to build those muscles, although I'm sure it helps somewhat. But that doesn't really matter, since Scratch is great for what it is: a beginner's teaching tool and an introduction to programming. If someone gets beyond that and wants to give their brain a little more of a workout, they can move on to C or BASIC or whatever it is people use these days.