TITLE: Computational Thinking without Programming
AUTHOR: Eugene Wallingford
DATE: February 17, 2009 9:31 AM
DESC:
-----
BODY:
Last week, I read a paper on
changes how statistics is taught.
In the last few decades, more schools have begun
to teach stats conceptually, so that the general
university graduate might be able to reason
effectively about events, variation, and conditions.
This contrasts with the older style in which it
was taught as a course for mathematicians, with
the focus on formulas and mastery of underlying
theorems. The authors said that the new style
emphasized *statistical thinking*, rather
than traditional statistics.
For some reason, this brought to mind the buzz
around "computational thinking" in the CS world.
I have to be honest: I don't know exactly what
people mean when they talk about computational
thinking. I think the idea is similar to what
the stats guys are talking about: using the ideas
and methods discovered in computer science to
reason about processes in the real world. I
certainly agree that most every college graduate
could benefit from this, and that popularizing
these notions might do wonders for helping students
to understand why CS is important and worth
considering as a major and career.
But when I look at the work that passes under the
CT banner, I have a hard time distinguishing
computational thinking from what I would call a
publicly-accessible view of computer science.
Maybe that's all it is: an attempt to offer a
coherent view of CS for the general public, in a
way that all could begin to think computationally.
The one thing that stands out in all the papers
and presentations about CT I've seen is this:
*no programming*. Perhaps the motivation
for leaving programming out of the picture is that
people find it scary and hard, so omitting it makes
for a more palatable public view. Perhaps some
people think that programming isn't an essential
part of computational thinking. If it's the
former, I'm willing to cut them some slack. If
it's the latter, I disagree. But that's not
surprising to readers here.
While thinking on this, I came across this analogy:
computational thinking with no programming is like
statistical thinking without any mathematics.
That seems wrong. We may well want stats courses
aimed at the general populace to emphasize
application and judgment, but I don't think we
want students to see statistics devoid of any
calculation. When we reason about means and
variance, we should probably have some idea how
these terms are grounded in arithmetic that
people understand and can do.
When I tried my analogy out on a colleague, he
balked. We don't need much math to reason
effectively in a "statistical" way, he said;
that was precisely the problem we had before.
Is he overreacting? How well can people understand
the ideas of mean and standard deviation without
knowing how to compute them? How little math can
they know and still reason effectively? He
offered as an example the idea of a square root.
We can understand what a square root and what it
means without knowing how to calculate one by
hand. Nearly every calculator has a button for
the square root, and most students' calculators
these days have buttons for the mean -- and maybe
the variance; I'll have to look at my high school
daughter's low-end model to see.
For the most part, my colleague feels similarly
about programming for everyone. His concern with
CT is not eliminating programming but what would
be taught in lieu of programming. Many of the
articles we have seen on CT seem to want to replace
programming with definitions and abstractions that
are used by professional computer scientists. The
effect is to replace teaching a programming language
with teaching a relatively formal "computational
thinking" language. In his mind, we should replace
programming with computational skills and ideas
that are useful for people involved in everyday
tasks. He fears that, if we teach CT as if the
audience is a group of budding computer scientists,
we will make the same mistake that mathematics
often has: teaching for the specialists and finding
out that "everyone else is rotten at it".
The stats teaching paper I read last week says all
the right things. I should look at one of the newer
textbooks to see how well they carry it out, and
how much of the old math skills they still teach
and require.
I'm still left thinking about how well people can
think computationally without learning at least a
little programming. To the extent that we can
eliminate programming, how much of what is left is
unique to computer science? How far can we take the
distinction between formula and algorithm without
seeing some code? And what is lost when we do?
There is something awfully powerful about watching
a program in action, and being able to talk about
and see the difference between dynamic behavior and
static description.
-----