Content uploaded by Jeannette M. Wing
Author content
All content in this area was uploaded by Jeannette M. Wing on Jan 14, 2015
Content may be subject to copyright.
Computational Thinking
Jeannette M. Wing
Computer Science Department
Carnegie Mellon University
Pittsburgh, PA 15213-3890
wing@cs.cmu.edu
November 25, 2005
A Vision for the 21st Century
Here is my grand vision for the field:
Computational thinking will be a fundamental skill used by everyone
worldwide by the middle of the 21st Century.
To reading, writing, and arithmetic, add computational thinking to every
child’s analytical ability. Imagine! And just as the printing press facilitated the
spread of the 3 R’s, what is appropriately incestuous about this vision is that
computing and computers will facilitate the spread of computational thinking.
Examples of Computational Thinking1
What do I mean by computational thinking? Computational thinking is taking
approaches to solving problems, designing systems, and understanding human
behavior that draw on the concepts fundamental to computer science. Compu-
tational thinking includes a range of “mental tools” that reflect the breadth of
our field.
When faced with a problem to solve, we might first ask “How difficult would
it be to solve?” and second “What’s the best way to solve it?” Our field has solid
theoretical underpinnings to answer these and other related questions precisely.
Stating the difficulty of a problem takes into consideration the underlying power
of the machine— the computing device that will run our solution. We must
consider the machine’s instruction set, its resource constraints, and its operating
environment. In solving a problem efficiently, we can further ask whether an
approximate solution is good enough, whether we can use randomization to our
advantage, whether false positives or false negatives are allowed. Computational
thinking is reformulating a seemingly difficult problem into one we know how
to solve, perhaps by reduction, embedding, transformation, or simulation.
1Please send me your favorite examples of computational thinking!
1
Computational thinking is thinking recursively. It is parallel processing.
Computational thinking is type checking, as the generalization of dimensional
analysis. It is recognizing both the virtues and dangers of aliasing, i.e., someone
or something having more than one name. It is recognizing both the cost and
power of indirect addressing and procedure call. It is judging a program not
just for correctness and efficiency, but for its esthetics; and a system’s design,
for its simplicity and elegance.
Computational thinking is using abstraction and decomposition when tack-
ling a large complex task or designing a large complex system. It is separation
of concerns. Computational thinking is choosing an appropriate representa-
tion for a problem or modeling the relevant aspects of a problem to make it
tractable. It is using invariants to describe a system’s behavior succinctly and
declaratively. It is having the confidence that we can safely use, modify, and
influence a large complex system without understanding every detail of it. It
is modularizing something in anticipation of multiple users or pre-fetching and
caching in anticipation of future use. Computational thinking is thinking in
terms of prevention, protection, and recovery from worst-case scenarios through
redundancy, damage containment, and error correction. It is calling gridlock
deadlock and contracts interfaces. It is learning to avoid race conditions when
synchronizing with each other.
Computational thinking is using heuristic reasoning to discover a solution.
It is planning, learning, and scheduling in the presence of uncertainty. It is
search, search, search—resulting in a list of webpages, a strategy for winning
a game, or a counterexample. Computational thinking is thinking about ways
to use massive amounts of data effectively. It is making tradeoffs between time
and space, between processing power and storage capacity.
Here are some real-world examples: When your daughter goes to school in
the morning, she puts in her backpack the things she needs for the day. That’s
pre-fetching and caching. When your son loses his mittens, you suggest that he
retrace his steps. That’s backtracking. At what point do you stop renting skis
and buy yourself a pair? That’s on-line algorithms. Which line do you stand
in at the supermarket? That’s performance modeling for multi-server systems.
Why does your telephone still work during a power outage? That’s independence
of failure and redundancy in design. How do CAPTCHAs authenticate humans?
That’s the difficulty of solving hard AI problems to foil computing agents.
Computational thinking will have become ingrained in our lives when words
like “algorithm” and “pre-condition” are part of our vocabulary; when “nonde-
terminism” and “garbage collection” take on senses meant by computer scien-
tists; and when trees are drawn upside down.
Computational Thinking: Now and Tomorrow
We have already witnessed an influence of computational thinking on other
disciplines.
Machine learning has transformed statistics. Statistical learning is being
used for problems on a scale, in terms of both data size and dimension, that
2
were unimaginable years ago. Statistics departments are now hiring computer
scientists. Schools of computer science are embracing existing or starting their
own statistics departments.
Our big bet in computational biology is our field’s belief that biologists can
benefit from computational thinking. Our contribution to biology goes beyond
searching through large amounts of sequence data looking for patterns. It is the
hope that our data structures and algorithms—our computational abstractions
and methods—can represent the structure of proteins in ways that elucidate
their function. Computational biology can change the way biologists think.
Similarly, computational game theory can change the way economists think;
nanocomputing, chemists; quantum computing, physicists.
The boldness of my vision is that not only will computational thinking be
part of the skill set of other scientists, but it will be part of everyone’s skill set.
The analogy is: ubiquitous computing is to today as computational thinking
is to tomorrow. Ubiquitous computing was yesterday’s dream now becoming
today’s reality. Computational thinking is tomorrow’s reality.
Computational Thinking: What It Is and Is Not
Computational thinking:
•Conceptualizing, not programming: Suffice it to say that computer science
is not computer programming. Thinking like a computer scientist means
more than being able to program a computer.
•Fundamental, not rote skill: By fundamental skill, I mean something that
every human being needs to know to function in modern society. Rote
means a mechanical routine. Ironically, not until our very own field
solves the AI Grand Challenge of making computers think like humans
will “thinking” be rote. Perhaps that can be saved for the second half of
this century!
•A way that humans, not computers think: Computational thinking is a way
humans solve problems using computers. It is not trying to get humans to
think like computers. Computers are dull and boring. Humans are clever
and imaginative. We humans make computers exciting! Empowered with
computing devices, we can use our cleverness to tackle problems no one
would have dared to before the age of computing, and to build systems
with functionality limited only by our imagination.
•Complements and combines mathematical and engineering thinking: Our
field inherently draws on mathematical thinking given that, like all sci-
ences, our formal foundations rest on mathematics. Our field inherently
draws on engineering thinking given that we build systems that interact
with the real world. It is the constraints of the underlying computing de-
vice that force us to think computationally, not just mathematically. And
it is our capability to build virtual worlds that free us to engineer systems
beyond the physical world.
3
•Ideas, not artifacts: It’s not just the software and hardware artifacts we
produce that will be physically present everywhere and that will touch our
lives all the time, but it will be the computational concepts we use to ap-
proach and solve problems, to manage our daily lives, and to communicate
and interact with others.
•It’s for everyone, everywhere, all the time. Computational thinking will
be a reality when it is so integral to human endeavors that it disappears
as an explicit philosophy.
Why This Vision is Timely
Today the general public has a misperception of what computer science is all
about. Many equate computer science with computer programming. Parents
see a narrow range of job opportunities for their children if they major in com-
puter science. Many people think the fundamental research is done; only the
engineering is left.
Computational thinking is a grand vision to guide us as we act to change
society’s image of our field. We especially need to reach the K-12 audience—
teachers, parents, and students. Here are some messages to send:
•Our field continues to expand, not just as we collaborate with more and
more other disciplines, but also as we gain a deeper understanding of
our own discipline. There remain intellectually challenging and engaging
scientific problems to be understood and solved. The problem space and
solution space are bound only by our own curiosity and creativity.
•One can major in computer science and do anything. One can ma jor
in English or mathematics and go on to a multitude of different careers.
Ditto computer science. One can major in computer science and go onto
a career in medicine, law, business, politics, any science or engineering,
and even the arts. More obviously, the interdisciplinary nature of our field
means majoring in computer science enables a student to launch a career
in a different discipline or at the boundaries of many.
•Studying computer science empowers people with a way of thinking.
Please join us at Carnegie Mellon in making computational thinking com-
monplace!
4