Make programming less abstract

We feel that a common mistake made when teaching programming to novices is to dive straight in with real code in a real language.

The key skill that one needs to instil in beginners is the art of Thinking Like A Programmer. Students need to learn how to decompose problems into their constituent parts, to realise that they have to anticipate every eventuality and code accordingly, that the computer will not fill in any gaps or make assumptions about what was meant. This is a difficult skill to learn in its own right.

All too often, programming pedagogy combines this foundational teaching with an introduction to a complex real-world programming language. In addition to learning the basic skills of algorithmic thinking and problem solving, students are exposed to a complex and often (to them) counter-intuitive grammar where the omission of one single punctuatory symbol can invalidate hours of work.

While it is obviously important for novices to learn grammar and syntax of standard languages, it can be a cognitive step too far for some students to acquire this knowledge while they are still learning to decompose programming problems. This is at the heart of visualisation tools such as Scratch or Stencyl that use Lego-like blocks to represent components of programs. The minutuae of grammar and syntax are removed, allowing the novice programmer to concentrate on problem solving skills.

NoobLab uses a similar block-based system (the Google Blockly library) to provide drag and droppable blocks for program composition. In combination with a microworld featuring "Carol the Braindead Robot", students can acquire the art of Thinking Like A Programmer through exercises that are tangible to them. They can immediately see how different components of a program and different programming constructs fit together, and also see the outcomes of their programs in a visual and thus very real form.