MIT’s Scratch is an excellent platform for introducing kids to programming concepts (as I described in an earlier post) thanks to its visual authoring environment and the intuitive sprites-with-behavior model, but it is definitely limited. Pushing beyond the design boundaries of Scratch is definitely possible, in particular by feeding Lists of coordinates to the Pen commands to do sophisticated scene rendering, but at this point the advantages of Scratch begin to break down — there is no longer a clear correspondence between the onscreen sprites and their scripted behaviors and the code becomes hard to parse.
Recently I learned about Snap! (previously called BYOB for “Build Your Own Blocks”). This is a re-implementation of Scratch, created at UC Berkeley, which introduces additional complexity into the core of Scratch, including more sophisticated data and control structures and the ability to define procedures.
I’ve only just started looking at this and look forward to playing around with it more. Another interesting tidbit is that Snap! is the language used for Berkeley’s BJC (Beauty and Joy of Computing) curriculum, which will be the subject of a future post!