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!
My own experience of jigsaw programming is from a 3rd level teaching perspective. From speaking to colleagues, there is a perception that visual languages are somehow “doing the work” for the student and such environments are more appropriate for younger learners.
My belief is that such languages are wonderful tools for teaching and learning object oriented concepts. They give students that visual imagery that I feel is very useful in understanding these concepts that are core to all languages – visual or textual.
Outside of teaching and learning though, I am very curious to know how accepted visual environments are in the industry. Finally, the questions you pose are very interesting, especially question 2, that’s a question I want to discover an answer to myself!
In answer to my first question, Jake Byrne at Bridge21 and Trinity College Dublin told me about Dr. Scratch – http://drscratch.programamos.es – which aims to “provide feedback on aspects such as abstraction, logical thinking, synchronization, parallelization, flow control, user interactivity and data representation” on Scratch programmes – looks interesting!