I’m sure many of my readers will know what I mean, but just in case, I am talking about the visual programming languages for programming computers which use blocks that plug together like a jigsaw to express algorithms. Examples include StarLogo, App Inventor, Scratch and Blockly.
These are widely used to introduce programming for the following reasons:
- such languages tap in to a pre-literate capacity to help learners make sense of things without depending on technical reading and writing literacies;
- learners appreciate the tactile and kinaesthetic sensibilities involved in producing a visually pleasing artefact, the program, regardless of what it does;
- such languages clarify the logic of the program through the display of visual, diagrammatic shapes that make it easy to determine the relationship and scope of program elements;
- it is impossible to make syntax errors such as incorrect spelling, conjunction or punctuation;
- they provide a visual menu of programming elements so that opportunities for expression are clear and the learner’s memory is not overtaxed.
All this I can understand and I am very much a fan, but I am unclear why there is considered to be a desirable progression from these languages to the traditional text-based languages?
In some cases features are missing from the visual programming languages. For example Scratch doesn’t do functions and local variables.
It may be thought that a complex program would be visually unwieldy, but I find that true of any reasonably sized textual program.
Then there is the historical/cultural/custom-and-practice concerns of experienced programmers – I can hear them saying “surely there is something important, expressive and pure about traditional programming languages?”.
I maintain an open mind about this and can even imagine jigsaw programming becoming the method of choice for serious programming in the workplace. If I am right, there are some interesting challenges:
- What are the criteria for judging the effectiveness / efficiency / legibility of a program made using jigsaw programming?
- What are the examples of programming problems that cannot be solved using jigsaw programming?
- How do we benefit from the version control and sharing that matter for collaborative development?
- How do they effectively encapsulate and hide libraries of service functions and procedures?
- Can we add styling control so that we can tailor the visual appearance to suit the person and the task, or simply provide an alternative view?
- How can they reveal and make editable the variables and data they manipulate? (Scratch does this well with lists).
- How can they animate the program’s diagram to illustrate its execution, single step, interrupt and thus help us debug?
Some of these challenges may already be tackled – I’d be pleased to hear about where to find developments!