计算机科学

计算机科学（computer science，缩写为CS）是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究。计算机科学包含很多分支领域；有些强调特定结果的计算，比如计算机图形学；而有些是探讨计算问题的性质，比如计算复杂性理论；还有一些领域专注于怎样实现计算，比如程式语言理论是研究描述计算的方法，而程式设计是应用特定的程式语言解决特定的计算问题，人机交互则是专注于怎样使计算机和计算变得有用、好用，以及随时随地为人所用。

有时公众会误以为计算机科学就是解决计算机问题的事业（比如信息技术），或者只是与使用计算机的经验有关，如玩游戏、上网或者文字处理。其实计算机科学所关注的，不仅仅是去理解实现类似游戏、浏览器这些软件的程序的性质，更要通过现有的知识创造新的程序或者改进已有的程序。

尽管计算机科学（computer science）的名字里包含计算机这几个字，但实际上计算机科学相当数量的领域都不涉及计算机本身的研究。因此，一些新的名字被提议出来。某些重点大学的院系倾向于术语计算科学（computing science），以精确强调两者之间的不同。丹麦科学家彼得·诺尔建议使用术语datalogy，以反映这一事实，即科学学科是围绕着数据和数据处理，而不一定要涉及计算机。第一个使用这个术语的科学机构是Q5260205，该学院成立于1969年，彼得·诺尔便是第一任教授。这个术语主要被用于北欧国家。同时，在计算技术发展初期，《ACM通讯》建议了一些针对计算领域从业人员的术语：图灵工程师（turingineer）、turologist、流程图人（flow-charts-man）、应用元数学家（applied meta-mathematician）及应用认识论者（applied epistemologist）。三个月后在同样的期刊上，comptologist被提出，第二年又变成了hypologist。术语computics也曾经被提议过。在欧洲大陆，起源于信息（information）和数学或者自动（automatic）的名字比起源于计算机或者计算（computation）更常见，如informatique（法语），Informatik（德语），informatika（斯拉夫语族）。

著名计算机科学家艾兹赫尔·戴克斯特拉曾经指出：“计算机科学并不只是关于计算机，就像天文学并不只是关于望远镜一样。”（Computer science is no more about computers than astronomy is about telescopes.）设计、部署计算机和计算机系统通常被认为是非计算机科学学科的领域。例如，研究计算机硬件被看作是计算机工程的一部分，而对于商业计算机系统的研究和部署被称为信息技术或者信息系统。然而，现如今也越来越多地融合了各类计算机相关学科的思想。计算机科学研究也经常与其它学科交叉，比如数学、工程学、认知科学和经济学等。

计算机科学被认为比其它科学学科与数学的联系更加密切，一些观察者说计算就是一门数学科学。早期计算机科学受数学研究成果的影响很大，如库尔特·哥德尔、艾伦·图灵、路莎·彼得，阿隆佐·邱奇等数学家的研究，这两个领域在某些学科，例如数理逻辑、范畴论、域理论和代数，也不断有有益的思想交流。

## 历史

早期计算机科学建立的基础得追溯到最近电子计算机的发明。那些计算固定数值任务的机器，比如算盘，自古希腊时期即已存在，而用于加快计算的算法更是在算盘等古老的计算仪器发明之前就已被广泛使用。

Wilhelm Schickard在1623年设计了世界上第一台机械计算器，但没有完成它的建造。布莱兹·帕斯卡在1642年设计并且建造了世界上第一台可以工作的机械计算器Pascaline。1673年，莱布尼兹开始了步进计算器的建造工作并于1694年竣工，他也因为记录了二进制系统而被认为是第一个计算机科学家和信息理论家。埃达·洛夫莱斯协助查尔斯·巴贝奇在维多利亚时代设计了差分机。1900年左右，打孔机问世。然而以上这些机器都局限在只能完成单个任务，或者充其量是所有可能任务的子集。

到了20世纪40年代，随着更新更强大的计算机器(如ABC计算机、电子数值积分计算机)被发明，术语“计算机”开始用于指代那些机器而不是它们的祖先。计算机的概念变得更加清晰，它不仅仅用于数学运算，总的来说计算机科学的领域也扩展到了对于计算的研究。20世纪50年代至20世纪60年代早期，计算机科学开始被确立为不同种类的学术学科。世界上第一个计算机科学学位点由普渡大学在1962年设立。随着实用计算机的出现，很多计算的应用都以它们自己的方式逐渐转变成了研究的不同领域。

虽然最初很多人并不相信计算机可能成为科学研究的领域，但是随后的50年里也逐渐被学术界认可。IBM公司是那段时期计算机科学革命的参与者之一。在那段探索时期，IBM（International Business Machines的缩写）发布的IBM 704以及之后的IBM 709计算机被广泛使用。“不过，使用IBM电脑工作仍然是一件很沮丧的事情。如果你弄错了一条指令中的一个字母，程序将会崩溃，而你也得从头再来。”20世纪50年代后期，计算机科学学科还在发展阶段，这种问题在当时是一件很常见的事情。

随着时间的推移，计算机科学技术在可用性和有效性上都有显著提升。现代社会见证了计算机从仅仅由专业人士使用到被广大用户接受的重大转变。最初，计算机非常昂贵，要有效利用它们，某种程度上必须得由专业的计算机操作员来完成。然而，随着计算机变得普及和低廉，已经几乎不需要专人的协助，虽然某些时候援助依旧存在。

### 主要成就

<image>

虽然计算机科学被认定为一门正规学科的历史很短暂，但它对科学和社会做出了许多根本性的贡献ー事实上，计算机科学与电子学一样，是信息时代的奠基科学，也是资讯革命的驱动力，被视为继工业革命（公元1750-1850年）和新石器革命（公元前8000-5000年）之后人类技术进步的第三次重大飞跃。

这些贡献包括：

- 开启“数字化革命”，包括当今的信息时代和互联网。
- 对计算和可计算性的形式定义，证明了存在计算上不可解及难解型问题。
- 提出程式语言的概念，作为一种使用不同的抽象层次来精确表达处理程序的工具。
- 在密码学领域，恩尼格玛密码机的破译被视为盟军在二战取得胜利的重要因素。
- 科学计算让分析实际中非常复杂的过程和场景成为可能，可以完全借助软件来进行一些实验。同时也实现了对人类思想的深入研究，使得人类基因组计划绘制人类基因成为可能。还有探索蛋白质折叠的分布式计算项目Folding@home。
- 算法交易通过使用人工智能、机器学习和其他大规模的统计和数值方法，提高了金融市场的效率和流通性。高频率的算法交易也会加快波动性。
- 计算机图形和电脑成像（CGI）在现代娱乐中无处不在，尤其是在电视、电影、广告、动画和视频游戏中。即便是没有用到CGI技术的电影，通常也是用数码相机拍摄，或者使用数字视频编辑器剪辑或后期处理过的。
- 仿真各种过程，包括计算流体动力学、物理、电气和电子系统和电路，以及同人类居住地联系在一起的社会和社会形态（尤其是战争游戏，war games）。现代计算机能够对这些设计进行优化，如飞机设计。尤其在电气与电子电路设计中，SPICE软件对新的物理实现（或修改）设计具有很大帮助。它包含了针对集成电路的基本设计软件。
- 人工智能变得越来越重要，因为它变得更加高效和复杂。人工智能的应用有很多，其中一些可以在家里看到，比如机器人吸尘器。它也出现在视频游戏和现代战场上的无人机、反导弹系统和步兵班组支援系统中。
- 人机交互将新颖的算法与设计策略相结合，可实现快速的人类绩效，低错误率，易于学习和高度满意度。研究人员利用人种学观察和自动化数据收集来了解用户需求，然后进行可用性测试来完善设计。关键的创新包括直接操纵、可选择的网页链接、触摸屏设计、移动应用程序和虚拟现实。

## 哲学

Peter Wegner提出计算机科学可以分成三个领域：数学、工程学、科学。Amnon H. Eden提议了三种范式应用于计算机科学的各个领域：

- “理性主义范式”，将计算机科学看作是数学的分支，在理论计算机科学中很流行，主要利用演绎推理。
- “技术专家范式”，这类范式有着很明显的工程学倾向，尤其是在软件工程领域。
- “科学范式”，人工智能的某些分支可以作为这类范式的代表（比如说对于人工生命的研究）。

## 领域

作为一个学科，计算机科学涵盖了从算法的理论研究和计算的极限，到如何通过硬件和软件实现计算系统。CSAB（以前被叫做Computing Sciences Accreditation Board），由Association for Computing Machinery（ACM）和IEEE计算机协会（IEEE-CS）的代表组成，确立了计算机科学学科的4个主要领域：计算理论，算法与数据结构，编程方法与编程语言，以及计算机组成与架构。CSAB还确立了其它一些重要领域，如软件工程，人工智能，计算机网络与通信，数据库系统，并行计算，分布式计算，人机交互，计算机图形学，操作系统，以及数值和符号计算。

### 理论电脑科学

广义的理论计算机科学包括经典的计算理论和其它专注于更抽象、逻辑与数学方面的计算。

#### 数据结构和算法

$O(n^2)$｜

<image>

｜

<image>

｜

<image>

｜

<image>

算法分析｜算法｜数据结构｜计算几何｜图论

算法指定义良好的计算过程，它取一个或一组值作为输入，经过一系列定义好的计算过程，得到一个或一组输出。算法是计算机科学研究的一个重要领域，也是许多其他计算机科学技术的基础。算法主要包括数据结构、计算几何、图论等。除此之外，算法还包括许多杂项，如模式匹配、部分数论等。

#### 计算理论

按照Peter J. Denning的说法，计算机科学的最根本问题是“什么能够被有效地自动化？”计算理论的研究就是专注于回答这个根本问题，关于什么能够被计算，去实施这些计算又需要用到多少资源。为了试图回答第一个问题，递归论检验在多种理论计算模型中哪个计算问题是可解的。而计算复杂性理论则被用于回答第二个问题，研究解决一个不同目的的计算问题的时间与空间消耗。

著名的“P=NP?”问题，千禧年大奖难题之一，是计算理论的一个开放问题。

<image>

｜

<image>

｜P = NP ?｜GNITIRW-TERCES｜

<image>

自动机理论｜递归论｜计算复杂性理论｜密码学｜量子计算论

#### 信息论与编码理论

信息论与信息量化相关，由克劳德·香农创建，用于寻找信号处理操作的根本极限，比如压缩数据和可靠的数据存储与通讯。编码理论是对编码以及它们适用的特定应用性质的研究。编码（code）被用于数据压缩，密码学，前向纠错，近期也被用于网络编码。研究编码的目的在于设计更高效、可靠的数据传输方法。

#### 编程语言和编译器

编程语言理论是计算机科学的一个分支，主要处理编程语言的设计、实现、分析、描述和分类，以及它们的个体特性。它属于计算机科学学科，既受影响于也影响着数学、软件工程和语言学。它是公认的计算机科学分支，同时也是活跃的研究领域，研究成果被发表在众多学术期刊，计算机科学以及工程出版物。

$\Gamma\vdash x: \text{Int}$｜

<image>

｜

<image>

类型论｜编译器设计｜程序设计语言

#### 形式化方法

形式化方法是一种特别的基于数学的技术，用于软件和硬件系统的形式规范、开发以及验证。在软件和硬件设计方面，形式化方法的使用动机，如同其它工程学科，是通过适当的数学分析便有助于设计的可靠性和健壮性的期望。但是，使用形式化方法会带来很高的成本，意味着它们通常只用于高可靠性系统，这种系统中安全或保安（security）是最重要的。对于形式化方法的最佳形容是各种理论计算机科学基础种类的应用，特别是计算机逻辑演算，形式语言，自动机理论和形式语义学，此外还有类型系统、代数数据类型，以及软件和硬件规范和验证中的一些问题。

### 计算机系统

#### 计算机体系结构与计算机工程

计算机系统结构，或者数字计算机组织，是一个计算机系统的概念设计和根本运作结构。它主要侧重于CPU的内部执行和内存访问地址。这个领域经常涉及计算机工程和电子工程学科，选择和互连硬件组件以创造满足功能、性能和成本目标的计算机。

<image>

｜

<image>

｜

<image>

数字电路｜微架构｜多处理机

#### 操作系统

操作系统是管理电脑硬件与软件资源的电脑程式，同时也是电脑系统的核心与基石。作业系统需要处理如管理与配置记忆体、决定系统资源供需的优先次序、控制输入与输出装置、操作网路与管理档案系统等基本事务。作业系统也提供一个让使用者与各电脑设备互动的操作界面。

#### 并发、并行与分布式系统

并发性（concurrency）是系统的一种性质，这类系统可以同时执行多个可能互相交互的计算。一些数学模型，如Petri网、进程演算和PRAM模型，被建立以用于通用并发计算。分布式系统将并发性的思想扩展到了多台由网络连接的计算机。同一分布式系统中的计算机拥有自己的私有内存，它们之间经常交换信息以达到一个共同的目的。

#### 计算机网络

计算机网络是管理遍及全球的计算机连接成的网络的计算机科学分支。

#### 计算机安全和密码学

计算机安全是计算机技术的一个分支，其目标包括保护信息免受未经授权的访问、中断和修改，同时为系统的预期用户保持系统的可访问性和可用性。密码学是对于隐藏（加密）和破译（解密）信息的实践与研究。现代密码学主要跟计算机科学相关，很多加密和解密算法都是基于它们的计算复杂性。

#### 数据库

数据库是为了更容易地组织、存储和检索大量数据。数据库由数据库管理系统管理，通过数据模型和查询语言来存储、创建、维护和搜索数据。

### 计算机应用技术

#### 计算机图形学

计算机图形学是对于数字视觉内容的研究，涉及图像数据的合成和操作。它跟计算机科学的许多其它领域密切相关，包括计算机视觉、图像处理、计算几何与可视化，同时也被大量运用在特效和电子游戏。

#### 科学计算

科学计算（或者计算科学）是关注构建数学模型和量化分析技术的研究领域，同时通过计算机分析和解决科学问题。在实际使用中，它通常是计算机模拟和计算等形式在各个科学学科问题中的应用。

<image>

｜

<image>

｜

<image>

｜

<image>

数值分析｜计算物理学｜计算化学｜生物信息学

#### 多媒体技术

多媒体技术是指通过计算机对文字、数据、图形、图像、动画、声音等多种媒体信息进行综合处理和管理，使用户可以通过多种感官与计算机进行实时信息交互的技术，又称为计算机多媒体技术。

#### 人工智能

这个计算机科学分支旨在创造可以解决计算问题，以及像动物和人类一样思考与交流的人造系统。无论是在理论还是应用上，都要求研究者在多个学科领域具备细致的、综合的专长，比如应用数学，逻辑，符号学，电机工程学，精神哲学，神经生理学和社会智力，用于推动智能研究领域，或者被应用到其它需要计算理解与建模的学科领域，如金融或是物理科学。人工智能领域开始变得正式源于Alan Turing这位人工智能先驱提出了图灵试验，以回答这样一个终极问题：“计算机能够思考吗？”

<image>

｜

<image>

｜

<image>

机器学习｜计算机视觉｜图像处理

<image>

｜

<image>

｜

<image>

模式识别｜数据挖掘｜演化计算

<image>

｜

<image>

｜

<image>

知识表示和自动推理｜自然语言处理｜机器人学

### 软件工程

软件工程是对于设计、实现和修改软件的研究，以确保软件的高质量、适中的价格、可维护性，以及能够快速构建。它是一个系统的软件设计方法，涉及工程实践到软件的应用。

计算机科学和软件工程的关系是一个有争议的话题，随后关于什么是“软件工程”，计算机科学又该如何定义的争论使得情况更加混乱。David Parnas从其它工程和科学学科之间的关系得到启示，宣称计算机科学的主要重点总的来说是研究计算的性质，而软件工程的主要重点是具体的计算设计，以达到实用的目的，这样便构成了两个独立但又互补的学科。

## 学术界

### 会议

SIGIR(Special Interest Group on Information Retrieval)

KDD(Knowledge Discovery and Data Mining)

AAAI(the Association for the Advance of Artificial Intelligence)

ACL(Annual Meeting of the Association for Computational Linguistics)

NAACL(The North American Chapter of the Association for Computational Linguistics) 其为ACL的北美分会

EMNLP(Conference on Empirical Methods in Natural Language Processing)

IJCAI( International Joint Conference on Artificial Intelligence)

## 作为高等教育的二级专业

<image>

一些教授计算机科学的大学主要进行计算和算法推理的研究。其中包括计算理论、算法分析、形式化方法、并行理论、数据库、计算机图形学以及系统分析等。通常也教授程序设计，但仅仅将它看作是支持计算机科学其它领域的媒介，而不是高级研究的重心。

其它一些学院、大学、中学以及职业培训的计算机科学课程则主要侧重于训练高级编程，而不是算法和计算理论。这些课程着重教授那些对于软件工业很重要的技能。像这样的计算机编程过程通常被叫做软件工程。

然而，尽管计算机科学专业日益推动着美国经济，但是计算机科学教育依然不存在大多数美国K-12课程中。2010年10月由 ACM和 计算机科学教师协会（CSTA）共同发表了一篇名为 “Running on Empty: The Failure to Teach K-12 Computer Science in the Digital Age”的报告，文中揭示了仅有14个州通过了有意义的高中计算机科学教育标准。同时，仅有9个州将高中计算机科学课程算作毕业要求的核心学科。配合“Running on Empty”这篇文章，一个新的无党派宣传联盟： Computing in the Core（CinC）被建立，以影响联邦和政府政策，比如 Computer Science Education Act要求政府拨款以制定计划完善计算机科学教育及支持计算机科学教师。

在中国，“计算机科学”或“计算机科学与技术”是工科（一级门类）下的二级专业。一般可细分为三级专业：

- 计算机软件：围绕着软件开发、软件工程、编程语言等
- 计算机应用：计算机的各种应用算法、技术。如：模式识别、计算视觉、计算机图形学等等。
- 计算机体系结构：关于计算机或计算机信息系统的“硬件”。

## 外部链接

- Computers/Computer_Science/
- Scholarly Societies in Computer Science
- Best Papers Awards in Computer Science since 1996
- Photographs of computer scientists by Bertrand Meyer

参考文献和学术搜索引擎

- CiteSeerx: search engine, digital library and repository for scientific and academic papers with a focus on computer and information science.
- DBLP Computer Science Bibliography: computer science bibliography website hosted at Universität Trier, in Germany.
- The Collection of Computer Science Bibliographies

Webcast

- Directory of free university lectures in Computer Science
- Collection of computer science lectures
- UCLA Computer Science 1 Freshman Computer Science Seminar Section 1
- Berkeley Introduction to Computers