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.
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.”
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…
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.
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.
[...] Computational thinking « Alex McLean "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." Several good points from Alex, and some good points about breaking away from equating "computational" with "procedural". (tags: computation education code programming ) [...]
“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.
Nice one Kate, seems like your piece could be framed as live coding: http://toplap.org/index.php/Live_Coding_Without_Computers
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.