Ten Things We've Learned From Blockly
Ten Things We've Learned From Blockly
Abstract—Over the last four years the Blockly team has The solution is every time a
learned many lessons which are applicable to block-based block is moved, look for
programming in general. The following are a collection of ten unattached connector pairs that are
mistakes we have made, or mistakes commonly made by others. ambiguously close to each other
Each issue is presented as noncontroversial folk knowledge and bump one block away from the
without supporting data. other.
Keywords—block programming; UX; usability; user interface
IV. TRANSITIVE CONNECTIONS
I. CONDITIONALS VS LOOPS Dragging a block should enable that block to connect to
others. But what about dragging a block connected to a block
The most difficult blocks for new and trying to make a connection on the child block? The
users are conditionals and loops. Many transitive closure seems like a good idea (which Blockly
block environments add to the difficulty implemented). But in practice it is a disaster. When working
by making both blocks (already similarly with a large program users will often drag a large assembly
shaped) the same colour and placing them partially off-screen to clear room. If transitive connections are
in the same category. Users get caught in allowed, the user will often hear a click sound as the assembly
a spiral of confusion when they randomly connects to something that was left on the
accidentally use the wrong block, which
workspace. Transitive connections turn large assemblies into
adds to the confusion when it behaves
Fluorine atoms they bond with everything.
contrary to expectation. Blockly moved conditionals into the
logic group, changed the colour, and the problem went away.
As can be seen in the above example of five blocks (from Once users figure out that one statement block fits inside a
scriptr.io), these 'outdated decorations' are vital for 'C', they then need to figure out that more that one statement
distinguishing connected blocks that are the same colour. will also fit. Some environments nest the first statement's lower
connection into the bottom of the 'C' (e.g. Wonder Workshop
III. BUMPING SYNTAX ERRORS and Scratch) whereas others leave a small gap (e.g. Blockly).
Snug nesting leaves no hint that more blocks can be
One of the great selling features of block-based
stacked.
programming is the lack of syntax errors. But the screenshot on
the right (from Scratch) has an invisible syntax error: the 'turn'
block is not connected to the 'move' block above it. There are
many ways for this to happen (e.g. place a couple of
unconnected 'point' and 'turn' blocks on the workspace, then These two issues interact badly with each other. If an inside
connect a pair of 'move' blocks to 'point'). bottom connector exists (Wonder Workshop) then the initial
statement's connection is made more obvious, but at the
50