The history of blocks
Blocks programming was first introduced in 1986 by Glinert, but a big step was made with Alice in 2001, actually designed because users thought Python was too hard. For an overview of early blocks languages, have a look here. After that, came Scratch, Blockly and AppInventor. More recently, there have also been tools that combine blocks and text seamlessly. Code.org adopted a block language for their frozen game, which helped make them popular and they seems to be exploding:
So, why are blocks so awesome?
Well, you don’t need to think about syntax, it is easy to manipulate groups that semantically go together, and (this is an interesting point) Franklyn says it is easier to see that a program is a tree, so doing and explaining metaprogramming should be easier.
A nice related idea is GreenFoot, not meant for kids but for professional developers, combining texts and blocks.
What about types?
A lot of blocks languages, like AppInventor, are dynamically typed. But there is a tool called PictureBlocks, where the shape of the connectors indicate the type of the arguments, even supporting polymorphism!
This could be used for ‘normal’ languages too? (Franklyn says this is a nice research question for PhD students to address :))
Many blocks languages have tools to step through code and watches, but there are lots of challenges here still. What information is most useful to users? And (this rings with me of course) how to debug when your software is running on a separate device like a phone, tablet or robot.
Big blocks programs can be very hard to understand, while there are some tools address this by earching in 2D block spaces, the problem is still open. Collaboration is hard too! How do you share a program, for example on a forum to ask for help?
Finally: Is a 2D space actually a good way of organizing a program? How to keep your programs organized?
There has been research into what programming language is best, comparing Scratch to Logo, and a number of other works, showing that, apparently students think text is more real/authentic:
Not all studies compared similar languages though, so it is hard to say whether you are comparing the underlying formalisms or the blocks versus text, but it turns out that this happened in isomorphic languages too.
Negative responses to blocks
Not everyone is a fan of blocks:
And Franklyn makes a very nice point here: it is not about turning everyone into a software engineer. Playing and learning some concepts is enough for most of the people! Nice closing.
Addendum: Franklyn put all his interesting research questions online.