计算机思维
(2010-11-29 22:58:03)
标签:
计算机思维it |
分类: 专业视角--洞察行业趋势 |
这是一组可以广泛应用的态度和技巧,不只是计算机科学家,每个人都会渴望学习使用它。——题记
计算机思维建立在计算过程本身的作用和局限上,不管这种计算是由人还是机器完成的。计算机方法和建模给了我们解决问题和设计系统的勇气,离开它我们难以解决这样复杂的问题。计算机思维首先面临的问题是机器的智力到底有多高:什么事情人可以做得更好,什么事情计算机可以做得更好?更基本的是,它要回答这个问题:什么是可计算的。直到今天,我们对这样的问题还是一知半解。
计算机思维,不止对计算机科学家,对每个人都是一种基本的技能。对于阅读、写作和算术,我们应该把计算机思维加入到每个孩子的分析问题的能力中。正如出版物推广了阅读、写作和算术一样,计算和计算机使得计算机思维更加普遍。
计算机思维将一些对计算机科学基本的概念用于解决问题、设计系统和理解人的行为。计算机思维包括大量的思维工具,这些工具反应了计算机领域是多么包罗万象。
在解决一个特定问题时,我们或许会问:解决它有多难?最好的方法是什么?计算机科学靠坚实的理论基础精确地回答这些问题。描述一个问题的难点,是理解用来完成它的机器潜在作用的一部分。我们还必须考虑机器的指令集、资源限制和操作环境。
在有效解决问题的时,我们应该进一步问问一个近似算法是不是足够好,是不是能利用随机化方法,是否能够允许假阳性和假阴性。计算机思维就是把一个看上去很难的问题重新转换成一个我们已经知道如何解决的问题。转换的方法包括归约、放大(译者注:比如自然数在整数中,整数在有理数中等等)、变形或者模拟。
计算机思维就是递归地思考,就是并行处理。就是把数据看成代码,把代码看成数据。就是维度分析(dimensional analysis)泛化过程中的类型检查。就是认识到用别名的优势和危险。就是认识到间接寻址和进程调用的代价和效力。就是判断一个问题时,不只从正确性和效率的角度考虑,还要从艺术的角度,考虑设计一个系统时的简洁和优雅。
计算机思维就是在完成复杂任务或者是设计复杂系统时,使用抽象和分解的方法。就是把考虑的问题分离开。就是为问题选择一个正确的表示方法或者给一个问题的相关方面建模。就是使用常量来简明地描述系统的行为。就是自信地认为我们能够安全地使用、修改和影响一个大而复杂的系统,而不必去理解每一个细节。就是在建模的时候想到多用户,为了将来使用而预取和缓冲。
计算机思维就是通过冗余、容错(damage containment)和纠错来防止发生不好的情景,一旦发生也可以从中恢复。就是用死锁来产生僵局和简化接口。(原文是:It is calling gridlock deadlock and contracts interfaces)就是在同步的时候避免产生竞争条件。
计算机思维就是用启发式的推理去发现一个解决方法。就是在不确定出现时能够有条不紊地调度。就是搜索,搜索,再搜索,直到找到一个网页列表,一个游戏攻略,或者其它类似的例子。计算机思维就是用大量的数据加速计算。就是在时间和空间,处理效率和存储容量之间的折中。
考虑这些日常事例。当你的女儿早上去学校时,她把一天需要的东西放入书包;这就是预取和缓冲。当你的儿子丢了他的手套时,你会建议他沿原路回去找;这就是回溯。什么时候你不再租赁滑雪器材,而是决定买一副?;这是在线算法。在超市你选择排哪条队;这是多服务器的工作模型。为什么你的电话在没电时还能用?;这是设计问题中的错误相互独立(the independence of failure)和冗余。一个完全自动的图灵测试怎么能够将电脑和真人区分开来?;这是利用解决人工智能难题来将机器比下去。
当象算法和前提这样的词汇成为人们日常词汇时,当不确定性和垃圾回收在日常生活中具有了计算机科学家使用的含义时,当人们画树时自上而下的时候,计算机思维将在人们的日常生活中根深蒂固。
我们已看到计算机思维在其他学科里的影响力。比如,机器学习改变了统计学。统计学习,以数据集大小和维度等术语的形式,正在大量问题上使用,这在几年前是不可思议的事。各种组织机构的统计部门雇佣计算机科学家。计算机学院也正在开设或强化自己的统计专业。
计算机科学家最近在生物上的兴趣的源动力在于,他们相信生物学家能够从计算机思维中获益。计算机科学对生物学的贡献,不只是它能够在大量的序列数据中寻找模式。我们希望数据结构和算法(计算机的抽象方法)能够表示蛋白质的结构和功能。计算机生物学正在改变生物学家的思维方式。同样,计算机博弈论正在改变经济学家的思维方式;纳米计算改变了化学家的思维方式,而量子计算改变了物理学家额思维方式。
计算机思维将不只是其他科学家,而且是每个人的技能的一部分。将来计算机思维就像今天无处不在的计算(ubiquitous computing)。无处不在的计算过去是人们的梦想,今天它实现了;而计算机思维就是明天的现实。
计算机思维是什么,有不是什么?
计算机科学研究计算问题——什么能够计算以及如何计算。所以计算机思维有如下特征:
注重概念,而不是编程。计算机科学不是计算机编程。像一个计算机科学家思维远不止是能够编程。它要求在多个抽象层次上思维。
基本技能,不必死记硬背。它是现代社会每个人都必须掌握的基本技能。而死记硬背是很机械的方法。具有讽刺意味的是,除非计算机科学解决了人工智能领域的最大挑战——让计算机和人一样思考——否则,思维将永远是死记硬背。(Ironically,not until computer science solves the AI Grand Challenge of making computers think like humans will thinking be rote.)
它是人的思维方式,不是计算机的。计算机思维是人解决问题的思维方式,不是试着让人像计算机一样思考。计算机是枯燥无聊的;而人是聪明且具有想象力的。我们人类使得计算机如此激动人心。有了计算设备,我们就能够用自己的聪明才智来解决一些在计算机时代之前不敢着手解决的问题,建立的系统的功能也仅仅局限于我们的想象力。
完善数学思维和工程思维,并将它们结合起来。计算机科学天生就需要数学思维。像所有科学一样,数学是它的形式化基础。计算机科学也天生需要工程思维,因为我们我们要建立的系统要与现实世界交互。底层的计算设备的限制,使得计算机科学家要有计算机思维,而不只是数学思维。自由地构建虚拟世界,使我们构建系统时不局限于物理世界。
它是想法,而不是物品。它不只是我们生产的可以出现在任何时候任何地方的软件和硬件。它将是我们用来解决问题,管理日常生活,和别人沟通和交流的计算机意义上的概念(computational concepts)。
无人无处不需要它。当计算机思维融入人们的日常努力中,不再以一种显式的哲学存在时,它就成了现实。
许多人把计算机科学等同于计算机编程。一些父母只看到他们主修计算机科学的孩子选择工作时狭窄的范围。许多人认为计算机科学里的基础研究工作早就完成,只剩下工程性的那部分。当我们行动起来改变世界对计算机领域的印象时,计算机思维是一个非常好的方法来指导计算机科学领域的教育者、研究人员和从业者。我们尤其要让那些没有上过大学的人,包括老师、父母和学生,知道这样两条信息:
智力挑战和科学问题尚待理解和解决。问题的范围和解决方法的范围只受限于我们的好奇心和创造力。
主修计算机科学的人,可以做任何事。一个主修英语或者数学的人可以选择很多不同领域开始自己的职业。计算机科学也是这样。主修计算机的人可以从事象医疗、法律、商业、政治和各种科学、工程,甚至是艺术。
计算机科学的教授应该给大一新生开设一门课程叫“像计算机科学家一样去思考”,而且不只是对计算机系的学生开放。我们应该让准大学生们学习计算机方法和建模。不要抱怨人们对计算机科学的兴趣下降,也不要抱怨在计算机科学方面的研究经费下降,我们应该激发公众的兴趣,让他们加入到这个领域的智力冒险中来。这样我们就能够分享计算机科学的欢乐、神奇和效力,也使计算机思维更加普及。
PS:本文译自JEANNETTE M. WING, the President Professor of Computer Science at CMU.
在通读一遍的基础上,翻译用时两个半小时(8:30-11:00)