博主注:GIScience会议是国际上最为著名的地理信息系统领域的国际会议,自2000年起,每两年举办一次,GIScience 2008会议邀请了美国卡内基-梅隆大学(CMU)计算机系华裔教授周以真博士做主题(Keynote)报告。她演讲的主题是“Computing Thinking(计算思维)”。非常奇怪,在这样一个GIS的顶级国际会议上,会请周以真教授做这样一个报告。这个材料之前就被王飞跃研究院翻译为中文,发表在2007年第3卷第11期的中国计算机学会通讯上。

计算思维
Jeannette M. Wing (周以真)
 (翻译:徐韵文,王飞跃, 校对:王飞跃)

美国卡内基-梅隆大学计算机系 周以真教授(图片来自网络)

计算思维代表着一种普遍的认识和一类普适的技能,每一个人,不仅仅是计算机科学家,都应热心于它的学习和运用。

计算思维建立在计算过程的能力和限制之上,由人由机器执行。计算方法和模型给了我们敢于去处理那些原本无法由任何个人独自完成的问题求解和系统设计。计算思维直面机器智能的不解之谜:什么人类能比计算机做得更好?什么计算机能比人类做得更好?最基本的是它涉及这样的问题:什么是可计算的?今天,我们对这些问题仍是一知半解。

计算思维可以做什么?

计算思维是每个人的基本技能,不仅仅属于计算机科学家。我们应当使每个孩子在培养解析能力时不仅掌握阅读、写作和算术(Reading,writing,and arithmetic---3R),还要学会计算思维。正如印刷出版促进了3R的普及,计算和计算机也以类似的正反馈促进了计算思维的传播。

计算思维涉及运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。它包括了涵盖计算机科学之广度的一系列思维活动。

当我们必须求解一个特定的问题时,首先会问:解决这个问题有多么困难?怎样才是最佳的解决方法? 计算机科学根据坚实的理论基础来准确地回答这些问题。表述问题的难度就工具的基本能力。必须考虑的因素包括机器的指令系统、资源约束和操作环境。

为了有效地求解一个问题,我们可能要进一步问:一个近似解是否就足够了,是否可以利用一下随机化,以及是否允许误报(false postive)和漏报(false negative)?计算思维就通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个我们知道怎样解决的问题。

计算思维是一种递归思维。它是并行处理。它是把代码译成数据又把数据译成代码。它是由广义量纲分析进行的类型检查。对于别名或赋予人与物多个名字的做法,它既知道其益处又了解其害处。对于间接寻址和程序调用的做法,它既知道其威力又了解其代价。它评价一个程序时,不仅仅根据其准确性和效率,还有美学的考量,而对于系统的设计,还考虑简洁和优雅。
    计算思维采用了抽象和分解来迎战庞大的任务或者设计巨大复杂的系统。它关注的是分离(SOC方法)。它是选择合适的方式去陈述一个问题,或者是选择合适的方式对一个问题的相关方面建模使其易于处理。它是利用不变量简明扼要且表述性地刻画系统的行为。它是我们在不必理解每一个细节的情况下就能够安全地使用、调整和影响一个大型复杂系统(黑箱方法——原编者注)的信心。它就是为预期的多个用户而进行的模块化,它就是为预期的未来应用而进行的预置和缓存(预测执行——原编者注)。

计算思维是按照预防、保护及通过冗余、容错、纠错的方式从最坏情形恢复的一种思维。它称堵塞为“死锁”,称约定为“界面”。计算思维就是学习在同步相互会合时如何避免“竞争条件”(亦称“竞态条件”)的情形。

计算思维利用启发式推理来寻求解答,就是在不确定情况下的规划、学习和调度。它就是搜索、搜索、再搜索,最后得到的是一系列的网页,一个赢得游戏的策略,或者一个反例。计算思维利用海量数据来加快计算,在时间和空间之间,在处理能力和存储容量之间进行权衡。

考虑这些日常中的事例:当你女儿早晨去学校时,她把当天需要的东西放进背包,这就是预置和缓存;当你儿子弄丢他的手套时,你建议他沿走过的路寻找,这就是回推;在什么时候停止租用滑雪板而为自己买一付呢?这就是在线算法;在超市付账时,你应当去排哪个队呢?这就是多服务器系统的性能模型;为什么停电时你的电话仍然可用?这就是失败的无关性和设计的冗余性;完全自动的大众图灵测试是如何区分计算机和人类,即CAPTCHA程序是怎样鉴别人类的?这就是充分利用求解人工智能难题之艰难来挫败计算代理程序。
 
    计算思维将渗入到我们每个人的生活之中,到那时诸如算法和前提条件这些词汇将成为每个人日常语言的一部分,对“非确定论”和“垃圾收集”这些词的理解会和计算科学里的含义趋近,而树已常常被倒过来画了。

我们已见证了计算思维在其它学科中的影响。例如,机器学习已经改变了统计学。就数据尺度和维数而言,统计学习用于各类问题的规模仅在几年前还是不可想象的。各类机构的统计部门都聘请了计算机科学家。计算机学院(系)正在与已有或新开设的统计学系联姻。
 
    近来,计算机学家们对生物科学越来越感兴趣,因为他们坚信生物学家能够从计算思维中获益。计算机科学对生物学的贡献决不限于其能够在海量时序数据中搜索寻找模式规律的本领。最终希望是数据结构和算法(我们的计算抽象和方法)能够以阐释其功能的方式表示蛋白质的结构。计算生物学正在改变着生物学家的思考方式。类似地,计算博弈理论正改变着经济学家的思考方式,纳米计算改变着化学家的思考方式,量子计算改变着物理学家的思考方式。

这种思维将成为每一个人的技能组合成分,而不仅仅限于科学家。普适计算之于今天就如计算思维之于明天。普适计算是已变为今日现实的昨日之梦,而计算思维就是明日现实。
 
它是什么,又不是什么?

计算机科学是计算的学问——什么是可计算的,怎样去计算。因此,计算思维具有以下特性:

  • 概念化,不是程序化。计算机科学不是计算机编程。像计算机科学家那样去思维意味着远不止能为计算机编程,还要求能够在抽象的多个层次上思维。
  • 根本的,不是刻板的技能。基本技能是每一个人为了在现代社会中发挥职能所必须掌握的。刻板技能意味着机械的重复。具有讽刺意味的是,当计算机科学真正解决了人工智能的大挑战——使计算机像人类一样思考之后,思维可能真的变成机械的了。
  • 是人的,不是计算机的思维。计算思维是人类求解问题的一条途径,但决非要使人类像计算机那样地思考。计算机枯燥且沉闷,人类聪颖且富有想象力。是人类赋予计算机激情。配置了计算设备,我们就能用自己的智慧去解决那些计算时代之前不敢尝试的问题,实现“只有想不到,没有做不到”的境界。
  • 数学和工程思维的互补与融合。计算机科学在本质上源自数学思维,因为像所有的科学一样,其形式化解析基础建筑于数学之上。计算机科学又从本质上源自工程思维,因为我们建造的是能够与实际世界互动的系统,基本计算设备的限制迫使计算机学家必须计算性地思考,不能只是数学性地思考。构建虚拟世界的自由使我们能够设计超越物理世界的各种系统。
  • 是思想,不是人造物。不只是我们生产的软件硬件等人造物将以物理形式到处呈现并时时刻刻触及我们的生活,更重要的是还将有我们用以接近和求解问题、管理日常生活、与他人交流和互动的计算概念;而且,
  • 面向所有的人,所有地方。当计算思维真正融入人类活动的整体以致不再表现为一种显式之哲学的时候,它就将成为一种现实。

许多人将计算机科学等同于计算机编程。有些家长为他们主修计算机科学的孩子看到的只是一个狭窄的就业范围。许多人认为计算机科学的基础研究已经完成,剩下的只是工程问题。当我们行动起来去改变这一领域的社会形象时,计算思维就是一个引导着计算机教育家、研究者和实践者的宏大愿景。我们特别需要走进大学之前的听众,包括老师、父母、学生,向他们传送下面两个主要信息:

智力上的挑战和引人入胜的科学问题依旧亟待理解和解决。这些问题和解答仅仅受限于我们的好奇心和创造力;同时

一个人可以主修计算机科学而从事任何行业。一个人可以主修英语或者数学,接着从事各种各样的职业。计算机科学也一样。一个人可以主修计算机科学,接着从事医学、法律、商业、政治,以及任何类型的科学和工程,甚至艺术工作。

计算机科学的教授应当为大学新生开一门称为“怎么像计算机科学家一样思维”的课程,面向所有专业,而不仅仅是计算机科学专业的学生。我们应当使入大学之前的学生接触计算的方法和模型。我们应当设法激发公众对于计算机领域中的科学探索之兴趣,而不是悲叹对其兴趣的衰落或者哀泣其研究经费的下降。所以,我们应当传播计算机科学的快乐、崇高和力量,致力于使计算思维成为常识。

 
本文发表于2007年第3卷第11期的中国计算机学会通讯。

周以真(Jeannette M. Wing),曾任美国卡内基-梅隆大学(CMU)计算机科学系主任,现在美国自然科学基金会(NSF)计算机和信息科学与工程部(CISE)主任。周以真1983年获得美国麻省理工学院(MIT)计算机科学博士学位。主要研究方向为并行分布式系统的规范和认证以及编程语言。目前主要研究提升软件系统安全性技术的设计和评价方法。周教师是ACM和IEEE会士。

周以真教授的主页:http://www.cs.cmu.edu/~wing/

本文的英文原文见:http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf

本文引用地址:http://blog.sciencenet.cn/home.php?mod=space&uid=2374&do=blog&id=8104 .

计算思维(美国CMU周以真教授)的更多相关文章

  1. 计算机思维的逻辑基础是什么? & 计算思维

    l  计算机思维的逻辑基础: 计算机思维是指人们操作计算机时,计算机行使特定功能的运作方式. 逻辑基础则是指支撑事物运作的基本法则. 因而,计算机思维的逻辑基础可以理解为,计算机在行使特定功能时,其运 ...

  2. Python计算给定日期的周内的某一天

    先理一下思路:1.weekday会根据某个日期返回0到6的一个数字来表示星期几对吧,0==星期一我们来列一个表: [0,1,2,3,4,5,6] 2.知道了星期几之后,你可以计算出那一周相对于这个0到 ...

  3. 计算思维(Computational Thinking)在少儿编程中的体现

    本文主要针对少儿编程从业人员及正在学习编程的学生家长 大家好,我是C大叔,国内早期的少儿编程从业人员.一直以来都是在做scratch,JavaScript,python以及信息学奥赛C++的讲师,教研 ...

  4. PHP计算一年有多少周,每周开始日期和结束日期

    一年有多个周,每周的开始日期和结束日期 参考代码一:[正在使用的版本] <?php header("Content-type:text/html;charset=utf-8" ...

  5. 中国MOOC_零基础学Java语言_第1周 计算_第1周编程题_1温度转换

    第1周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将 ...

  6. in memory computing 存内计算是学术圈自娱自乐还是真有价值?

    如果单从初衷和预想的价值来看,还是很诱人的.在冯诺依曼体系中,cpu计算和memory存储是分离的,而两者之间的data movement会造成高延迟和高耗能. 关于PIM类似的思想在50年前曾有人提 ...

  7. oracle计算是否是同一周

    函数已经解决跨年问题 select to_char(date'2016-12-31','iW') from dual; select to_char(date'2017-01-01','iW') fr ...

  8. js日期计算及快速获取周、月、季度起止日,获取指定日期周数以及星期几的小例子

    JS获取日期时遇到如下需求,根据某年某周获取一周的日期.如开始日期规定为星期四到下一周的星期五为一周. 格式化日期: function getNowFormatDate(theDate) { var ...

  9. js  计算是今天多少周

    /** * 判断年份是否为润年 * * @param {Number} year */ function isLeapYear(year) { return (year % 400 == 0) || ...

随机推荐

  1. 这玩意比ThreadLocal叼多了,吓得why哥赶紧分享出来。

    这是why哥的第 70 篇原创文章 从Dubbo的一次提交开始 故事得从前段时间翻阅 Dubbo 源码时,看到的一段代码讲起. 这段代码就是这个: org.apache.dubbo.rpc.RpcCo ...

  2. java抓取东方财富股票数据(附源码)

    背景 前段时间给朋友写了一个自动抓取同花顺股票数据的程序,不少人觉得不错. 这几天后台有粉丝给我留言让我也抓一下东方财富的数据,说东方财富的数据特别难抓,我还真不一定能搞得定. 本来我是一个德艺双磬且 ...

  3. 壹佰文章最全总结| 《关于ASP.NETCore的分享之路》

    学习路线图 (关于学习ASP.NET Core需要了解和掌握的知识点图) 一言不合就来图,各位博客园小伙伴大家好,感觉好久没有写文章了,自从春节开始,中间经历种种,慢慢的就开始微信公众号发文了,原因有 ...

  4. Python开发 常见异常和解决办法

    1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...

  5. 了解Js中的client,offset

    Client clientWidth,clientHeight 元素内部的宽度和高度,clientTop,clientLeft 元素内边距到其边框的距离,clientX,clientY相当于浏览器窗口 ...

  6. Lock接口示例

    Lock 的挂起 await()  唤醒signal() Lock 简单示例 public class LockDemo { public static void main(String[] args ...

  7. JMeter实战(二) 运行原理

    运行原理 如果不用工具,要做 100 并发的压力测试,得想办法组织 100 个人,每个人操作1台电脑,一声令下,100 个人同时点击,对系统造成 100 并发.现实中,很难找 100 个人和 100 ...

  8. 简简单单入个Redis的门

    Redis介绍 Redis是一种key-value的存储系统,它是一种nosql(Not Only [SQL])非关系型的数据库,它支持string(字符串).list(链表).set(集合).has ...

  9. 校招“避雷针”——GitHub 热点速览 Vol.43

    作者:HelloGitHub-小鱼干 如果要选一个关键词来概述本周的 GitHub Trending,保护 便是不二之选.先是有 ShameCom 来为应届毕业生护航,让学弟学妹们不被黑名单上的公司上 ...

  10. 常用的实现Javaweb页面跳转的方式

    我们有两大种方式来实现页面跳转:1.JS(javascript):2.jsp跳转 先说jsp(金j三s胖p):1.转发:request.getRequestDispatcher("1.jsp ...