【光剑极简教程系列】“计算机科学与技术”概述 Computer Science and Technology
计算机科学是什么?
计算机科学,研究计算机及其周围各种现象和规律的科学,亦即研究计算机系统结构、程序系统(即软件)、人工智能以及计算本身的性质和问题的学科。
“软件工程,人工智能,计算机网络与通信,数据库系统,并行计算,分布式计算,人机交互,机器翻译,计算机图形学,操作系统,以及数值和符号计算。。。”
计算机科学是一门包含各种各样与计算和信息处理相关主题的系统学科,从抽象的算法分析、形式化语法等等,到更具体的主题如编程语言、程序设计、软件和硬件等。计算机科学分为理论计算机科学和实验计算机科学两个部分。后者常称为“计算机科学”而不冠以“实验”二字。前者有其他名称,如计算理论、计算机理论、计算机科学基础、计算机科学数学基础等。数学文献中一般指理论计算机科学。
计算机科学的分支
计算机科学包含很多分支领域;有些强调特定结果的计算,比如计算机图形学;而有些是探讨计算问题的性质,比如计算复杂性理论;还有一些领域专注于怎样实现计算,比如编程语言理论是研究描述计算的方法,而程序设计是应用特定的编程语言解决特定的计算问题,人机交互则是专注于怎样使计算机和计算变得有用、好用,以及随时随地为人所用。
什么是计算机?
计算机是一种进行算术和逻辑运算的机器,而且对于由若干台计算机联成的系统而言还有通信问题,并且处理的对象都是信息,因而也可以说,计算机科学是研究信息处理的科学。计算机科学分为理论计算机科学和实验计算机科学两个部分。在数学文献中所说的计算机科学,一般是指理论计算机科学。实验计算机科学还包括有关开辟计算机新的应用领域的研究。
计算机科学的基础
计算机科学的大部分研究是基于“冯·诺依曼计算机”和“图灵机”的,它们是绝大多数实际机器的计算模型。作为此模型的开山鼻祖,邱奇-图灵论题(Church-Turing Thesis)表明,尽管在计算的时间,空间效率上可能有所差异,现有的各种计算设备在计算的能力上是等同的。尽管这个理论通常被认为是计算机科学的基础,可是科学家也研究其它种类的机器,如在实际层面上的并行计算机和在理论层面上概率计算机、oracle 计算机和量子计算机。在这个意义上来讲,计算机只是一种计算的工具。
著名的计算机科学家 Dijkstra 有一句名言:
“计算机科学之关注于计算机并不甚于天文学之关注于望远镜。”。
关于计算思维
科学思维能力、怎样设计计算解决方案?如何具备数字化、算法、模块化与层次化思维?
工程技术与信息技术?
组织管理能力、表达能力、独立工作能力、人际交往能力和团队合作能力?
人文社会科学可以帮助我们在从事工程设计时考虑经济、环境、法律、伦理等各种制约因素。
数学和自然科学可以帮助我们更好地表述工程问题;选择恰当数学模型和进行分析推理的能力。
科学领域 作为一个学科,计算机科学涵盖了从算法的理论研究和计算的极限,到如何通过硬件和软件实现计算系统。CSAB(以前被叫做Computing Sciences Accreditation Board),由Association for Computing Machinery(ACM)和IEEE Computer Society(IEEE-CS)的代表组成,确立了计算机科学学科的4个主要领域:计算理论,算法与数据结构,编程方法与编程语言,以及计算机元素与架构。CSAB还确立了其它一些重要领域,如软件工程,人工智能,计算机网络与通信,数据库系统,并行计算,分布式计算,人机交互,机器翻译,计算机图形学,操作系统,以及数值和符号计算。[1] 理论计算机 主条目:理论计算机科学 广义的理论计算机科学包括经典的计算理论和其它专注于更抽象、逻辑与数学方面的计算。[1] 计算理论 主条目:计算理论 按照Peter J. Denning的说法,计算机科学的最根本问题是“什么能够被有效地自动化?”计算理论的研究就是专注于回答这个根本问题,关于什么能够被计算,去实施这些计算又需要用到多少资源。为了试图回答第一个问题,递归论检验在多种理论计算模型中哪个计算问题是可解的。而计算复杂性理论则被用于回答第二个问题,研究解决一个不同目的的计算问题的时间与空间消耗。[1] 著名的“P=NP?”问题,千禧年大奖难题之一,是计算理论的一个开放问题。 信息编码论 主条目:信息论和编码理论 信息论与信息量化相关,由Claude E. Shannon创建,用于寻找信号处理操作的根本极限,比如压缩数据和可靠的数据存储与通讯。编码理论是对编码以及它们适用的特定应用性质的研究。编码(code)被用于数据压缩,密码学,前向纠错,也被用于网络编码。研究编码的目的在于设计更高效、可靠的数据传输方法。[1] 算法 算法指定义良好的计算过程,它取一个或一组值作为输入,经过一系列定义好的计算过程,得到一个或一组输出。算法是计算机科学研究的一个重要领域,也是许多其他计算机科学技术的基础。算法主要包括数据结构、计算几何、图论等。除此之外,算法还包括许多杂项,如模式匹配、部分数论等。[1] 程序设计理论 主条目:程序设计语言理论 程序设计语言理论是计算机科学的一个分支,主要处理程序设计语言的设计、实现、分析、描述和分类,以及它们的个体特性。它属于计算机科学学科,既受影响于也影响着数学、软件工程和语言学。它是公认的计算机科学分支,同时也是活跃的研究领域,研究成果被发表在众多学术期刊,计算机科学以及工程出版物。[1] 形式化方法 主条目:形式化方法 形式化方法是一种特别的基于数学的技术,用于软件和硬件系统的形式规范、开发以及形式验证。在软件和硬件设计方面,形式化方法的使用动机,如同其它工程学科,是通过适当的数学分析便有助于设计的可靠性和健壮性的期望。但是,使用形式化方法会带来很高的成本,意味着它们通常只用于高可靠性系统,这种系统中安全或保安(security)是最重要的。对于形式化方法的最佳形容是各种理论计算机科学基础种类的应用,特别是计算机逻辑演算,形式语言,自动机理论和形式语义学,此外还有类型系统、代数数据类型,以及软件和硬件规范和验证中的一些问题。[1] 并发,并行和分布式系统 主条目:并行性和分布式计算 并行性(concurrency)是系统的一种性质,这类系统可以同时执行多个可能互相交互的计算。一些数学模型,如Petri网、进程演算和PRAM模型,被创建以用于通用并发计算。分布式系统将并行性的思想扩展到了多台由网络连接的计算机。同一分布式系统中的计算机拥有自己的私有内存,它们之间经常交换信息以达到一个共同的目的。[1] 数据库和信息检索 主条目:数据库和数据库管理系统 数据库是为了更容易地组织、存储和检索大量数据。数据库由数据库管理系统管理,通过数据库模型和查询语言来存储、创建、维护和搜索数据。[1] 应用计算机科学 尽管计算机科学(computer science)的名字里包含计算机这几个字,但实际上计算机科学相当数量的领域都不涉及计算机本身的研究。因此,一些新的名字被提议出来。某些重点大学的院系倾向于术语计算科学(computing science),以精确强调两者之间的不同。丹麦科学家Peter Naur建议使用术语"datalogy",以反映这一事实,即科学学科是围绕着数据和数据处理,而不一定要涉及计算机。第一个使用这个术语的科学机构是哥本哈根大学Datalogy学院,该学院成立于1969年,Peter Naur便是第一任教授。这个术语主要被用于北欧国家。同时,在计算技术发展初期,《ACM通讯》建议了一些针对计算领域从业人员的术语:turingineer,turologist,flow-charts-man,applied meta-mathematician及applied epistemologist。 三个月后在同样的期刊上,comptologist被提出,第二年又变成了hypologist。术语computics也曾经被提议过。在欧洲大陆,起源于信息(information)和数学或者自动(automatic)的名字比起源于计算机或者计算(computation)更常见,如informatique(法语),Informatik(德语),informatika(斯拉夫语族)。[1] 著名计算机科学家Edsger Dijkstra曾经指出:“计算机科学并不只是关于计算机,就像天文学并不只是关于望远镜一样。”("Computer science is no more about computers than astronomy is about telescopes.")设计、部署计算机和计算机系统通常被认为是非计算机科学学科的领域。例如,研究计算机硬件被看作是计算机工程的一部分,而对于商业计算机系统的研究和部署被称为信息技术或者信息系统。然而,现如今也越来越多地融合了各类计算机相关学科的思想。计算机科学研究也经常与其它学科交叉,比如心理学,认知科学,语言学,数学,物理学,统计学和经济学。[1] 计算机科学被认为比其它科学学科与数学的联系更加密切,一些观察者说计算就是一门数学科学。早期计算机科学受数学研究成果的影响很大,如Kurt Gödel和Alan Turing,这两个领域在某些学科,例如数理逻辑、范畴论、域理论和代数,也不断有有益的思想交流。[1] 计算机科学和软件工程的关系是一个有争议的话题,随后关于什么是“软件工程”,计算机科学又该如何定义的争论使得情况更加混乱。David Parnas从其它工程和科学学科之间的关系得到启示,宣称计算机科学的主要重点总的来说是研究计算的性质,而软件工程的主要重点是具体的计算设计,以达到实用的目的,这样便构成了两个独立但又互补的学科。[1] 人工智能 主条目:人工智能 这个计算机科学分支旨在创造可以解决计算问题,以及像动物和人类一样思考与交流的人造系统。无论是在理论还是应用上,都要求研究者在多个学科领域具备细致的、综合的专长,比如应用数学,逻辑,符号学,电机工程学,精神哲学,神经生理学和社会智力,用于推动智能研究领域,或者被应用到其它需要计算理解与建模的学科领域,如金融或是物理科学。人工智能领域开始变得正式源于Alan Turing这位人工智能先驱提出了图灵试验,以回答这样一个终极问题:“计算机能够思考吗?”[1] 机器翻译 主条目:机器翻译 1947年,美国数学家、工程师沃伦·韦弗与英国物理学家、工程师安德鲁·布思提出了以计算机进行翻译(简称“机译”)的设想,机器翻译从此步入历史舞台,并走过了一条曲折而漫长的发展道路。机译被列为21世纪世界十大科技难题。与此同时,机译技术也拥有巨大的应用需求。[1] 机译消除了不同文字和语言间的隔阂,堪称高科技造福人类之举。但机译的译文质量长期以来一直是个问题,离理想目标仍相差甚远。中国数学家、语言学家周海中教授认为,在人类尚未明了大脑是如何进行语言的模糊识别和逻辑判断的情况下,机译要想达到“信、达、雅”的程度是不可能的。这一观点恐怕道出了制约译文质量的瓶颈所在。[2] 计算机体系结构与工程 主条目:计算机体系结构和计算机工程 计算机系统结构,或者数字计算机组织,是一个计算机系统的概念设计和根本运作结构。它主要侧重于CPU的内部执行和内存访问地址。这个领域经常涉及计算机工程和电子工程学科,选择和互连硬件组件以创造满足功能、性能和成本目标的计算机。[1] 计算机图形与视觉 主条目:计算机图形学 计算机图形学是对于数字视觉内容的研究,涉及图像数据的合成和操作。它跟计算机科学的许多其它领域密切相关,包括计算机视觉、图像处理和计算几何,同时也被大量运用在特效和电子游戏。[1] 计算机安全和密码学 主条目:计算机安全和密码学 计算机安全是计算机技术的一个分支,其目标包括保护信息免受未经授权的访问、中断和修改,同时为系统的预期用户保持系统的可访问性和可用性。密码学是对于隐藏(加密)和破译(解密)信息的实践与研究。现代密码学主要跟计算机科学相关,很多加密和解密算法都是基于它们的计算复杂性。[1] 计算科学 计算科学(或者科学计算)是关注构建数学模型和量化分析技术的研究领域,同时通过计算机分析和解决科学问题。在实际使用中,它通常是计算机模拟和计算等形式在各个科学学科问题中的应用。[1] 信息科学 主条目:信息科学 软件工程 主条目:软件工程 软件工程是对于设计、实现和修改软件的研究,以确保软件的高质量、适中的价格、可维护性,以及能够快速构建。它是一个系统的软件设计方法,涉及工程实践到软件的应用。[1]
理论课程 通识类知识 通识类知识包括人文社会科学类、数学和自然科学类两部分。人文社会科学类知识包括经济、环境、法律、伦理等基本内容。 数学和自然科学类知识包括高等工程数学、概率论与数理统计、离散结构、力学、电磁学、光学与现代物理的基本内容。 学科基础知识 学科基础知识被视为专业类基础知识,培养学生计算思维、程序设计与实现、算法分析与设计、系统能力等专业基本能力,能够解决实际问题。 建议教学内容覆盖以下知识领域的核心内容:程序设计、数据结构、计算机组成、操作系统、计算机网络、信息管理,包括核心概念、基本原理以及相关的基本技术和方法,并让学生了解学科发展历史和现状。 专业知识 培养学生将基本原理与技术运用于计算学科研究以及计算系统设计、开发与应用等工作的能力。建议教学内容包含数字电路、计算机系统结构、算法、程序设计语言、软件工程、并行分布计算、智能技术、计算机图形学与人机交互等知识领域的基本内容。 课程体系必须支持各项毕业要求的有效达成,进而保证专业培养目标的有效实现。核心课程体系示例(括号内数字为建议学时数) 示例一:高级语言程序设计(72)、集合论与图论(48)、近世代数(32)、数理逻辑(32)、形式语言与自动机(32)、电子技术基础(48)、数字逻辑设计(48)、数据结构与算法(64)、计算机组成原理(72)、软件工程(64)、数据库系统(64)、操作系统(64)、计算机网络(56)、编译原理(64)、计算机体系结构(48)。 示例二:计算概论(16)、程序设计基础(80)、集合论与数理逻辑(48)、图论与组合数学(48)、代数结构与初等数论(48)、数据结构(80)、操作系统(64)、计算机组成原理(80)、数字逻辑与数字电路(64)、计算机网络(64)、编译原理(64)、数据库原理(64)、算法设计与分析(56)、人工智能(48)、计算机图形学(40)。 示例三:高级语言程序设计(56)、数据结构与算法(64)、电路与电子技术(96)、集合论与图论(48)、代数与逻辑(48)、数字逻辑(48)、计算机组成原理(64)、操作系统原理(64)、数据库原理(56)、编译原理(56)、软件工程(40)、计算机网络(56)。
实践教学 具有满足教学需要的完备实践教学体系。主要包括实验课程、课程设计、实习、毕业设计(论文),4年总的实验当量不少于2万行代码。开展科技创新、社会实践等多种形式的实践活动,到各类工程单位实习或工作,取得工程经验,基本了解行业状况。 实验课程 包括软、硬件及系统实验。 课程设计 至少完成2个有一定规模和复杂度的系统的设计与开发。 实习 建立相对稳定的实习基地,使学生认识和参与生产实践。 毕业设计(论文)
参考资料
[1] [美] 戴尔,[美] 刘易斯 著; 张欣,等 译.计算机科学概论(原书第3版) .机械工业出版社.2009-01-31 [2] 计算机翻译技不如人 谷歌机译处于领先地位.新华网.2012-11-15 [引用日期2014-08-02]