1.2.2 计算机科学知识体系
作为一个学科,计算机科学涵盖了从算法的理论研究到计算的极限、从硬件的升级到如何设计软件实现计算系统等多个分支领域:有些领域强调特定结果的计算,比如计算机图形学;而有些是探讨计算问题的性质,如计算复杂性理论;还有一些领域专注于怎样实现计算,比如编程语言理论和程序设计等。由计算机协会(Association for Computing Machinery,ACM)和电气电子工程师学会计算机分会(Institute of Electrical and Electronics Engineers Computer Society, IEEE-CS)代表组成的计算机科学认证委员会(Computing Sciences Accreditation Board,CSAB)确立了计算机科学学科的4个主要领域:计算理论、算法与数据结构、编程方法与编程语言,以及计算机元素与架构。CSAB还确立了其他一些重要领域,详细的计算机科学知识体系见表1-1,下面对每个知识领域进行简要介绍。
表1-1 计算机科学知识体系
1.离散结构
离散结构包括集合论、逻辑学、图论和组合数学等内容,是计算机科学的基础内容,计算机科学许多领域都用到了离散结构中的概念,例如数据结构和算法分析与设计中含有大量离散结构的内容。
2.程序设计基础
程序设计基础包括基本的程序设计概念和程序的设计、运行、调试技巧等内容,这一领域也包括了算法与数据结构、程序设计语言等领域的基础知识。通过对这一领域的学习,能使计算机初学者掌握利用程序解决问题的基本方法,对计算机学科的专业知识有很好的整体上的覆盖。
3.算法与复杂性
算法与复杂性包括算法设计原则、对实际问题的分析方法、算法设计方法和算法时间和空间复杂度分析方法等内容,是程序设计和软件工程等领域的基础,良好设计的算法能使计算机程序的性能大幅度提升。
4.计算机组织与体系结构
计算机组织与体系结构包括计算机硬件组成、数字逻辑、数据的机器级表示、存储系统、计算机功能组织等内容,主要是在靠近底层数据的角度理解计算机的运行原理、在硬件角度理解计算机的构成。
5.操作系统
操作系统包括操作系统原理、并发性、调度与分派、内存管理、设备管理、安全与保护、文件系统等内容。操作系统是硬件的抽象,用户通过操作系统来控制计算机硬件和计算机资源的分配。操作系统中的许多思想可以应用到计算机科学的其他领域,如并发的程序设计、算法设计等。
6.网络与通信
网络与通信包括计算机网络发展、网络层次模型、网络通信、网络安全等内容,计算机和远程通信网络尤其是TCP/IP网络的发展,使得网络技术变得十分重要。计算机逐步向网络化发展,计算机网络的应用也越来越深入人们的生活之中,对这个领域的学习是十分重要与必要的。
7.程序设计语言
程序设计语言是设计计算机程序的工具,是程序员与计算机之间对话的“媒介”。这一部分的学习主要是掌握通过一种程序设计语言编写程序的方法和技巧,进而在此基础上了解其他的程序设计语言的使用方法。
8.人机交互
人机交互是一门研究系统与用户之间的交互关系的计算机科学分支学科。系统可以是各种各样的机器,也可以是计算机化的系统和软件。人机交互界面通常是指用户可见的部分。用户通过人机交互界面与系统交流,并进行操作,通过良好设计的界面可以增强用户的使用体验。
9.图形学和可视化计算
计算机图形学和可视化计算可以划分为计算机图形学、可视化技术、虚拟现实技术及计算机视觉这4个相互关联的领域。这一领域研究的是计算机通过图形和用户的视觉感官进行信息传递的学科,可以增强用户对信息的理解。
10.智能系统
智能系统包括人工智能、自然语言处理技术、机器学习、神经网络等内容,智能系统不仅可自组织与自适应地在传统的诺依曼的计算机上运行,而且也可自组织与自适应地在新一代的非诺依曼结构的计算机上运行。
11.信息管理
信息管理包括数据库系统、数据库查询语言、关系数据库、数据仓库和数据挖掘等内容。这一领域研究的重点是信息的获取、数字化、表示、组织等内容,也包括数据模型化、数据抽象、物理文件存储技术,以及信息完整性、安全性和共享环境下的信息保护等重要内容。
12.社会和职业问题
社会和职业问题包括计算机科学与社会的相互影响、计算机系统的风险和责任、知识产权保护、隐私问题、职业责任和道德、计算机犯罪等社会性问题。由于计算机对人类社会的影响是如此之巨大,计算机科学的发展所带来的社会问题也是严峻的,每一个计算机科学专业的相关人员都应明确自己的责任和义务。
13.软件工程
软件工程包括软件需求分析、软件设计、软件项目管理、软件开发方法等内容。随着软件规模的不断增大,开发软件变得越来越困难,需要用工程学的角度对软件开发的各个阶段进行控制,以确保软件产品的质量。这一领域也包括对软件开发、测试、控制相关的工具的了解和学习。
14.数值计算科学
数值计算科学包括数值分析、运筹学、建模与模拟、高性能计算等内容。数值方法和科学计算是早期计算机科学的一个重要部分,随着计算机解决问题能力的增强,这一领域变得更为重要。
扩展阅读:计算机协会ACM
计算机协会ACM是一个世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。ACM 每年都出版大量计算机科学的专门期刊,并就每项专业设有兴趣小组。兴趣小组每年亦会在全世界(主要在美国)举办世界性讲座及会谈,以供各会员分享他们的研究成果。近年ACM积极开拓网上学习的渠道,以供会员在工作之余或家中提升自己的专业技能。截至20世纪末,ACM在全球拥有75 000个以上的成员,包括遍及学术界、工业、研究和政府领域的学生和计算机专业人员。成员的最高荣誉是会士(Fellow)。
ACM通过它的35个特别兴趣组(Special Interest Group,SIG)提供特殊的技术信息和服务。这些特别兴趣组集中于计算机学科的多种专业,如计算机系统结构专业组(computer architecture,SIGARCH)和计算机图形与互动技术专业组(computer graphics and interactive techniques, SIGGRAPH)。这些特别兴趣组中有不少是跨学科的,适合计算机行业以外的人员。例如有不少艺术家参与到图形互动小组中。
ACM 通过支持全球700个以上的专业和学生组织,为当地和地区团体提供服务。其中约有20%不在美国境内。这些组织为专业人士提供服务,搜集信息,准备讲座,组织研讨会和竞赛。ACM主要成员刊物是Communications of the ACM,刊有一些广泛兴趣的文章,并对每月不同的热点问题展开讨论。ACM 也出版了不少获得业内认可的期刊,这些期刊覆盖了计算机领域相当广泛的领域。ACM 主办了8个主要奖项,来表彰计算机领域的技术和专业成就。最高奖项为图灵奖(Turing Award),常被形容为计算机领域的诺贝尔奖。