Programming Languages as a Notation


A selection of programming language textbooks ...

Image via Wikipedia

I was listening to Jon Udell's interview of Joan Peckham on computational thinking and the subject of whether a general education computational thinking course should include programming. I've thought a lot about this and have some strong opinions.

Computational thinking will be, at its heart, a study of algorithms. That's what computer science is, after you strip away the blinking lights: algorithms. Teaching computational thinking will involve the elucidation of a set of skills that computer scientists use to solve problems that have usefulness in other domains as well. Each of those will involve some kind of algorithm.

Describing, discussing, analyzing, and using algorithms requires some kind of notation. Natural language won't cut it. I've never seen a pseudocode language that was sufficiently formal or imposed sufficient formality to suit these activities. Ultimately we will need to teach students a notation, just like we do in math. When we teach math we don't shrink away from the notation, but rather embrace it. So should we in teaching computational thinking.

Of course, the problem is that this introduces the question (I won't say "begs the question" for fear of offending the "begs the question" police): which programming language? Personally, I don't think it matters much as long as it's consistent for a student's course of study. Yeah, I know there's all kinds of corner conditions there like transfer students and so on. Even so, there's no getting around the fact that we need a notation for expressing algorithms and the only notations that will work are programming languages.

Joan talks about NSF sponsoring research on how to teach computational thinking. I hope some of that research involves the right notations for introduction and analyzing algorithms.