计算思维与计算机方法论---第四届“大学计算机课程报告”论坛董荣胜桂林电子科技大学2008年10月19日武汉1计算思维是什么?本文所指的计算思维,主要指2006年3月,美国卡内基·梅隆大学计算机科学系主任周以真(JeannetteM.Wing)教授在美国计算机权威期刊《CommunicationsoftheACM》杂志上给出,并定义的计算思维(ComputationalThinking)。周教授认为:计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。为便于理解和应用,本文将定义中的“基础概念”更换为更为具体的“思想与方法”,这样,计算思维又可以更清晰地定义为:运用计算机科学的思想与方法进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。以上是关于计算思维的一个总定义,周教授为了让人们更易于理解,又将它更进一步地定义为:通过约简、嵌入、转化和仿真等方法,把一个看来困难的问题重新阐释成一个我们知道问题怎样解决的方法;是一种递归思维,是一种并行处理,是一种把代码译成数据又能把数据译成代码,是一种多维分析推广的类型检查方法;是一种采用抽象和分解来控制庞杂的任务或进行巨大复杂系统设计的方法,是基于关注点分离的方法(SoC方法);是一种选择合适的方式去陈述一个问题,或对一个问题的相关方面建模使其易于处理的思维方法;是按照预防、保护及通过冗余、容错、纠错的方式,并从最坏情况进行系统恢复的一种思维方法;是利用启发式推理寻求解答,也即在不确定情况下的规划、学习和调度的思维方法;是利用海量数据来加快计算,在时间和空间之间,在处理能力和存储容量之间进行折衷的思维方法。计算思维吸取了问题解决所采用的一般数学思维方法,现实世界中巨大复杂系统的设计与评估的一般工程思维方法,以及复杂性、智能、心理、人类行为的理解等的一般科学思维方法。计算思维建立在计算过程的能力和限制之上,由人由机器执行。计算方法和模型使我们敢于去处理那些原本无法由个人独立完成的问题求解和系统设计。计算思维最根本的内容,即其本质(Essence)是抽象(Abstraction)和自动化(Automation)。计算思维中的抽象完全超越物理的时空观,并完全用符号来表示,其中,数字抽象只是一类特例。与数学和物理科学相比,计算思维中的抽象显得更为丰富,也更为复杂。数学抽象的最大特点是抛开现实事物的物理、化学和生物学等特性,而仅保留其量的关系和空间的形式,而计算思维中的抽象却不仅仅如此。堆栈(Stack)是计算学科(Computingdiscipline,计算机科学、计算机工程、软件工程、信息系统、信息技术等相关专业的总称)中常见的一种抽象数据类型,这种数据类型就不可能像数学中的整数那样进行简单的相“加”。再比如,算法也是一种抽象,我们也不能将两个算法放在一起来现实一个并行算法。同样,程序也是一种抽象,这种抽象也不能随意“组合”。不仅如此,计算思维中的抽象还与其在现实世界中的最终实施有关。因此,就不得不考虑问题处理的边界,以及可能产生的错误。在程序的运行中,如果磁盘满、服务没有响应、类型检验错误,甚至出现危及人的生命时,还要知道如何进行处理。抽象层次是计算思维中的一个重要概念,它使我们可以根据不同的抽象层次,进而有选择的忽视某些细节,最终控制系统的复杂性;在分析问题时,计算思维要求我们将注意力集中在感兴趣的抽象层次,或其上下层;我们还应当了解各抽象层次之间的关系。计算思维中的抽象最终是要能够机械的一步步自动执行。为了确保机械的自动化,就需要在抽象的过程中进行精确和严格的符号标记和建模,同时也要求计算机系统或软件系统生产厂家能够向公众提供各种不同抽象层次之间的翻译工具。周教授对计算思维的特征进行了总结,给出了计算思维的以下六个特征:(1)概念化,不是程序化计算机科学不是计算机编程。像计算机科学家那样去思维意味着远远不仅限于能为计算机编程,还要求能够在抽象的多个层次上思维。为便于理解周教授的意思,可以更进一步地说,计算机科学不只是关于计算机,就像音乐产业不只是关于麦克风一样。(2)根本的,不是刻板的技能根本技能是每一个人为了在现代社会中发挥职能所必须掌握的。刻板技能意味着机械的重复。具有讽刺意味的是,只有当计算机科学解决了人工智能的大挑战——使计算机像人类一样思考之后,思维可以真的变成机械的了。就时间而言,所有已发生的智力,其过程都是确定的,因此,智力无非也是一种计算。这样,我们就应当将精力集中在“好的”计算上,即采用计算思维来造福人类。(3)人的,不是计算机的思维计算思维是人类求解问题的一条途径,但决非要使人类像计算机那样地思考。计算机枯燥且沉闷,人类聪颖且富有想象力。是人类赋予计算机激情。配置了计算设备,我们就能用自己的智慧去解决那些计算时代之前不敢尝试的问题,实现“只有想不到,没有做不到”的境界。计算机赋予人类强大的计算能力,人类应该好好的利用这种力量去解决各种需要大量计算的问题。(4)数学和工程思维的互补与融合计算机科学在本质上源自数学思维,因为像所有的科学一样,它的形式化基础建筑于数学之上。计算机科学又从本质上源自工程思维,因为我们建造的是能够与实际世界互动的系统,基本计算设备的限制迫使计算机科学家必须计算性地思考,而不能只是数学性地思考。构建虚拟世界的自由使我们能够超越物理世界的各种系统。数学和工程思维的互补与融合很好地体现在抽象、理论和设计3个学科形态(或过程)上。(5)是思想,不是人造品不只是我们生产的软硬件等人造物将以物理形式到处呈现并时时刻刻触及我们的生活,更重要的是计算的概念,这种概念被人们用于问题求解、日常生活的管理,以及与他人进行交流和互动。中国科学院自动化所王飞跃教授认为:在中文里,计算思维不是一个新的名词。在中国,从小学到大学教育,计算思维经常被朦朦胧胧地使用,却一直没有提高到周教授所描述的高度和广度,以及那样的新颖、明确和系统。周教授所描述的计算思维给我们带来了重新审视我们学科的视野,也使我们更加重视学科所蕴含的思想与方法。这种重视,会促成王飞跃教授所希望的,使我们的学科产生“涅磐”般的重生。(6)面向所有的人,所有地方当计算思维真正融入人类活动的整体以致不再表现为一种显式之哲学的时候,它就将成为现实。就教学而言,计算思维作为一个问题解决的有效工具,应当在所有地方,所有学校的课堂教学中都得到应用。针对不少人认为计算机科学等同于计算机编程等方面的错误认识,周教授认为,当我们用行动来改变这种狭隘的社会认识时,计算思维就是一个引领计算机教育家、研究者和实践者的宏大愿景。周教授呼吁:计算机科学家应该传授计算机科学的快乐、崇高和力量,并致力于使计算思维成为人们处理问题的常识。计算思维在国外的现状计算思维的提出,得到了美国教育界的广泛支持,不仅有卡内基·梅隆大学的专题讨论,更有包括美国数学研究所(AIM)等组织在内的众多团体的参与。2008年6月,在网上公布的ACM对CC2001(CS2001)进行的中期审查报告(CS2001InterimReview)(草案),就明确将计算思维与“计算机导论”课程绑定在一起,并明确要求该课程讲授计算思维的本质。2008年6月,美国计算机科学技术教师协会(CSTA)在网上发布了得到美国微软公司支持的《计算思维:一个所有课堂问题解决的工具》(ComptationalThinking:Aproblem-solvingtoolforeveryclassroom)报告,对什么是计算思维进行了总结,为便于人们了解,还对计算思维在计算机科学、自然科学、数学、社会学科、语言艺术、美术、生命科学等学科领域方面的经典论文进行了分类。计算思维不仅影响着美国,也影响着英国的教育,在英国的爱丁堡大学,人们在一连串的研讨会上探索与计算思维有关的主题。每次研讨会,都有不少专家讨论计算思维对他们学科的影响。研讨会上所涉及的学科已延伸到哲学、物理、生物、医学、建筑、教育等各个不同的领域。另外,英国计算机学会(BCS,BritishComputerSociety)也组织了欧洲的专家学者对计算思维进行研讨,提出了欧洲的行动纲领。值得人们注意的是,计算思维的提出,不仅得到美国教育界的广泛支持,并且还直接促成了美国国家科学基金会(NSF)重大基金资助计划CDI(Cyber-EnabledDiscoveryandInnovation,Cyber能够实现的科学发现与技术创新)的产生。CDI计划旨在使用计算思维(特别是在该领域产生的新思想、新方法)促进美国自然科学和工程技术领域产生革命性的成果。根据CDI的要求,最终CDI的研究成果,将使人们的思维模式发现转变,这种以“计算思维”为核心的转变,要反映在美国自然科学与工程,以及社会经济与技术等各个学科领域,任务书认为,这种转变将进一步保持美国在自然科学与工程等领域所具有的世界领先地位。2计算机方法论是什么?本文所讨论的计算机方法论,主要指的是,作者2002年提出,并构建的计算机科学与技术方法论(MethodologyofComputerScienceandTechnology)。计算机科学与技术方法论是对计算领域认识和实践过程中一般方法及其性质、特点、内在联系和变化发展进行系统研究的学问。计算机科学与技术方法论是认知计算学科的方法和工具,也是计算学科认知领域的理论体系。该理论体系建立在《计算作为一门学科》(Computingasadiscipline)报告给出的一个关于计算学科二维定义矩阵的基础上(如表1所示,其中,学科主领域已由报告给出的9个修改为CC2001报告给出的14个)。三个过程抽象理论设计1.离散结构(DS)2.程序设计基础(PF)3.算法与复杂性(AL)4.体系结构(AR)5.操作系统(OS)6.网络计算(NC)7.程序设计语言(PL)8.人机交互(HC)9.图形学和可视化计算(GV)10.智能系统(IS)11.信息管理(IM)12.软件工程(SE)13.社会和职业的问题(SP)14.科学计算(CN)学科主领域表1《计算作为一门学科》报告遵循了一般科学技术方法论的思想,它给出了计算学科二维定义矩阵(简称定义矩阵)的概念并细化了其内容。定义矩阵的一维是“3个过程”(抽象、理论和设计),另一维是主领域。特别当主领域仅为计算学科时,定义矩阵便是《计算作为一门学科》报告中所指的“知识框架”。“知识框架”反映了计算领域中人们的认识是从感性认识(抽象)到理性认识(理论),再由理性认识(理论)回到实践(设计)中来的科学思维方式。在这里,这个“知识框架”是对计算学科总的概括,它是稳定的;而“知识框架”的内容(值),即各主领域及其“3个过程”的内容,则随计算技术的发展而变化。计算学科二维定义矩阵,是对当时计算学科的一个高度概括。因此,我们可以将把握计算学科的本质问题归约为把握计算学科二维定义矩阵的本质问题。要把握定义矩阵的本质,就是要分别把握定义矩阵的“横向”(抽象、理论和设计3个过程)以及“纵向”(各主领域)共有的、能反映各主领域内在联系的思想和方法的本质。“横向”关系的内容,即抽象、理论和设计3个过程的内在联系与发展规律的内容,是计算机科学与技术方法论中最重要的内容。因为计算学科的基本原理不仅已被纳入抽象、理论和设计3个过程中,更重要的还在于3个过程之间的相互作用,推动了计算学科及其分支领域的发展。“横向”关系中还蕴含着学科中的科学问题。由于人们对客观世界的认识过程就是一个不断提出问题和解决问题的过程,这种过程反映的正是抽象、理论和设计3个过程之间的相互作用,因此,科学问题与抽象、理论和设计3个过程在本质上是一致的,它与“3个过程”共同构成了计算机科学与技术方法论中最重要的内容。“纵向”关系的内容,即各分支领域中所具有的共同的能反映学科某一方面本质特征的内容,既有助于我们认知计算学科,又有助于我们更好地运用方法论中的思想从事计算领域的工作,它是方法论中仅次于科学问题与“