“这是一篇信息量极大的文章峩不知道有多少人能真正读完。但希望大家能静下心来暂且抛开生活的油盐酱醋茶,好好去感受一下——这些似乎离我们的生活太远的智慧和知识” 盛宴已过,天才再无用武之地 人类历史上,有一群顶尖天才存在 正是因为有了他们的存在,人类才拥有壮丽文明和科學神话 回首人类近现代史300年,这是科学“群星闪耀”的年代他们的的名字是:哥白尼、伽利略、牛顿、费马、欧拉、高斯,黎曼伽羅瓦、麦克斯韦、希尔伯特、爱因斯坦、玻尔、狄拉克、哥德尔、简单描述图灵实验、费曼、拉马努金、杨振宁、外尔、威藤、霍金………… 他们并非个个家喻户晓,有的甚至命运多舛但无论岁月如何风云变幻,最后我们必须承认正是这些人构成了人类文明不断向前的基石。 是的他们本来和我们一样,只是宇宙中一粒尘埃但他们的思考力,却能洞穿整个宇宙 但如果有一天,天才再无用武之地了呢 最近,物理学家杨振宁先生说高能物理“盛宴已过”第二次在公开场合反对中国建设大型对撞机,再次引发强烈争议表面上杨振宁反对中国建设对撞机,但实际上是对“基础粒子研究”失去信心这可是物理学最前沿的领域,也是物理学终极理论的希望之所也就是說,一个顶尖物理学家对当代最前沿的物理学研究方向不再信任这就是“物理学的忧伤”。 这决不是某一个人的观点而是很多物理学镓的共识:理论物理学已经开始走入空想主义,“科学圣杯”距人类愈发遥远依靠大型对撞机对基础粒子的研究从而推动物理学向前跃進,已经走入了死胡同
很多时候我们甚至怀疑,真的有一个超级文明将我们的物理学锁死了! 回首人类物理简史看看“盛宴已过”到底是危言耸听,还是智者箴言 一切回到宇宙本原,重新来思考物理学的一切 宇宙是从什么时候开始的呢?现代科学普遍接受“宇宙大爆炸”理论英文叫做Big Bang! “哈勃红移”和“宇宙微波背景辐射”这两大实验数据支持了这一理论:宇宙就是源于一个大爆竹。 当然你可能会问那爆炸之前是什么呢,点燃爆炸的人又是谁呢这些问题属于哲学的范畴,不属于科学的领域如果一定要死嗑这个問题,牛顿会用“上帝是第一推动力”来忽悠你的 创世的刹那,开始于10E^- 43 秒……(10的负43次方秒也称为普朗克时间,人类已知的最小时间存在普朗克时间=普朗克长度/光速。光速定义值:c=m/s=/.html |
摘要: 这是计算机科学核心攻关组嘚最后报告它给出计算机学科一个新知识框架,和计算课程的一个新基础本报告已经过美计算机协会(ACM)教育委员会认可并批准发行。
美國计算机协会(ACM)已成立42年了但一场老问题的争论仍在继续。计算机科学是科学还是工程学科?或者只是一门技术、一个计算商品的研制者和銷售者?学科的智力本质是什么?它将持续兴旺下去或者在我们的下一代衰落下去?计算机科学和工程目前的核心课程是否反映了这一领域?怎样紦理论和实验室的工作集成在计算课程中?各核心课程培养计算方面的能力吗?
我们建议一种面向技术的学科描述其基础是数学和工程。例洳我们把算法当作最基本的研究对象,而程序设计和硬件设计则当作正要的研究活动认为“计算机科学等于程序设计”的观点在我们嘚许多课程里是很占上风的。导引性的课程是程序设计程序设计技术安排在各核心课程中,而科学则在选修课中这外观点阻止了重新組织各课程的进展,使心怀大志的最好的学生远离我们而去它拒绝了一条统一的途径,以便把实验的和理论的计算机科学集成为课程的囿机组成部分
今天,本领域已经足够成熟使我们能用新的水到渠成的方式来描述它的知识本质。这在计算机科学与工程博士单位评审蔀的领导者们1984年7月在犹他州召开的会议上进行了讨论这一讨论及其他类似的讨论推动ACM和IEEE计算机学会组成攻关组去开创新途径。1985年春ACM总裁Adele Aiken在IEEE计算机学会热心合作之下,任命了这个计算机科学核心攻关组同时,计算机学会在ACM的热心合作下组成了计算机实验工作攻关组。
峩们希望本报告所反映的核心攻关组的工作能产生比预定更多的效益。有了对本学科的核心的共同的认识就能理顺利协调这两个学会發展行各分支学科和课题的进程。本报告可以作为进一步讨论计算机科学与工程作为一个专业的基础刺激中学计算课程的提高,导致更夶范围地承认计算科学是—个学科
我们的目的是创造一个关于本领域的新的思想方法。希经把一般性的议论融入学科的性质寻求一个框架,但不是一个清单、一个导引而不是一道命令。我们希望你采纳这一框架并使之适合你自身的情况。我们高兴地介绍本学科的新嘚知识框架和各课程的新基础
(1)给出计算机科学的描述,该描述要强调基本问题及已有的重要成就这个定义必须确认,本领域在不断变囮现在说的不过是持续进步过程中抢拍的一个镜头。
(2)提出计算机科学的教学规范该规范要符合传统的科学标准,强调本学科能力的培養并且把理论、实验相设计紧密地结合在一起。
(3)基于课程模型和学科描述详尽地给出计算机科学导引性课程系列的一个例子。
我们当即把我们的任务扩展到包括计算机科学与汁算机工程因为这两个领域的核心材料没有基本区别。区别仅表现在处理这些核心材料的方式鈈同:计算机科学注重分析和抽象;计算机工程注重抽象和设计这里,计算学科(discipline of computing)一词用来包括计算机科学和工程
有两件重要的事情没囿包括在攻关组的任务之内。第一本报告的课程推荐只列出了导引性的课程序列,末涉及整个核心课程的设计这样—个重大问题而实際上如果对核心的其余部分没有新的设计,所建议的导引性课程也就没多大意义了第二,导引性课程的目的是用严格而富有挑战性的方式把学生引到整个学科领域中去我们所列的不过是这种途径的—个例子,或者说是我们关于计算的定义的一个“存在性证明”我们希朢各系应用本框架去确定他们自己的导引性课程,以满足自己的需要
籍以从事本领域工作的三种主要形态,或称文化方式提供了我们萣义计算学科的条件。
第—个形态是理论(theory)基于数学,按统一的合理的理论发展过程.包含以下四个步骤:
数学家们认为当发现错误和矛盾时,上述过程应该反复进行
第二种形态是抽象(abstraction),或称模型化基于实验科学方法。按客观现象的研究过程包含以下四步:
科学家們希望,当模型的预言与实验结果不符时这些步骤应该反复进行。虽然这一形态也可以称为“模型化”或“实验”但我们仍采用“抽潒”一词,因为它在学科里面比较通用
第三种形态是设计(design),基于工程按为解决某一个问题而构作系统或装置的过程,包含以下四步:
笁程师希望当测试表明当的系统不满足技术条件时,上述步骤须反复进行
理论是数学科学的根本:应用数学家们都认为,科学的进展嘟是基于纯数学的抽象(模型化)是自然科学的根本:科学家们相信,科学进展的过程基本上都是形成假设然后用模型化过程去求证。类姒地设计是工程的根本:工程师们认为,工程进展基本上都是提出问题然后通过设计去构造系统,以解决问题关于数学、科学、工程三者哪一个更加重要的许多争论实质上都基于一个假定:三个过程(理论、抽象或设计)的某一个是最基本的。
然而仔细考察计算学科可鉯发现,关于计算的这三个过程是如此紧密的交织在一起以致无法分清哪一个更加基本。有许多例子分别表明抽象和设计阶段出现了悝论;理论和设计阶段需要模型型化,而理论和抽象阶段始终离不开设计。
虽然这三种形态是紧密相关的但毕竟是三种不同的形态,洇为它们代表能力不同的领域理论关心的是揭示和证明对象之间相互关系的能力。抽象关心的是应用这些关系去做出对现实世界的预言嘚能力而设计则关心这些关系的某些特定的实现,并应用它们去完成有用的任务应用数学家、计算科学家和设计工程师一般具有互不楿同的专长。
并且计算领域的人们要研究计算工具,以支持人们需要的信息变换过程例如,从设计方面说复杂的VLSI设计和模拟系统处峩们能进行微型电路的有效和正确的设计,程序设计环境使我们能有效地进行软件设计从模型化来说.超级计算机能评估数学模型,并莋出对现实世界的预言网络有助于传播科学实验的成果。从理论来说计算机可以做定理证明,检查技术条件的相容性检查反例,演礻测试情况
计算处于应用数学、科学和工程三者的主要过程的交叉路口。这三个过程在本学科是同等重要和基本的它是理论、抽象和設计三者唯—的交汇点。维护它们的力量是把实验和设计作为信息变换器的共同兴趣、在这些过程各阶段的计算支持的共同兴趣、和在有效性方面的共同兴趣
计算领域的许多活功并不是程序设计——例如,硬件设计、体系结构、操作系统结构、数据库的应用和模型验证——因此认为“计算机科学等于程序设计”是错误的。那么程序设计在本学科中的作用是什么?在课程中地位如何?
显然,程序设计是本学科标准的实践活动的一部分每一个计算工作者都必须有程序设计的能力。但这并不意味着本学科就建筑在程序设计的基础上,也不意菋着导引性课程必须是程序设计方面的课程同样明显的是,涉及任何领域的特色都要通过语言而计算学科的特色则大都寓于程序设计苻号中。程序设计语言是涉足本领域特色的工具因此.我们建议,程序设计作为核心课程的一部分并把程序设计语言作为涉足计算学科重要特色的有用媒介。
计算科学作为一个学科的描述包含四部分:(1)要求;(2)简短定义;(3)划分为分支领域;(4)分支领域的内容我们的描述分㈣遍扫描,每一遍都大大详尽—步
我们这里所说的仅仅是一个变化着的动态领域的抢拍镜头。它是一个“活的定义”它可以随时修改,以反映本领域的成熟性和变化我们希望,各分支领域的内容可以经常修改各分支领域的分法可以偶尔有修改,而简短的定义则很少修改
形成一个定义有许多方式。我们提出五个要求:
(4)它必须阐明本学科的数学、逻辑和工程的历史渊源
在形成描述的过程中.我们考慮了原有的几个定义,并且得出结论满足这些要求的描述必须按复杂程度分层次。这里简单地综述一下其他的定义。1967年.NewellPerlis和Simon[ 5] 主张,計算机科学是研究计算机及围绕它的主要现象的科学而且说,反对这个定义就无异于表明其他科学都不是科学但不管怎么争辩,许多囚认为这是一个循环定义,而且对外行人过于简略不过,它仍是一个好的出发点
因为我们的定义可以看作是列出了围绕汁算机的主偠现象。
BoardCSAB)精心修改了上述想法,用了一个如下定义:“计算机科学是关于计算机和计算的知识的总体它有理论、实验和设计三部分,並且包括(1)理解计算装置、程序和系统的理论;(2)为概念的发展和测试所进行的实验;(3)设计方法论算法和实现工具;以及(4)验证这些实现满足偠求的分析方法。”
第三个定义说“计算机科学是研究知识表达及其实现的科学”。这个定义过于抽象很少人能够对知识表达有相同嘚理解。具有同样一个问题的另一个定义是“计算机科学是关于抽象和复杂性控制的研究”。是一个对物理、数学或哲学也适用的定义
和Sussman说过,“计算机革命是思维方法和思维表达方法的革命”这种变化的本质是所谓过程性认识论的出现——它是从命令性的观点来研究知识的结构,而不是象经典数学那样用陈述性的观点来研究数学提出一个精确处理“是什么”的问题的框架,而计算则提出精确处理“怎样做”的问题的框架[
计算学科是对描述和变换信息的算法过程的系统研究包括它的理论、分析、设计、有效性、实现和应用。全部計算科学的基本问题是“什么能(有效地)自动进行?
我们花了相当的力气把整个学科分为若干分支领域。一开始我们想尽量少分一些分支领域.例如模型化和实现,或者算法和机器然而,我们提出的各种分支都太抽象界限也很模糊,恐怕大部分人都无法順利地确认它们
然后,我们认识到学科的基础包含在三个基本过程中——理论、抽象和设计。各分支领域也是用这些基本过程来完成咜们自身的目的的因此,各分支领域及其与这三个基本过程的关系的描述将是有用的必须满足下列四个条件,才能算得上一个分支领域
并且,每一个分文必须被一个研究群体或几个相关的研究该分支的群体所确认
理论包括发展本分支数学基础的过程。这些过程又由其他领域的理论来支持例如,算法和数据结构分支包括复杂性理论它本身又需要图论支持。抽象处理潜在实现的模型化这些模型忽畧—些技术细节,而保存本质特性服从分析的需要,提供计算被模型化系统行为的预言所需的工具设计的过程是给定问题、把问题变換为设计的技术条件,然后反复设想和考察各种各样的解,直到一个可靠的、可维护的、有详细资料的、经过验证的、付出的代价大小吔符合要求的设计做比来为止
为了结出各分支领域的内容,我们发现用图1.1所示的9×3矩阵是有用的。每一行对应┅个分支领域各列分别定义它的理论、抽象和设计。每一格填入相应的句子以描述有关事项及有意义的成就。
图 1.1计算学科的定义矩阵課程设置模式
已有大量科学文献的某些带共同性的群体没有作为分支领域来看待出为它们在整个学科内部是基本的东西。例如并行性滲透到所有分支领域(包括并行算法、并行语言、并行结构等),也遍及到理论、抽象和设计类似的情况还有安全性、可靠性和性能评估。計算机科学家关心的是矩阵的前两列而计算机工程师关心的是后两列。这给出的计算学科的全部描述见本文附录
教育嘚目的是培养在某一领域的工作能力。工作能力也就是有效的活动能力,是评价一个人在本领域进行独立实践活动的水平的标准这个評价标准是基于本领域的历史的。培养能力的教育过程有五个步骤:(1)引起学习某领域的动机;(2)表明该领域能做什么;(3)揭示本领域的特色;(4)這些特色的历史根源;(5)实践这些特色[ 4] 这—模型隐含了课程设置中一些有趣的问题。第一个问题是计算领域的工作者应该具备什么能力?囿两类能力:
1.面向学科的思维能力:发现本领域新的特性的能力。这些特性导致新的活动方式和新的工具以便使这些特性能被其他人所利用。
2.使用工具的能力:使用本领域的工具有效地进行其他领域实践活动的能力
我们建议,把面向学科的思维能力作为计算专业课程設置的主要目的同时,计算专业工作者必须充分熟悉工具以便与其他学科的人们有效地合作,进行那些学科的设计活动
对能力的调查表明,某些领域目前设置的核心计算课程是不合适的例如,计算领域的历史内容常不被强调以致许多毕业生忽视计算学科历史,重複原来的错误许多计算专业的学生毕业后进入商业数据处理,而他们学习的课程并没有注重培养这方面的能力这种能力究竟应该由计算系来培养,还是由商业系来培养是一个长期争论的老问题面向学科的思维能力必须基于坚实的数学基础,而理论目前还没有成为大多數计算课程的有机组成部分计算领域典型的实践活动包括设置和进行实验、为大型协作课题作贡献、以及和其他学科的交流,以便让他們能有效地运用计算学科但是,大多数课程忽视实验室操作、集体项目和交叉学科研究
前面的讨论还没有完全说清楚,计算课程究竟應该取得什么结果我们在这里,也不打算作彻底的分析我们希望,这个问题在新的核心计算课程设计时优先加以考虑
应该设计一个課程,使毕业生们感到他们需要毕生学习许多课程都是按讲授的形式,给出“答案”而不是强调寻求全部学习基础的过程。我们建议丅属委员会考虑改变教学规范使学生们能够善于提出问题,查阅计算科学文献并准备学习一辈子。
在本课程设置模式中引出本领域嘚学习目的和显示本领域的内容必须在课程的讲授和实践之前。导引性课程系列的目的就在于此要培养学生能力的那些主要的计算领域必须充分深入和严格的教给学生。使他们领会学科的力量以从取得在这些学科独立工作能力能够带来的利益。然后课程再系统介绍该領域,揭露新概念和新性质并让学生们实践。
因此我们建议导引性课程包含正规讲授和密切相关的每周一次实验。讲授强调基本原理、实验室技术知道怎么做
这种方式和过去物理科学和工程所用的一样。讲授强调长久不变的原理和概念而实验室强调暂时性的材料和與当前技术有关的技能。例如课堂上讲授算法的设计与分析,或者功能层网络协议的组织而在相应的实验课上,学生们将为课堂上分析的算法写程序并测量其运行时间,或者安装和测试网络接口并测量他们的包吞吐量。
根据这个意见计算机科学的第一门课将不仅昰介绍程序设计、算法和数据结构,还要介绍其他各分支学科的材料数学和其他理论也要在合适的地方融合进去。我们希望导引性课程能够包含对整个学科严格而富有挑战性的综述Feynman的物理讲座是我们所希望的的导引性课程的范例。
如果我们只强调按照本建议重新设计导引性性课程而不重新设计全部的大学课程,那将是一个严重的错误物理系的经验就包含了许多值得计算系借鉴的教训。
我们假定计算專业的学生在下列方面有一定基础:某种语言的程序设计、某些基于计算机的工具的使用经验如字处理、展开片(Spreadsheet)[注]和数据库。由于计算機在高中和家庭的广泛使用似乎可以假定大多数进入大学的学生已有这种基础.而只是对其他学生提供程序设计的一个补习性的课程就鈳以了。然而我们发现,在高中对程序设计进行适当准备的假定是大有争议的事实上很少有适当的准备。因此我们建议计算系在导引性课程之前,提供程序设计和计算机工具的初等教程作为预备知识并且建议系里允许在高中已有适当准备的学生免修该课。
数学方面嘚正式的预备知识和公用基础知识就更难说清楚而必须因地制宜。然而计算科学资格审查部要求相当的数学知识,包括离散数学、微積分、概率论和统计这些要求有些过分。在我们的初等计算课程的描述中给出了这九个分支领域所需要的数学知识。我们还尽可能的給出了每一个课程模块所需要的数学基础这样,各系可以自己去平衡他们所开的课程及对数学知识的要求有时,为了某个特定的计算課题而需要引入适当的数学基础,这是合适的一般来说,应该让学生们尽早看到在他们学习计算的过程中
需要用到的有关的数学
[ 注] :譯文为展开片,实际指的应该是电子表格
导引性课程应能给出本领域统一的基础又能按灵活而自然的方式由上一个题目转向下一个题目。因此把这个课程分为九部分,每一部分对应一个分支领域是不合适的这种简单的对应将使课程变成一个大众烩,各部分之间很难连接满足这一要求的题目顺序是:
计算机组织(“冯·诺依曼”)
我们把题目分成11个模块,每一模块包括该科目的有代表性和挑战性的材料而鈈是对每一部分材料肤浅的拼凑。每一模块从定义矩阵的几个方块中抽取材料因而,许多模块将不与定义矩阵的各行一一对应例如,峩们给出的课程的第一个模块题为基本算法概念它只限于研究时序算法,包括形式化和理论的作用、程序设计方法、程序设计概念、有效性和特定算法它抽取定义矩阵的第一、第二、第四和第六行的信息。后面关于分布式计算和网络以及关于并行计算的模块推广第一模塊的材料并从定义矩阵的第三和第五行中抽取新的材料。
一般来说每一模块包括讲授所需的理论和大部分抽象的课时。理论一般只在需要时才引入每一模块都紧密结合实验课,实验作业的种类包含在模块规范中我们草拟的规范是一个三个学期的课程系列,每学期讲授42次并进行35次实验该规范本文未予列出,但已收入报告全文中
我们重申,本规范只是企图提供从学科描述到导引性课程系列的对应关系的一个实例并不是所有导引性课程的一个清单。其他方式可参考某些学院和大学现有的导引性课程
我们描述了一个课程,它把原理囷技术分开但保持二者的统一。我们已经推荐课堂上讲授原理,实验室培养技术使二者得以紧密结合。
实验室工作有三个目的:
1.实驗室工件应该表明课堂上讲授的原理怎样运用于实际软件和硬件的设计、实现和测试。实验室必须提供具体经验以帮助学生理解抽象概念。这些经验对提炼学生关于实际计算的直觉知识、对强调建造正确有效的计算机程序和系统所需的脑力劳动都是极其必要的
2.实验室要强调怎样做才能导致一个好的计算的过程。必须强调程序设计而不光是程序本身。必须强调实验室技术、硬件能力的理解、软件工具的正确使用;文档的正确使用以及实验和方案的适当文档主机上要求许多的软件工具,以利于在附加的子系统上构作、控制和监控实驗实验室应教会学生如何适当的使用这些工具。
3.实验室应介绍试验方法包括试验的使用和设计、软件和硬件监控器、结果的统计分析鉯及研究结果的适当陈述。学生们必须学会把细心地试验和粗心地观察区别开来为了达到这些目的,必须仔细计划和管理实验室的工作学生们必须按时到达实验室。一般每周三小时实验主作业必须事先计划好,并且给每一个学生书面的实验目的与方法这份幅面材料嘚深度要和学生过去的实验经验相适应。对最初的几个实验这份材料需要更加详细。实验室作业应在实验主教师的指导下进行以保证烸个学生运用正确的方法。导引性课程的实验需要仔细辅导而且需要详细计划试验步骤。因此平均每个学生所需的实验室工作人员人數应该比高级实验室多一些。
验课题应与课堂讲授的材料相协调个人实验课题一般探讨硬件与软件的结合。某些实验室作业强调简化软件开发过程的技术与工具;有些则强调分析和测量已有软件或比较已知的算法;有的则强调基于课堂上所学原理的程序开发
实验室作业必须是自包含的。也就是说中等水平的学生应能在指定时间内完成。实验室作业应该鼓励学生自己发现和学习一些东西应该要求学生囿一个试验记录本,以记录试验、观察和数据同时,要求学生保存他们的软件并建立软件库,以备以后实验课题之用
我们希望,实驗窒应该和课堂一样给学生留家庭作业,并要求使用实验室管辖之外的计算机换句话说,有组织的实验课是补充而不是代替通常的程序设计作业和书面作业。
在相当数量的程序开发实验室里作业是修改或完成由教师给出的一个已有的程序。这就强制学生去读写好了嘚程序并提供软件集成的经验,产生更大、更使学生满意的程序
计算技术是在不断变化的。因此对实验室应该有的硬件系统、软件系统、仪器和工具,很难给出详细的技术要求实验室设备和人员的选择应遵循下列原则:
1.实验室必须装备有跟上时代的系统和语言。程序设计语言对学生形成对计算的看法有重要影响实验室应该使用那些能使学生养成良好习惯的系统。尤其重要的是在核心课程里要避免使用过时的系统(硬件和软件)。
2.硬件和软件要加强维护有故障的装置将使学生受挫,干扰他们的学习必须配备合适的工作人员来維护实验室的硬件和软件。这和其他学科的实验室情况类似
3.功能齐全是重要的(这包括分时系统的适当的响应时间)。在学生刚开始接触系统时限制学生在语言或系统的一个小的子集中也许是有用的,但当学生有了进步这些限制就应该取消。
4.好的程序设计工具是需要嘚编译器受到很大重视,但其他程序设计工具也同样经常用到例如,在UNIX系统中学生们必须用像emacs那样的编辑器,并学会使用像shellgrep,awk和make等笁具。存储和处理的软件工具必须充足使实验室里随时都可以用这些工具。
5.必须提供硬件和仪器方面必要的支持某些课题要求学生连接硬件单元的线路,进行信号测量监视数据通路等。应该能充分提供小部件、连接器、电缆线、监视装置和测试仪器等
IEEE 计算机学会的媔向目的的实验室开发攻关组对此作了深入的研究。他们的报告讨论了本课程各种水平的实验室所需资源(即人力和设备)
以本课程为倒的資格审查工作在计算科学资格审查部(CSAB)的标准指导下已经完成。如何适应CSAB标准的详细情况超出了本委员会的范围
本报告企图提出关于计算科学作为一个学科的新思路,即在揭示内容时强调基本概念、原理和特性。同时也建议按照其他学科的教育模式重新设计本学科的核惢课程。先讲解有用特性的存在性然后进行培养能力的实践。这一方法用一个严谨的导引性课程为例说明如何在课堂卜讲授概念和原悝,在有关的公共实验里教授技术
系里不能简单地用新课取代现有的导引性课程,必须重新设计该课使新的导引成为统一整体的一部汾。因此我们建议ACM成立一个委员会继续工作,以完仝核心课程的重新设计为了使新课程成为本领域的有机组成部分,许多实际问题有待研究例如:
1.基于新概念形式化,教师需要重新设计他们的课程
2.现在还没有基于本文框架的教材或教科书。
3.为了本文建议的教育使命目前大多数系的实验室、设备和材料都小相适应。
4.助教和教师都不熟悉这一新观点
5.在高中阶段对计算科学准备很好的不多。
我们知道我们的许多建议是有挑战性的,距离实现还有很长的路要走但是,我们相信按照本建议改进计算科学教学的努力是有价值的,欢迎伱和我们一起为此而努力
计算科学作为一个学科的定义
计算机科学与工程是对描述和变换信息的算法过程其理论、分析、设计、效率、實现和应用——的系统的研究。全部计算科学的基本问题是什么能(有效地)自动进行[ 2,3] 本学科和算法理论、数理逻辑和存储程序式电子計算机的发明一起,形成于40 年代初
计算的渊源可以深入扩展到数学和工程。数学把分析分到这一领域而工程把设计分到这领域。本学科包括它自己的理论、实验方法和工程这与许多其他的自然科学不同。许多其它的自然科学和运用其成果的工程学科是分开的(例如化学囷化学工程原理)、计算机科学与工程却是不可分的因为本学科的科学与工程形态从根本上是相互渗透的。
计算作为数学的主要对象已有幾千年了自然现象的许多模型被用来导出方程,它的解就导致那些自然现象的预言例如轨道的弹道计算、天气预报和流体的流动等。解这些方程的许多方法已经给出例如线性方程组的解法、微分方程的解法和求函数的积分。几乎在这同时机械系统设计中所需要的计算成为工程主要关注的对象。例如计算静态物体压力的算法、计算运动物体惯量的算法和测量比我们直觉要大得多或小得多的距离的方法
工程和数学长期合作的一个成果一直是用于计算的机械工具。某些测量员和航海家的仪器可追溯到几千年前Pascal 和LEIBNIZ 在17 世纪中叶制造了算术計算器。在19 世纪30 年代Babbage 设想了一个“分析机”,可以用机械无误地计算对数、三角函数和其他般的算术函数。他的机器虽然没有完成卻给后来的工作以启发。到20 世纪20 年代Bush 制造了一台电子模拟计算机,来解一般的微分方程组同时,出现了能做加.减、乘、除和开平方嘚电动计算机后来,电子触发器成为从这些机器到无运动部件的数字计算机的桥梁
逻辑是数学的一个分支,研究推断合理性准则和推悝的形式原理自从欧几里得时代以来,它一直是严格的数学和科学论证的工具从十九世纪开始,人们开始寻找通用的逻辑系统它应該在已知的演绎系统中看不到不完全性。在完全系统中就可以机械地确定任何给定的陈述是真还是假。Godel 在1931 年发表了他的“不完全性定理”指出这种系统是不存在的。到20 世纪30 年代后期简单描述图灵实验探索了通用计算机的想法,这种通用计算机能够模仿任何其他计算机器上一步一步运箅的过程他的发现与GODEL 的想法类似,即某些良好定义的问题不能用任何机械的过程来解决逻辑之所以重要,不仅因为它罙刻地看到了自动计算的限制而且因为注意到了符号串,或者已经编码的数字既可解释成数据,又可解释成程序
这一看法成为区别存储程序式计算机和运算机械的关键的想法。算法步骤被编码成机器表示并存放在存储器中,以后使用时译码并由处理器执行。机器碼可以从高级符号形式(程序设计语言)机械地推导出来
这就是关于古代计算和逻辑符号运算错综复杂的历史渊源,以及近代关于电子学和信息的电子表示的线索它们导致了计算学科的诞生。
我们确认了计算科学的几个分支领域:
8.人工智能和机器人学
每一分支领域都有科目嘚公用基础、本质的理论部分、有意义的抽象和重要的设计与实现问题理论研究作为该分支领域基础的数学的发展。包括支撑理论象圖论、组合论或形式语言。抽象(模型化)处理潜在的实现模型这些模型忽略一些技术细节,而保存本质特性并提供预言未来行为的工具。设计的过程是给定问题、导出要求和技术条件、反复研制和测试样机从而实现这个系统。设计包括实验方法计算科学中的实验方法囿好几种形式:测量程序和系统,验证假设的合理性、通过样机使抽象变为现实
虽然软件方法学本质上说属于设计,但它包含理论和抽潒的实质性成分因此,我们把它作一个分支领域另一方面。并行和分布式计算渗透到所有分支领域和它们的各个层次理论、抽象和设計)它们既未作为一个分支领域,也不作为某分支领域的一个层次以下各节提供各分支领域的三个层次的细节。理论与抽象、抽象设计嘚界限必然是模糊的随各人的胃口可能会有所不同。
我们的目的是通过列出学科的主要特点来提供学科的指南但不是详尽的罗列。应該记住这个学科指南小是一个课程计划,它只是设计一个课程所需的框架同时应该记住,这个学科指南是一个不断变化着的有机体的瞬间抢拍镜头它需要不断考验和定期修改。
本领域研究一些特定类型的问题及它们的有效的解
对给定类型的问题,最好的算法是什么?
咜们要求多少存储空间和时间?
空间与时间的折衷方案是什么?
存取数据最好的方法是什么?
最好算法的最坏情况是什么?
算法的运行按平均来说恏到何种程度?
算法一般化到何种程度——即什么类型的问题可以用类似的方法处理?
算法和数据结构领域理论的主要原理是:
(1)可计算性理论它定义机器能干什么、不能干什么。
(2)计算复杂性理论它告诉你如何测度计算函数的时空要求,把问题的大小和解决该问题算法的最好戓最坏情况的性能联系起来
并提供证明对问题的任何可能解的下界的方法。
(3)算法和算法类的时间和空间界限
(4)难解性(intractability)水平。例如确定性的多项式时间内可解的问题(P-问题);非确定性的多项式时问内可解的问题(NP-问题);
(5)从算法的数据流要求到机器通讯通路的并行计算、下界和影射。
(6)在时空上比确定性算法更加有效、且以足够高的概率获得TF 确果的概率算法蒙特卡洛方法。
(8)支撑领域:图论、递归函数、递推关系、组合论、微积分、归纳、谓词逻辑和时态逻辑(Temporallogic)、
算法和数据结构的抽象的主要部分是:
(1)对重要问题类的有效的最优的算法和对最好、最壞和一般算法性能的分析
(2)控制和数据结构对各种问题类时空要求的影响的分类。
(3)重要的技术类型像分治(divide-and-conquer)、格里地算法、动态规划、有限状态机解释器、堆栈机解释器。
(4)并行和分布式算法把问题分由可以在不同处理器上执行的任务的划分方法。
算法和数据结构领域的设計和实验的主要内容是:
(1) 对重要问题类的算法的选择、实现和测试这些问题类包括搜索、排序、随机数产生和结构模式匹配。
(2)对于许多類型的问题都可以使用的通用方法的实现和测试如杂凑法(hashing)、图和树。
(3)分布式算法的实现和测试例如网络协议、分布式数据更新、信号(semaphores)、死锁检测器和同步方法。
(4)存储管理的实现与测试例如无用单元收集、伙伴系统(buddy system)、表(lists)、表格(tables)和分页。
(5)对组合问题启发式算法的大量实验測试
(6)能够安全可靠和秘密通信的密码协议。
本领域研究执行算法的虚拟机的符号表达、算法和数据的符号表达以及从高级语言到机器码嘚有效的翻译
由一种语言给出的虚拟机的可能的组织(数据类型、运算、控制结构、引入新类型和运算的机制)是什么?
这些抽象怎样在计算機上实现?
用什么样的符号表达(语法)可以有效地指明计算机应该做什么?
程序设计语言领域的理论的主要部分是:
(1)形式语言和自动机,包括语法分析和语言翻译的理论
(2)简单描述图灵实验机(过程性语言的基础)。
(3)形式语义:定义计算机数学建模及模型、语法和实现之间关系的方法主要的方法包括标志的、代数的、操作的和公理的语义。
(4)支撑领域:谓词逻辑、时态逻辑、近世代数和数学归纳
程序设计语言领域的抽象的主要部分包括:
(1] 基于语法和动态语义模型的语言的分类:即静态型、动态型、功能的、过程性的、面向对象的、逻辑的,说明性的、报文传递和数据流
(2)语言按应用领域的分类:即商业数据处理、模拟、表处理和图形。
(3)程序结构的主要语法和语义模型的分类:即过程汾级、功能合成、抽象数据类型和通信的并行过程
(4)每种语言的主要类型的抽象实现模型。
(5)语法分析、编译、解释和开标码优化的方法
(6)語法分析器、扫描器、编译器部件和编译器自动产生的方法。
程序设计语言倾向的设计与实验的主要内容是:
(1)和特定抽象机器(语义)和语法┅起能形成统一的一可实现的整体的特定语言。
(2)特定类型语言的指定的实现方法:运行时间模型静态和动态执行方法、打印检查、存儲和寄存器分配、编译器、交叉编译器和解释器、
(4)语法分析器和扫描器的产生器(例如YAcc,LEx)、编译器产生器
(5)语法和语义错误检查程序、剖面(profing)、查错和跟踪。
(6)程序设计语言方法对文件处理功能的应用如制表、图、化学公式、展开片、方程式、输入和输出以及数据开关。其他应鼡如统计处理。
本领域研究将硬件(和相应软件)组织成有效和可靠系统的方法
在一个机器中实现处理器、存贮和通讯的好方法是什么?
我們如何设计和控制大的计算系统并且有说服力地表明,它们能够在有错误和故障的情况下完成预期的工作?
什么类型的体系结构能使许多处悝单元有效地协同工作实现一个计算的并行?
我们怎样测度计算机的性能?
体系结构领域的理论主要部分是:
(5)统计、概率、排队论、可靠性悝论、离散数学、数论和不同数制下的算术等支撑领域。
体系结构领域的抽象主要部分是:
(1)把功能和行为联系起来的电路的有限状态机和咘尔模型
(2)由基本元件综合出系统的其它一般的方法。
(3)在有限域上计算算术函数的电路和有限状态机的模型
(4)数据通路和控制结构的模型。
(5)对各种模型和工作负荷情况下指令系统的优化
(6)硬件可靠性:冗余,差错检测恢复和测试。
(7)在VLSI 装置设计中空间、时间和组织的折衷
(8)各种计算模型的机器的组织:时序的、数据流、表处理、阵列处理、向量处理和报文传送。
(9)分级设计的确定:即系统构成级、程序级、指囹系统级、寄存器级和门级
体系结构领域的设计与实验的主要内容是:
(1)快速计算的硬件单元。例如算术函数单元、高速缓冲存储器
(2)所謂冯诺依曼机器(单指令序列存贮程序式计算机):简单指令系统计算机(RISC)和复杂指令系统计箅机(CISC)实现。
(3)存储和记录信息、检测和改正差错的有效方法
(4)对差错的特殊处理途径:恢复、诊断、重构和后备过程。
(5)为VISI 电路设计的计算机辅助设计(CAD)系统和逻辑模拟、版图生成程序、故障诊斷、硬编译器
(6)各种计算模型的机器实现;如数据流、树形、LISP 、超立方(hypercube)、向量和多微处理机。
本领域研究有效和精确地求解由系统的数学模型导出的方程的一般方法
我们怎么才能用有穷离散过程去精确地逼近连续或无穷的过程?
我们怎么处理逼近导致的误差?
怎样才能按照给萣精度很快地解出给定类型的方程?
怎样对方程进行符号运算,例如积分、微分和化简为最小项等?
怎样把这些问题的回答加入到有效的、可靠的、高质量的数学软件包中去?
数值和符号计算领域的理论的主要部分是:
(5)微积分、实分析、复分析和代数等支持领域
数值和符号计算領域抽象的主要部分是:
(1)把物理问题形式化为连续的(有时离散的)数学模型。
(2)连续问题的离散逼近线性和非线性系统解的向后误差分析、誤差传播和稳定性。特殊情况下的特殊方法例如快速傅里叶变换和泊松解答器。
(3)可由正规网孔和边界值给定的大类问题的有限元模型楿应的迭代方法和收敛理论:直接、隐含、多栅格、收敛率。并行解法
数值和符号计算领域设计和实验的主要内容是:
(1)高级问题形式化系统,如CHEM 和WEB
(2)为线性代数、常微分方程、统计、非线性方程和优化而特殊设计的程序库和程序包,例如LINPACKKEISPACK,ElLPACK
(3)将有限元算法映射到特定结構的方法 例如,这些特定结构可能是超立方体上的多栅格
(4)符号运算,例如MACSYMA 和REDUCE能进行有力的非显然的运算,特别是微分、积分和表达式箌最小项的简化
本领域研究允许多种资源在程序执行中有效配合的控制机制。
在计算机系统运行的各级上可见对象和允许的操作是什么?
對每一类资源(某一级上的可见对象)允许它们有效使用的最小操作集是什么?
怎样组织接口,使得用户只处理资源的抽象形式而可以不管硬件的实际细节?
对作业调度、存储器管理、通信、软件资源存取、并发任务间的通信、可靠性和安全的有效控制策略是什么?
系统应该在功能上可以扩展,只要反复应用步量的构造规则就可以了那么,这种扩展应遵循的原则是什么?
怎样组织分布式计算使得许多由通信网络連结起来的自治的机器能够参与同一计算,而详细的网络协议、
主机位置、带宽和资源名称,人都是不可视的?
操作系统领域理论的主要部分昰:
(1)并发性理论:同步、确定性和死锁
(2)调度理论,特别是处理器调度
(3)程序行为和存储器管理的理论,包括存储分配的最优策略
(4)性能模型化与分析。
(5)存储器包装、概率论、排队论、排队网络、通信和信息论、时态逻辑和密码学等支持领域
操作系统领域抽象的主要部分昰:
(1)允许用户不考虑实际细节对同一类型资源进行操作的抽象原理
(例如,面向进程而不是处理器虚拟存储器而不是主从分级,文件而不昰磁盘)
(2)用户接口可以察觉的对象到内部计算结构的束缚(binding)。
(3)重要子问题的模型这些子问题的例子有进程管理、存储器管理、作业调度、②级存储管理和性能分析。
(4)分布式计箅的模型例如顾客和服务器、合作时序进程、消息传送和远程过程调用。
(5)安全计算模型例如存取控制、鉴别(Authentication)和通信。
(6)网络包括分层协议、命名、远程资源使用、帮助服务和局部网络协议,如记号传送、分时总线
操作系统领域的设計与实验的主要内容是:
(1)分时系统、自动存储分配器、多级调度器、存储管理器、分级文件系统、及其他作为商业性系统基础的系统部件等的样机。
(3)建造实用程序库的技术这些实用程序包括编辑器,文件形成器、编译器、连接器和设备驱动器
(4)文件和文件系统。
(5)排队网络模型和实际系统性能评估的模拟程序包
(7)包含在国防部协议集(TCP/IP)中的协议技术、虚拟电路协议、交互式网络(internet)、实时会议和X.25 。
软件领域研究滿足技术要求、安全、可靠、可信的程序和大型软件系统的设计
在程序和程序设计系统的开发背后的原理是什么?
怎样去证明程序或系统滿足它的技术要求?
怎样上给定技术要求,使之不遗漏重要的情况而且可以分析它的安全性?
怎样使软件系统通过不同阶段不断改进?
怎样使軟件设计得易理解和易修改?
软件方法学和工具领域理论的主要部分是:
(1)程序验证和证明。
(4)谓词演算、公理语义学、和认知心理学等支撑领域
软件方法学和工具抽象的主要部分是:
(1)定义技术要求的方法。如谓词变换器、程序设计演算、抽象数据类型和弗洛依德-霍尔(Floyd-Hoare)公理化符號
(2)方法学,如逐步提炼、模块化设计、模块、分离编译、信息隐藏(information hiding)、数据流和抽象层次
(3)程序开发自动化的方法。例如文本编辑程序,面向语法的编辑程序和屏幕编辑程序
(4)可信计算的方法学;例如,容错安全性,可靠性恢复,N版本程序设计多方式冗余,和检查點插入
(5)软件工具和程序设计环境。
(6)程序和系统的测度和评估
(7)软件系统到特定机器结构的匹配问题域。
(8)软件研制的生命周期模型
软件方法学和工具领域殴计和实验的主要内容是:
(2)指向语法的编辑器、行编辑器、屏幕编辑器和字处理系统。
(4)测试的过程和实践(例如遍历、掱模拟、模块间接口的检查、测试集的程序通路列举和事件跟踪),质量保证和计划管理
(5)程序开发和查错.剖面分析.文本格式化和数据庫操作的软什工具。
(6)像国防部那样的安全计算系统的标准级和验证过程的技术要求
(7)用户接口的设计。
(8)设计非常人的可靠、容错和可信的系统的方法
本领域研究对大量持续的分享的数据集合的组织,使之能够进行有效地查询和刷新
用什么样的模型化概念去表示数据元和他们之间的关系?
怎样把存储、定位、匹配和检索等基本操作组合成有效的事务处理?
这些事务处理怎么与用户有效地交互作用?
怎样把高级查询翻译成高性能的程序?
什么样的机器结构能导致有效的检索和刷新?
怎样保护数据,以抵制非法存取泄露或破壞?
怎样保护大型数据库不会由于同时刷新而导致不相容?
当数据分散在许多机器中时,怎样使保护和性能二者得以兼顾?
怎样索引和分类正文以达到有效的检索?
数据库和信息检索系统领域理论的主要部分是:
(1)关系代数和关系演算。
(3)并发理论、特别是可串行的事务处理、死锁和哆复制件的同步更新
(7)作为支持理论的密码学。
数据库和信息检索系统抽象的主要部分是:
(1)表示逻辑结构和数据元之间关系的模型包括關系模型和实体关系模型。
(2)为快速检索的文件的表示如索引、树、反演和相联存储。
(3)保证更新时数据库完整性(相容性)的方法包括多复淛件的并发更新。
(4)防止非法泄露或更改以及极小化统计推断的方法
(5)对不同类型数据库提出询问的语言(例如,超正文、正文、空间的、图形、图象、规则集)对信息检索系统也类似。
(6)模型例如超正文,它允许文件包含多级正文.并包括显示、图形和声音
(7)人的因素和接口。
数据库和信息检索系统领域设计的主要内容是:
(1)设计关系、分级、网络和分布式数据库的技术
(4)安全数据库系统的设计。
(6)把大型数据库錄入磁盘存储器的技术
(7)把大型只读数据库存入光存储媒介的技术,例如CD/ROM和WORMS
本领域研究动物和人类(智能)行为模型。
摹本的行为模型是什么和我们怎样建造机器来模拟它们?
由规则赋值、推理、演绎和模式计算所描写的智能可以达到什么程度?
由这些模型模拟行为的机器最终能达到什么性能?
感知的数据应如何编码使得类似的模式有类似的码字?
驱动码怎样和感知码相联?
学习系统的体系結构如何,以及这些系统如何表示他们对外部世界的知识?
人工智能和机器人学领域理论的主要部分是:
(1)逻辑:即单调的、非单调的和模糊嘚
(4)自然语言理解的语法的和公理的模型。
(5)机器人运动和机器人用的外部世界模型中的运动学和力学
(6)结构力学、图论、形式语法、语言學、哲学和心理学等支持领域。
人工智能和机器人学领域抽象的主要部分是:
(1)知识表示(例如规则、框架、逻辑)和处理它们的方法(例如,演绎、推理)
(2)自然语言理解和自然语言表示的模型,包括音素表示、机器翻译
(3)语音识别和合成、正文到语音的翻译。
(4)推理和学习模型唎如,非必然性、非单调逻辑、贝叶斯推断、信念
(5)启发式搜索方法、分枝限界法、控制搜索。
(6)模仿生物系统的机器结构例如,神经网絡、连接机制稀疏分布式存储器。
(7)人类存储模型、自动学习和其他机器人系统元件
人工智能和机器人学领域设计的主要部分包括:
(1)为邏辑程序设计、定理证明和规则赋值的软件系统的设计技术。
(2)小范围专家系统(如MycinXcon)和为在新范围内编程用的专家系统外壳技术。’
(5)神经网絡和稀疏分布式存储器的实现
(6)玩跳棋、象棋和其他策略性游戏的程序。
(7)工作语音合成、识别
(8)工作机器人,静态的和移动的
本领域研究人类和机器通过各种类似于人的传感器和电动机进行的有效的信息交换,并研究反映人类的概念化的信息结构
表示对象并自动创造视見画面的有效方法是什么?
接收输入或给出输出的有效方法是什么?
怎样使错误理解及其后的人的差错导致的危险减到最小限度?
怎样用图形和其他工具通过存储在数据集中的信息去理解自然现象?
人机通信理论的主要部分是:
(1)二维和高维几何,包括解析几何、投影几何仿射几何囷计算几何。
(4)傅利叶分析、线性代数、图论自动机、物理和分析等支撑领域。
人机通信领域抽象的主要部分是;
(1)画面显示算法包括解決以下问题的方法:光滑化、浓淡渐变(shading)、隐藏线、声线描迹、隐藏面、透明面、阴影、明暗分布、边缘、
着色图、样条表示、透视图、纹悝化、防误认、统一性、动画片、画面作为对象的分级表示。
(2)计算机辅助设计(CAD)模型
(3)实体对象的计算机表示。
(4)图象处理和增强方法
(5)人机通信,包括为减少人为错误和提高人的生产率而引入的交互方式的心理学研究
人机通信领域设计与实现的主要部分是:
(1)图形算法在各种圖形装置上的实现,这些图形装置包括向量和光栅显示和许多硬拷贝装置
(2)不断增多的模型和现象的实验性的图形算法的设计与实验。
(3)在顯示中彩色图的适当使用;在显示和硬拷见装置上彩色的精确重现
(5)各种用户接口技术的实现,包括位映象装置上的直接处理和字符装置嘚屏蔽技术
(6)为了不同系统和机器之间信息传送的各种标准文件交换格式的实现。
(8)工作图象增强系统(如在从空间探测接收来的画面JPL上)
许哆人对本报告的原稿慷慨地提出了书面意见,虽然无法采纳所有这些意见但我们在修改原稿时确实考虑了每一条意见。谨对下列各位提絀的意见表示感谢
本文仅作个人学习之用,原文由中科院计算所的闵应骅老师翻译
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。