计算机科学是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。 它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究。计算机科学包含很多分支领域;有些强调特定结果的计算,比如计算机图形学。
计算机科学(Computer science,有时缩写为 CS)是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。 它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究。计算机科学包含很多分支领域;有些强调特定结果的计算,比如计算机图形学;而有些是探讨计算问题的性质,比如计算复杂性理论;还有一些领域专注于怎样实现计算,比如编程语言理论是研究描述计算的方法,而程序设计是应用特定的编程语言解决特定的计算问题,人机交互则是专注于怎样使计算机和计算变得有用、好用,以及随时随地为人所用。
有时公众会误以为计算机科学就是解决计算机问题的事业(比如信息技术),或者只是与使用计算机的经验有关,如玩游戏、上网或者文字处理。其实计算机科学所关注的,不仅仅是去理解实现类似游戏、浏览器这些软件的程序的性质,更要通过现有的知识创造新的程序或者改进已有的程序。
尽管计算机科学(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(斯拉夫语族)。
著名计算机科学家艾兹赫尔·戴克斯特拉曾经指出:“计算机科学并不只是关于计算机,就像天文学并不只是关于望远镜一样。”(”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 年代后期,计算机科学学科还在发展阶段,这种问题在当时是一件很常见的事情。
随着时间的推移,计算机科学技术在可用性和有效性上都有显著提升。现代社会见证了计算机从仅仅由专业人士使用到被广大用户接受的重大转变。最初,计算机非常昂贵,要有效利用它们,某种程度上必须得由专业的计算机操作员来完成。然而,随着计算机变得普及和低廉,已经几乎不需要专人的协助,虽然某些时候援助依旧存在。
主要成就
德军在二战时用于加密通信的恩尼格玛密码机。恩尼格玛加密信息在布莱切利园被大量破译被认为是帮助盟军在二战中获胜的重要因素。
虽然计算机科学被认定为一门正规学科的历史很短暂,但它对科学和社会做出了许多根本性的贡献ー事实上,计算机科学与电子学一样,是信息时代的奠基科学,也是信息革命的驱动力,被视为继工业革命(公元 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 还确立了其它一些重要领域,如软件工程,人工智能,计算机网络与通信,数据库系统,并行计算,分布式计算,人机交互,计算机图形学,操作系统,以及数值和符号计算。