Computational thinking

Some great news today that the UK school ICT programme is going to be replaced/updated with computer science.  As far as I can tell a lot of schools have actually been doing this stuff already with Scratch, but this means targeting teacher training for broader roll-out.

This has immediately triggered bike shedding about the issue of which programming language is used.  To quote twitter, “iteration is iteration and variables are variables. Doesn’t matter if its VB, ASP, Java, or COBOL”.  Apparently one of these should be used because they are “real languages” and Scratch isn’t.

This brought to the fore something I’ve been thinking about for a while, “computational thinking”.  This seems to most often be used interchangeably with “procedural thinking”, i.e. breaking down a problem into a sequence of operations to solve it.  From this view it makes perfect sense to focus on iteration, alternation and state, and see the language as incidental, and therefore pick a mainstream language designed for business programming rather than teaching.

The problem with this view is that thinking of problems in terms of sequences of abstract operations is only one way of thinking about programming languages.  Furthermore it is is surface level, and perhaps rather dull.  Ingrained Java programmers might find other approaches to programming difficult, but fresh minds do not, and I’d argue that a broader perspective would serve a far broader range of children than the traditional group of people who tend to be atypical on the autistic spectrum, and who have overwhelmed the programming language design community for far too long.  (This is not meant to be an outward attack, after all I am a white, middle-aged male working in a computer science department..)

I’d argue then that computational thinking is far richer than just procedural thinking alone.  For example programmers engage mental imagery when they program, and so in my view what is most important to computational thinking is the interaction between mental imagery and abstract thinking..  Abstract procedures are only half of the story, and the whole is far greater than the sum.  For this reason I believe the visuospatial scene of the programmer’s user environment is really key in its support for computational thinking.

Computation is increasingly becoming more about human interaction than abstract halting Turing machines, which in turn should direct us to re-imagining the scope of programming as creative exploration of human relationships with the world.  In my view this calls for engaging with the various declarative and multi-paradigm approaches to programming and radical UI design in fields such as programming HCI.  If school programming languages that serve children best end up looking quite a bit different from conventional programming languages, maybe it’s actually the conventions that need changing.


  1. I don’t think you’re wrong in general, but this is shitty:
    “the traditional group who tend to be atypical on the autistic spectrum, and who have overwhelmed the programming language design community for far too long.”

    1. Hi mkb,

      Could you be a bit more specific with your objection? Being atypical is not necessarily a bad thing, indeed I think being neurotypical would be an unfortunate state to be in. However if the entire practice of programming is controlled by a particular group of people exhibiting particular traits, then we have problems…

  2. To me it comes across as ableist, sort of like “if only those damn aspies didn’t control everything, programming would be better”.

    I don’t know if you’re on the spectrum which obviously would affect my interpretation, but generally when I hear any mention of autism or Asperger’s in the computing field it’s something along the lines “damn aspie devs not understanding anything except programming”. On re-examination, maybe that speaks to the company I keep.

  3. Hi mkb, actually I don’t know where I am on the spectrum (in the sense that it is a spectrum we all are *somewhere* on it), and would generally not be in favour of overtly classifying people or medicalising areas of the spectrum without a clear need, so share your concerns.

    I suspect though I am atypical, in that I am able to engage fully with programming languages for hours on end and am perhaps not as engaged with wider society as I would like. So the above is meant to be in the spirit of a white middle aged male, working in a computer science department, wondering if my kind could perhaps engage wider society more fully with the wonder of computation.

    I can see how my post could be read the other way though so I’ll edit it a little.

  4. “The problem with this view is that thinking of problems in terms of sequences of abstract operations is only one way of thinking about programming languages.” – I find this quite interesting as I am currently creating a dance piece about this. It starts with a series of instructions that the performer must execute but slowly the performer subverts this to create their own movement.

  5. I broadly agree with you about procedural thinking not being ‘the answer’, but this shouldn’t be either/or, but rather if/then/else. I’m inclined to think that pre-16 CS provision should be seen as an ‘entry point’, exposing the students to a wide range of possibilities and allowing broad scope for flexibility for both students and tutors. There should be a large proportion of project work, with teacher-as-facilitator. If some students want to work in Scratch, and others in JavaScript… let’s support that. Indeed, choice and appropriateness of language to the chosen project should be part of the assessment criteria.

  6. The whole “let’s get graphical to learn programming (especially if it involves recursion)” movement that started at MIT with LOGO’s turtle graphics and Seymour Papert’s evangelism is a dead end. It has failed over the last 45 years to make a significant contribution to children’s (or anyone’s) really learning to program. I taught LOGO to k-8 graders for a couple of years back in the 1980’s, and the kids who “got” it were the ones who would have gotten BASIC or Pascal anyway. My daughter, now in college, took an intro comp sci class in which the students were introduced to computer programming with Scheme (Scratch’s big brother), and I was so annoyed with how badly it turned her off of programming that I complained to the head of their comp sci dept, and got told to stop being a helicopter parent, they knew best. A real world language, e.g. Python (which I prefer but Java if you insist), that has widespread actual use and incorporates all the essential elements found in actual practice, and that is powerful (high level) enough to be easily learned (no pointers please, not yet anyway) is the way to go. JavaScript is a stinky mess, all DOM dependent and not in a good way, and erratic in its syntactical formulation (is this capitalized or not?) and irritatingly unforgiving about the stupidest things. Leave it for people forced to program highly interactive web pages. I taught BASIC to college business management students in a required course that was half MIS and half programming (also back in the ’80’s, before widespread use of PC’s) and it was my observation that programming ability (computational thinking) is a separate intelligence, orthogonal to math and language and spatial intelligences, and is probably normally distributed in the population. Educators should seek it out, identify it early and support its development, understanding that not everyone can do it very well, just as not everyone is musically, artistically or kinesthetically gifted. The underlying premise of Scratch, etc. is the incorrect belief that if we could just teach it in a friendly fun way everyone could become a computational thinker.

  7. Hi Dave,

    I’d have loved to have been taught Scheme in school, and there is comparative research that suggests that teaching Scheme actually levels out gender bias. Of course you know much more about your daughter’s situation than me, but I’d suggest that perhaps she just had a bad teacher.

    Python is great because it forces you to lay your program out in a way that makes sense. This is actually the kind of visual programming I am talking about, not getting rid of textual languages, but supporting them through visual structure.

    Part of the problem is that the term “graphical programming” is generally used in a way that makes no sense, even in the visual programming literature. After all, text is also graphical, and graphical programming should be thought of as text which is structured in a way that allows us to use a fuller spectrum of perceptual and cognitive resources.

    I think the reason that we do not design our programming languages in this way is due to embedded sexism. Women tend to be better visual thinkers than men, and visual thinking isn’t about thinking with pictures, it’s about integrating perception and language as a whole. In other words, it’s men who are missing something here, and because programming languages are often designed by men, programming languages are missing something.

    I just don’t buy the argument that there will always be a few children who are natural at programming and others have no chance. We just need to make the language environments better so they’re more suitable for a wider range of tasks.

Leave a Reply

Your email address will not be published. Required fields are marked *