Computing At School Computing At School

School of Computer Science -- The University of Birmingham
In collaboration with The University of Sussex: Centre for Research in Cognitive Science

This is part of the Free Poplog Portal
All the tools required to run the examples below are
in Linux or in VirtualBox on Windows or Apple OSX,
as described in
Enquiries to
(This is all free and open source software, thanks to the Universities of Sussex and Birmingham.)

Tips on Teaching "Thinky" Programming

Link to this web site:
Many examples of thinky (and some other) types of programming can be found in
Video tutorials on some of this material:


The idea of "Thinky" programming is introduced on this web page, which also introduces several other types of programming, including numbery, bumpy, gadgety, arty, and exploratory programming. (The categories are not all mutually exclusive.)

The key features of "thinky" programming includes getting a computer to perform some cognitive task that is similar to or inspired by things humans or other animals can do, such as seeing, planning, playing a game, or using a natural language to communicate, such as English of Urdu. This has typically been the domain of research in AI and cognitive science, and is very difficult to do well enough to match human and animal competences. But it is possible to introduce some of the ideas and techniques by focusing on simplified versions of those tasks, samples of which are provided here.

How to simplify the introductory examples

In general developing working "thinky" programming can be very difficult partly because of the need to provide the program with access to whatever it is thinking about, e.g. giving it eyes and manipulators, if it is thinking about physical objects that can be moved around, or giving it a speaking voice and microphone if it is to engage in conversational interaction, as well as some sort of body to which people can relate when interacting with it.

But AI researchers and teachers have found ways of simplifying the tasks for beginner students so as to make introductory teaching feasible.

The simplification can include any or all of the following

  • Choosing an artificially simple type of behaviour or interaction, e.g. a simple chat-bot that does not really understand its inputs and outputs, or a program that interacts with a simple model of some world rather than the complex external reality that a future robot might have to interact with.
  • Providing library programs that perform some parts of the task or provide models of the world that the learner's program is to interact with or reason about. For example, a very simple planning program could use simulated actions in a simplified world modelled by a teacher's program; and a simple chatbot exercise might be based on a program whose architecture is provided by the teacher so that beginner students need only focus on the rules to be used by the chatbot.
  • Instead of requiring the learner to do everything using a general purpose programming language, and using standard primitive data-types (e.g. numbers, strings, arrays, records, etc.) the teacher can provide a problem-specific higher level language allowing the learner to think about the problem using a language suited to the problem rather than having to think all the time about the syntax of the base programming language.

    This requires a programming language that is extendable by defining new syntactic constructs suited to particular applications. Many languages allow macros to be defined that extend the language. Some, like Pop-11, allow more powerful extensions to the language, introducing constructs that would not have been expressible in the original language.

A programming language that supports creative teachers in providing specific learning environments could have a core subset that is general purpose as well as features that allow the problem specific extensions to be provided in sharable libraries. This technique has been used for many years at Sussex university, at Birmingham University and some other universities, and also some industrial/commercial organisations using the Poplog system.

Initially this may be daunting for teachers, but if different teachers build useful and interesting learning "packages" of this sort, all using the same base programming language, then they can share their work with other teachers, and some of the simpler packages, e.g. a library defining a microworld, can be combined with other packages, e.g. a library with resources for natural language processing, to allow students to work on projects that build in the combination, e.g. designing a program that interacts in (a subset of) natural language, conversing about the domain.

Example microworlds

Required resources

Not all programming languages will be equally good at supporting such diverse forms of teaching. Some of the requirements for languages and programming environments to enable creative teachers to inspire their students were discussed in this paper:
Beginners need powerful systems,
by Aaron Sloman,
in New horizons in educational computing, Ed. Masoud Yazdani,
Ellis Horwood Series In Artificial Intelligence, pp. 220--234, 1984,,

Online videos

A draft incomplete set of videos introducing some of these examples and the tools required to implement them can be found here. Additional videos will be added, illustrating more techniques and more types of learning.

Suggestions for improvement are welcome.

This file maintained by:
Aaron Sloman
Installed: 1 May 2012
Last Updated: 1 May 2012; 10 Jul 2015 (format)