# Computational Thinking

===========================================================================

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.
child’s analytical ability. Imagine! And just as the printing press facilitated the
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.
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 major
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.
monplace!
4

• 本文已收录于以下专栏：

## 计算机思维 Computational Thinking（转载）

• jcicheng
• 2010年01月19日 16:51
• 3096

## Computational Thinking

其实，不同的人由于其各自拥有的知识基础不同，对于同一个理念的理解是不同的，而同一个人由于在不同时间所拥有和关注的主要问题不同，对同一个理念的理解也自然不同。所以，也就是为什么好书值得多次阅读了。　...
• cecilulysess
• 2010年10月27日 23:33
• 1041

## Thinking In C++中文版

----------------------- Page 1----------------------- 下载                       第1章  对象的演化     计算机革命起...
• liu_hang_yu
• 2011年05月17日 07:11
• 4065

## Calculus on Computational Graphs: Backpropagation（计算图表的微积分：反向传播）

• ufo0913
• 2017年01月16日 08:29
• 385

• lanchunhui
• 2017年01月10日 23:13
• 312

## 《Thinking in Java》读后总结与感想

• qq_28899635
• 2017年01月16日 09:47
• 804

## 从《thinking in C++》被迫转到《C++ Primer》第一天

• lihb018
• 2014年09月21日 22:36
• 3836

## 读《大象-Thinking in UML》的一些感悟归纳。

• michelsn
• 2010年08月08日 21:52
• 1722

## Thinking In Java 第四版读书笔记

• webwalker
• 2007年05月22日 09:30
• 2853

## Calculus on Computational Graphs: Backpropagation

Introduction Backpropagation is the key algorithm that makes training deep models computationally...
• greenapple_shan
• 2015年12月01日 21:15
• 473

举报原因： 您举报文章：Computational Thinking 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)