Computational Thinking

计算机思维建立的基础是计算机处理的能力及其局限性,不管是由人还是机器来执行。计算机方法和模型使我们有勇气去解决问题,设计出无论哪个个人都无法独立担纲的系统。计算机思维面对着有关机器智能的不解之谜:人做什么比计算机强?计算机什么比人好?最根本的问题是:什么是可以计算机做的?今天,我们对这样的问题仍然一知半解。

计算机思维是每个人的基本技能,不只属于计算机科学家。在阅读,书写和算术之外,应该把计算机科学加入每个儿童的分析能力培养。和出版社促进了3个R(阅读,书写和算术Reading, Writing & Arithmetic)的传播相类似,计算机和使用电脑促进了计算机思维的传播。

计算机思维采纳计算机科学的基本理念,可运用于问题的解决,系统设计和理解人类行为。计算机思维包含了一定范围内的思维工具,反映出计算机科学领域的广泛性。

在解决一个问题时,我们会问:这有多难?怎样做是最佳的方法?计算机思维站在坚实的理论地基上给予这样的问题精确的答案。问题的难度要说取决于机器的能力-用来解决问题的计算工具。要考虑机器的指令,资源的约束和运行环境。

为了有效率地解决问题,我们也许要进而问道,貌似的解决方案是不是最好的呢,我们可以随机化优势吗,是否允许主动错误或者被动错误。计算机思维通过简化,嵌入,转换或者模拟,将看来困难的问题转化为可以解决的问题。

计算机思维是递归思维,并行处理。它将代码译为数据,又将数据译成代码。它用维度分析的泛化进行类型检查。承认异化的优缺点。给某个人或物多个名字。它同时意识到间接寻址和程序呼叫的代价和用处。它不只用正确程度和效率来评判一个程序,还判断美感,系统设计的简洁和优雅。

计算机思维利用抽象和分解来对付复杂的大型任务或者来设计复杂的大型系统。它使你远离担忧。它挑出合适的代表性的问题或者给问题的相关方面建模使问题易于处理。它使用不变量来概要地或者陈述性地描述系统行为。它确信我们无需理解系统的每个细节就可以安全地使用,修改或者影响一个大型复杂的系统。它设想多个不同的用户建立不同的模块,为了设想的未来的使用进行预加载或缓存。

计算机思维都以最糟糕的情形来考虑预防,保护和复原,方法可以是冗余,容错和纠错。 它采取呼叫高压封锁,死锁或者约定界面的方法。它还学习在发生同步相遇时避免竞争的情形。

计算机思维使用启发式推理找到解决之道。它在不确定的情况下进行计划,学习和安排。它是搜寻,搜寻,再搜寻,找到一长列的网页,赢得游戏的攻略或是一个反例。它是使用大量的数据来提高计算的速度。它是在时间和空间中,在处理能力和存储容量中找到平衡。

来看这些生活中的事例:您女儿早上去上学,她把这一天要用的东西放到背包里;这就是预加载和缓存。当您的儿子弄丢了他的手套,你建议他到经过的地方找;这是回溯。到什么时候下您会自己买一套而不再租用滑雪用具呢?这是联机算法。在超市排哪条队伍?这是服务器系统的性能建模。为什么停电时电话还可以用?这是失败的独立性和设计的冗余。那么如何进行用来分辨计算机和人的完全自动化的图灵测试,即CAPTCHAS,人类仿真?;这是利用解决人工智能的难题来给计算机代理商做宣传的。

计算机思维将植根于每个人的生活当中,那时算法,前置条件等词汇将成为每个人的词汇, 非决定论和垃圾收集不再是计算机科学家使用的含义;人们将会从上往下来画一棵树。

我们目睹了计算机思维对其他学科的影响。例如,机器学习改变了统计学。统计的学习正用于考察问题的规模, 以数据的大小和角度的方式,这在几年前还是不能想像的。各种组织的统计部门都在招聘计算机科学家。计算机学校包围了现有的和新成立的统计部门。

计算机科学家近来对生物学产生了兴趣,因为它们相信,生物学家将可以从计算机思维中获益。计算机科学对于生物学的贡献远不止于可以通过大量搜索序列数据来寻找图谱。希望的是利用数据结构和算法-计算机的抽象思维和方法, 通过阐述功能来表现出蛋白质的结构。计算机科学家正在改变生物学家的思维方式。相似的,计算机游戏理论正改变着经济学家的思维方式。量子计算对物理学家也是。

这样的思维不会仅是其他科学家们的技能,它将是每个人的。普适计算的今天就是计算机思维的明天。昨天普适计算还是梦想,今天它已成为了现实。计算机思维在明天也会成为现实。

是什么,不是什么
计算机思维是研究计算的- 什么是可以计算的,怎样进行计算。因此,计算机思维有下面的特点:

是概念化,不是编程
计算机科学不是计算机编程。计算机科学家式的思维不是说给计算机编程。它要求在多个抽象层面进行思考。

是基本技能,不是机械技能
基本的技能是每个人在现代社会都必须学会运用的。机械则意味着机械的重复。具有讽刺意味的是,要是计算机科学家真解决了人工智能的使计算机象人一样思考的大挑战,那时思维可就真要变机械了。

是人的思维方式,不是计算机的
计算机思维是人解决问题的方式,不是要人象计算机一样思考。计算机是愚笨无趣的,人聪明富有想像力。是人类使得计算机令人振奋。使用计算机设备,我们运用才智处理问题,那些在计算机时代之前我们不敢挑战的问题,构建具有只要想像得到的功能的系统。

数学和工程思维的补充和结合
计算机科学源于数学思维。因为向所有科学一样,它是正式建立在数学的基础之上。计算机科学源于工程思维,是因为我们构建的系统与真实世界是交互的。计算机设备的约束迫使计算机科学家使用计算机的思维,而不是数学思维。构建虚拟世界的自由使得我们可以设计超越现实世界的系统。

是想法,不是人工产品
不单单是生产的软硬件产品可以真实存在于各处,时刻影响我们的生活,计算机概念可以用来考虑和解决问题,管理我们的日常生活,进行沟通以及和其他人的交往,并且

对任何人,在任何地方
计算机思维都是现实的。它如此融入人们的生活,如明了的哲学。

很多人将计算机科学等同于计算机编程。有些父母以为他们学计算机科学专业的孩子就业的范围是很窄的。很多人认为计算机科学的基础研究已完成,只剩工程部分了。计算机思维是一个大的愿景,它指导计算机教育者,研究人员和实践者们改变社会对这个领域的印象。我们尤其需要告诉将要上大学的听众,包括教师,父母和学生,2点:

还有很多亟待理解和解决的智能挑战和有关的科学问题
问题和解决的领域只在于我们有多少好奇心和创造力。

学计算机专业的可以做任何事情
你如果学的是英语或数学,可以从事很多不同的职业。计算机科学也一样。计算机专业的职业可以是医学,法学,商务,政治,任何一种科学或工程学,甚至美学。

计算机专业的教授应该给大学新生上一门课,“怎样象计算机科学家一样思考?”,给非计算机专业的人讲,而不仅是给本专业的人听。还应该让要上大学的学生了解计算机方法和模型,而不是叹息对计算机感兴趣的人少了,或者计算机科学的研究经费减少了。我们要想办法激发公众的兴趣和对这个领域的智力的探索。这样我们才可能传播计算机科学的乐趣,地位和力量,普及计算机思维。

 

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

Computational Thinking
Jeannette M. Wing
Computer Science Department
Carnegie Mellon University
Pittsburgh, PA 15213-3890
[email protected]
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 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.
Please join us at Carnegie Mellon in making computational thinking com-
monplace!
4

你可能感兴趣的:(生物,constraints,transformation,statistics,behavior,printing)