An
opinion piece by Jeannette Wing (COMMUNICATIONS OF THE ACM March 2006/Vol. 49, No. 3, pp. 33-35) about how 'computational thinking' (whatever that is...well, actually that's what she -does- explain) is really an intellectual skill that is, to oversimplify terribly, good for everybody.
Sort of like humanities for scientists/engineers. She says it would
be good for non-majors, but I'm guessing mostly just for scientists
(i.e. everybody probably won't include people who study literature or
history (well, history does have a 'scientific' component, and this
might be useful there).
Pardon the following exegesis, but like the Torah (or is it the Talmud, I always get that mixed up), the commentary may require more processing time than the original (which of course should be read along side this to see what few things I removed as, well not exactly fluff, but just more polemic/value judgement (and I'm only analyzing quantifiable things), which I for the most part agree at least in the direction of not the actual implementation)...
Representative quotes:
Thinking like a computer scientist means more than being able to
program a computer. It requires thinking at multiple levels of
abstraction.
It represents a universally applicable attitude and skill set
everyone, not just computer scientists, would be eager to learn and
use.
Computational thinking is a fundamental skill for
everyone, not just for computer scientists. To reading,
writing, and arithmetic, we should add computational
thinking to every childs anlyltical ability.
Computational thinking will have become
ingrained in everyones vievs when words like algorithm
and precondition are part of everyones coacbulary;
when nondeterminism and garbage collection
take on the meanings used by computer scientists;
and when trees are drawn upside down.
This kind of thinking will be part of the skill set
of not only other scientists but of everyone else.
Anyway, here's the mapping from classes in the Computer Science
undergrad curriculum to her points ("Computational thinking is..."):
- TCS (algorithm design methods): "In solving a problem efficiently,
we might further ask whether an approximate solution is good enough,
whether we can use randomization to our advantage"
- AI (learning): "...and whether false positives or false negatives
are allowed."
- TCS (complexity): "reformulating a seemingly difficult problem
into one we know how to solve, perhaps by reduction, embedding,
transformation, or simulation."
- Software (programming paradigms) "Computational thinking is
thinking recursively. "
- Software (systems, architecture): "It is parallel processing."
- Software (programming, LISP): "It is interpreting code as data and
data as code. "
- Software (programming langs, unification): "It is type checking as
the generalization of dimensional analysis."
- Software (programming langs, pointers): "It is recognizing both
the virtues and the dangers of aliasing, or giving someone or
something more than one name."
- Software (programming langs, machine/assembly): "It is recognizing
both the cost and power of indirect addressing and procedure call. "
- TCS (algorithms): "It is judging a program not just for
correctness and efficiency" (this quote continues: "... but for
aesthetics, and a system's design for simplicity and elegance." which
unfortunately is totally absent from the curriculum or from the
teacher's within-class comments on the curriculum)
- Software (systems): "Computational thinking is using abstraction and
decomposition when attacking a large complex task
or designing a large complex system. "
- Software (programming, design, modularity) "It is separation of
concerns. "
- general engineering (not mappable to any particular art of the UG
curriculum) "It is choosing an appropriate representation for a problem
or modeling the relevant aspects of a problem to make it tractable."
- Software (correctness, theorem proving) "It is using invariants to
describe a system's behavior succinctly and declaratively. "
- Software (software engineering, modularity) "It is having the
confidence we can safely use, modify, and influence a large complex
system without understanding its every detail. "
- Software (software engineering): "It is modularizing something in
anticipation of multiple users or prefetching and caching in
anticipation of future use."
- Software (software engineering): "Computational thinking is
thinking in terms of prevention, protection, and recovery from
worst-case scenarios through redundancy, damage containment, and error
correction. "
- Systems(OS)/Software(programming): "It is calling gridlock
deadlock and contracts interfaces. "
- Systems(OS): "It is learning to avoid race conditions when
synchronizing meetings with one another."
- AI/TCS (search space/algorithms): "Computational thinking is using
heuristic reasoning to discover a solution. "
- AI (planning): "It is planning, learning, and scheduling in the
presence of uncertainty."
- AI/TCS (algorithms/constraints): "It is search, search, and more search,
resulting in a list of Web pages, a strategy for winning a game, or a
counterexample."
- Systems (software): "Computational thinking is using massive
amounts of data to speed up computation."
- TCS/systems (algorithms, architecture) "It is making
trade-offs between time and space and between
processing power and storage capacity."
- Systems/software (architecture, design ): "When your
daughter goes to school in the morning, she puts in
her backpack the things she needs for the day; that's prefetching and caching. "
- TCS (algorithms): "When your son loses his
mittens, you suggest he retrace his steps; that's backtracking."
- TCS (algorithms): "At what point do you stop renting skis and
buy yourself a pair?; that's online algorithms. "
- Systems (OS): "Which line do you stand in at the supermarket?;
that's performance modeling for multi-server systems. "
- Systems/software (software engineering): "Why
does your telephone still work during a power outage?;
that's independence of failure and redundancy
in design. "
- What? never heard of it: "How do Completely Automated Public
Turing Test(s) to Tell Computers and Humans Apart, or CAPTCHAs,
authenticate humans?; that's exploiting the difficulty of solving hard
AI problems to foil computing agents."
Uses of CS thinking in other domains:
- AI (learning) : "For example, machine learning has transformed
statistics. Statistical learning is being used for problems on a
scale, in terms of both data size and dimension, unimaginable only a
few years ago. Statistics departments in all kinds of organizations
are hiring computer scientists. Schools of computer science are
embracing existing or starting up new statistics departments."
- AI/Databases (knowledge structures): "Computer scientists$(B
r(Becent interest in biology is driven by their belief that biologists
can benefit from computational thinking. Computer science$(Bs
(Bcontribution to biology goes beyond the ability to search through vast
amounts of sequence data looking for patterns. The hope is that data
structures and algorithms, our computational abstractions and methods,
can represent the structure of proteins in ways that elucidate their
function. Computational biology is changing the way biologists
think. "
- TCS (algorithms) "Similarly, computational game theory is
changing the way economists think; "
- AI/EE (agents): nanocomputing, the way chemists think;
- TCS (complexity) "... and quantum computing, the way physicists think."
Many of these items are explicitly covered in a traditional CS
curriculum (whatever -that- is, I of course consider what I did as
traditional because, well, I did it. But some of the items are not
exactly traditional text book subjects, but are certainly part of the
air you breathe. The taxonomy of CS subject domains goes like this:
TCS (theoretical CS: includes, broadly, algorithms, complexity,
logic/discrete math/other math applied to CS, data structures), AI
(artificial intelligence: learning, cognition, logic, planning,
robotics, heuristics that aren't algorithms), software (programming
languages, compilers, semantics), architecture and hardware (frankly I
don't know the difference here other than, though both involve
manipulating actual physical objects, architecture deals with objects
that are larger than those in hardware), systems (a grab bag of
topics: operating systems, databases, graphics), and NA (numerical
analysis, or more recently renamed scientific computing).
WHAT IT IS, AND ISNT
The second half of the article gives more abstract concepts of 'computational thinking'.
Computer science is not computer programming. Thinking like a
computer scientist means more than being able to program a computer.
It requires thinking at multiple levels of abstraction;
Computational thinking is a way humans solve problems; it is not
trying to get humans to think like computers.
Computer science "inherently draws on" mathematical thinking as its
formal foundations" and on engineering thinking, "given that we build
systems that interact with the real world. "
"The constraints of the underlying computing device force computer
scientists to think computationally, not just mathematically. "
... well isn't computational thinking one particular type of
mathematical thinking?
For everyone, everywhere. Computational thinking will be a reality
when it is so integral to human endeavors it disappears as an explicit
philosophy.
A beautiful sentiment... but I disagree with the general (and
specific) inference. Consider 'mathematical thinking'...it is very
"integral to human endeavors", but has not disappeared as an "explicit
philosophy".
CS is really a 'liberal art'. Myth: computer science has been
'solved', only implementation remains. Wing seems to leave the thread
of 'computational thinking' here and addresses more things associated
with CS as official subject to be followed (she continues to say very
important things I agree with, and of course need to be said, and the
best place to say them is in an article extolling the virtues of
computational thinking, and you should read it... but none of that
fits my agenda at the moment so I won't really comment, other than to
say that she must be a department head looking at the lowering #'s of
CS undergrads, worrying about the great number of asst profs they just
hired to take care of teaching the glut of CS UGs that were projected
but never materialized).
Extremely abbreviated commentary:
- There's a difference between things you learn because they were
said in class and things you learn because you took the class (but no
one ever said).
- Jeannette Wing has done in three pages what Stephen Wolfram
claimed to be doing in 1000; show how computation is a new, useful
paradigm for (scientific) thinking (this is intentionally a slam
against Wolfram's ANKS).
- How could one compose a similar 'look at the whole world through
these eyes' for a mathematician? And from the other direction, how
could non-scientific domains (the humantities) use this (these)
worldviews?
- Psychology (cognitive psychology) has already had the 'information
processing' view since the 60's/70's.