Mark Guzdial, in his Computing Education Blog (Weekend newspaper coverage on computing for all, especially kids), commented on the NY Times article by Randall Stross: Computer Science for Non-Majors Takes Many Forms.
The article makes the case that everyone should be taught “computational thinking”, though Stross does not attempt to define what that means, merely noting
There is little agreement within the field, however, about what exactly are the core elements of computational thinking. Nor is there agreement about how much programming students must do, if any, in order to understand it.
Stross gives examples from Carnegie-Mellon and from Wheaton College in Massachusetts of two rather different approaches—one using Ruby and doing fairly conventional CS things (like iteration, recursion, random number generators, … ) and the other tackling analysis of large bodies of text by humanities majors, starting from big problems and helping the students decompose them into smaller, more solvable ones.
Stross even mentions the course using Scratch at the University of Maryland, Baltimore County, though I believe that he is too dismissive of Scratch as a programming language. Yes, it is easy enough for middle-schoolers to learn it, but that doesn’t mean that it can’t be used for teaching most of the concepts of a first-year computer course. (OK, Scratch is not suitable for teaching recursion, but it is very suitable for teaching an introduction to parallel programming and race conditions, which most languages used in first-year CS classes are not.) I think that Marie desJardins and Michael Littman (of Rutgers) gave weak replies—Littman saying that
Computational thinking should have been covered in middle school, and it isn’t. So we in the C.S. department must offer the equivalent of a remedial course.
While it is certainly true that many intro to CS classes are the equivalent of remedial classes in math, science, or writing, it is not the case that all intro to CS classes need to be remedial.
Mark Guzdial seemed a little miffed that he was interviewed but not quoted:
I exchanged email with the author before the column came out, pointing out several sources and mentioning Media Computation. Randy felt that Georgia Tech’s experience with computing for everyone was less compelling, because Georgia Tech is an “engineering school.” He said that he was more interested in programs that cater to humanities majors — which is what MediaComp is, because we developed it to reach Liberal Arts, Architecture, and Management majors.
I guess I would have been miffed to have been so misunderstood by a business professor also.
Mark goes on to talk about somewhat better coverage of similar issues in The Guardian, which had a section focused on computing education. He particularly liked Naughton’s “manifesto for revolutionary action“. I too like point 3:
We believe every child should have the opportunity to learn computer science, from primary school up to and including further education. We teach elementary physics to every child, not primarily to train physicists but because each of them lives in a world governed by physical systems. In the same way, every child should learn some computer science from an early age because they live in a world in which computation is ubiquitous. A crucial minority will go on to become the engineers and entrepreneurs who drive the digital economy, so there is a complementary economic motivation for transforming the curriculum.
Naughton does recognize some problems with his vision:
We recognise that a key obstacle to achieving the necessary transformation of the computing curriculum is the shortage of skilled and enthusiastic teachers.
Although the manifesto makes some very specific calls for changes in the UK, I think that Naughton’s explanation in a separate column is more compelling reading, explaining why things need to be different. In it he defines “computational thinking” in a fairly broad way:
… computer science involves a new way of thinking about problem-solving: it’s called computational thinking, and it’s about understanding the difference between human and artificial intelligence, as well as about thinking recursively, being alert to the need for prevention, detection and protection against risks, using abstraction and decomposition when tackling large tasks, and deploying heuristic reasoning, iteration and search to discover solutions to complex problems.
I don’t know that Naughton’s definition matches my idea of “computational thinking” exactly (the stuff about risks is part of computer science, but not computational thinking, in my opinion), but it is a better shot at the definition than some I’ve seen. His examples are rather feeble though (computational biology is not about “how the genetic code works”).
Despite my nit-picking, it is a good weekend when two major newspapers independently decide to talk about computer science education, and what needs fixing in it.