计算机科学(Computer Science),是系统性研究计算机及其周围各种现象和规律的科学。它具体是研究计算机系统结构、程序系统(即软件)、人工智能(AI)以及计算本身的性质和问题的综合性学科。
科学领域
编辑作为一个独立的学科,计算机科学的研究范围极其广泛,涵盖了从算法的理论研究和计算能力的极限(可计算性),到如何通过硬件和软件具体实现计算系统的实际工程问题。CSAB(Computing Sciences Accreditation Board,现已并入ABET)是由美国计算机协会(ACM)和IEEE计算机学会(IEEE-CS)的代表组成的认证机构,它曾确立了计算机科学学科的四个主要领域:计算理论、算法与数据结构、编程方法与编程语言,以及计算机元素与架构。除这四大核心领域外,CSAB还确立了其他一系列重要领域,包括软件工程、人工智能、计算机网络与通信、数据库系统、并行计算、分布式计算、人机交互、机器翻译、计算机图形学、操作系统,以及数值和符号计算等。
计算机科学简介
编辑计算机科学(英语:Computer Science,有时缩写为CS)是系统性研究信息与计算的理论基础,以及这些理论基础如何在计算机系统中实现与应用的实用技术的学科。它通常被形容为对那些用于创造、描述以及转换信息的“算法处理”(Algorithmic Processes)的系统性研究。计算机科学包含众多分支领域:有些分支强调特定结果的计算,例如计算机图形学;有些分支则致力于探讨计算问题本身的性质,例如计算复杂性理论;还有一些领域专注于怎样具体实现计算,例如,编程语言理论是研究用于描述计算的方法,而程序设计(Programming)则是应用特定的编程语言来解决特定的计算问题;人机交互(HCI)则专注于怎样使计算机和计算变得对人有用、易用,并且随时随地为人所用。

理论计算机科学
广义的理论计算机科学(Theoretical Computer Science)包括经典的计算理论,以及其他专注于更抽象、逻辑与数学方面的计算研究。
计算理论
依据学者Peter J. Denning的说法,计算机科学最根本的问题是:“什么能够被有效地自动化?”(What can be efficiently automated?)。计算理论(Theory of Computation)的研究就是专注于回答这个根本问题,具体而言,是关于“什么能够被计算”(可计算性),以及“实施这些计算需要消耗多少资源”(复杂性)。为了试图回答第一个问题,递归论(或可计算性理论)检验在多种理论计算模型(如图灵机)中,哪些计算问题是可解的。而计算复杂性理论(Computational Complexity Theory)则被用于回答第二个问题,它研究解决一个不同目的的计算问题所需的时间与空间消耗。著名的“P=NP?”问题,作为千禧年大奖难题之一,至今仍是计算理论中的一个核心开放问题。
信息与编码理论
信息论(Information Theory)与信息(Information)的量化相关,由克劳德·香农(Claude E. Shannon)奠基。该理论用于寻找信号处理操作的根本极限,例如数据压缩的极限,以及数据在存储与通讯中的可靠性极限。编码理论(Coding Theory)则是对“编码”(Codes)及其在特定应用中的性质的研究。编码被广泛用于数据压缩、密码学、前向纠错(FEC)以及网络编码等领域。研究编码的目的在于设计出更高效、更可靠的数据传输与存储方法。
算法
算法(Algorithm)被定义为一系列明确的计算过程,它取一个或一组值作为输入,经过一系列定义好的计算步骤,最终得到一个或一组值作为输出。算法是计算机科学研究的一个核心领域,也是其他许多计算机科学技术的基础。算法研究主要包括数据结构、计算几何、图论等子领域。除此之外,算法还包括许多特定的杂项主题,如模式匹配、部分数论问题等。
程序设计理论
程序设计语言理论(Programming Language Theory)是计算机科学的一个分支,它主要处理程序设计语言的设计、实现、分析、描述和分类,以及它们各自所具备的特性。它作为计算机科学的一个学科,既受到数学、软件工程和语言学的影响,也反过来对这些学科产生影响。它是一个公认的计算机科学分支,同时也是一个非常活跃的研究领域,其研究成果被广泛发表在众多学术期刊、计算机科学以及工程类的出版物上。
形式化方法
形式化方法(Formal Methods)是一种(或一类)特殊的、基于数学的技术,用于软件和硬件系统的形式规范(Formal Specification)、开发以及形式验证(Formal Verification)。在软件和硬件设计方面,使用形式化方法的动机与其他工程学科类似,即期望通过适当的数学分析来帮助确保设计的可靠性(Reliability)和健壮性(Robustness)。但是,使用形式化方法通常会带来很高的成本,这意味着它们通常只被用于那些对安全(Safety)或保安(Security)有着极高要求的高可靠性系统(High-integrity Systems)中。形式化方法可以被最佳地形容为是各种理论计算机科学基础理论的应用,特别是计算机逻辑演算、形式语言、自动机理论和形式语义学,此外还涉及类型系统、代数数据类型等理论在软件和硬件规范与验证中的具体应用。
系统
并行性(Concurrency)与分布式计算(Distributed Computing)是系统研究的重要方向。并行性是系统的一种性质,这类系统被设计为可以同时执行多个可能互相交互的计算任务。学术界创建了一些数学模型(如Petri网、进程演算和PRAM模型)以用于通用的并发计算研究。分布式系统则将并行性的思想扩展到了多台由网络连接的计算机上。同一个分布式系统中的计算机通常拥有各自的私有内存,它们之间需要经常交换信息以达到一个共同的目的。
数据库和信息检索
数据库(Database)技术旨在更容易地组织、存储和检索海量数据。数据库系统通常由一个数据库管理系统(DBMS)来管理。DBMS通过特定的数据库模型(如关系模型)和查询语言(如SQL)来支持用户对数据进行存储、创建、维护和搜索。
应用计算机科学
尽管“计算机科学”(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)和“数学”(mathematics)或“自动”(automatic)组合而成的名字,比起源于“计算机”或“计算”(computation)的名字更为常见,例如:informatique(法语)、Informatik(德语)、informatika(斯拉夫语族)。
著名计算机科学家艾兹赫尔·戴克斯特拉(Edsger Dijkstra)曾经指出:“计算机科学并不只是关于计算机,就像天文学并不只是关于望远镜一样。”("Computer science is no more about computers than astronomy is about telescopes.")
设计、部署计算机和计算机系统通常被认为是其他非计算机科学学科的领域。例如,研究计算机硬件通常被看作是计算机工程(Computer Engineering)的一部分;而对于商业计算机系统的研究和部署则被称为信息技术(IT)或信息系统(IS)。然而,现如今各类计算机相关学科的思想正越来越多地相互融合。计算机科学的研究也经常与其它学科发生交叉,比如心理学、认知科学、语言学、数学、物理学、统计学和经济学等。计算机科学被认为比其它任何科学学科都与数学的联系更加密切,一些观察者甚至认为计算本质上就是一门数学科学。早期计算机科学受数学研究成果的影响极大,如库尔特·哥德尔(Kurt Gödel)和艾伦·图灵(Alan Turing)的工作。这两个领域(数学与计算机科学)在诸如数理逻辑、范畴论、域理论和代数等学科中,也不断进行着有益的思想交流。
计算机科学和软件工程(Software Engineering)的关系是一个长期以来备受争议的话题。随后关于什么是“软件工程”以及计算机科学又该如何定义的争论,使得情况更加混乱。大卫·帕纳斯(David Parnas)从其它工程学科和科学学科之间的关系中得到启示,他宣称:计算机科学的主要重点总的来说是研究“计算的性质”(Properties of Computation),而软件工程的主要重点则是“具体的计算设计”(Design of specific computations),以达到实用的目的。这样便构成了两个独立但又紧密互补的学科。
人工智能
人工智能(Artificial Intelligence, AI)是计算机科学的一个重要分支。它旨在创造出能够解决复杂计算问题、并能像动物和人类一样思考与交流的人造系统。无论是在理论研究还是应用实践上,AI都要求研究者在多个学科领域具备细致且综合的专长,比如应用数学、逻辑学、符号学、电机工程学、精神哲学、神经生理学以及社会智力等。这些跨学科知识被用于推动智能研究领域本身的发展,或者被应用到其它需要计算理解与建模的学科领域(如金融分析或物理科学)。人工智能领域开始变得正式化,源于AI先驱艾伦·图灵(Alan Turing)提出了著名的“图灵试验”(Turing Test),以试图回答那个终极问题:“计算机能够思考吗?”
机器翻译
机器翻译(Machine Translation, MT)的研究始于1947年,美国数学家、工程师沃伦·韦弗(Warren Weaver)与英国物理学家、工程师安德鲁·布思(Andrew Booth)共同提出了利用计算机进行翻译(简称“机译”)的设想。自此,机器翻译步入了历史舞台,并走过了一条曲折而漫长的发展道路。机译曾被列为21世纪世界十大科技难题之一。与此同时,机译技术也拥有着巨大的应用需求,它有助于消除不同文字和语言之间的隔阂,被认为是高科技造福人类之举。然而,机译的译文质量长期以来一直是个瓶颈问题,距离“信、达、雅”的理想目标仍相差甚远。中国数学家、语言学家周海中教授曾认为,在人类尚未明了大脑是如何进行语言的模糊识别和逻辑判断的情况下,机译要想达到高水准(“信、达、雅”)是不可能的。这一观点恐怕道出了制约译文质量的瓶颈所在。
体系结构与工程
计算机体系结构(Computer Architecture)或称数字计算机组织,是一个计算机系统的概念性设计和根本性运作结构。它主要侧重于CPU的内部执行机制和内存访问地址等问题。这个领域经常涉及计算机工程和电子工程学科,其核心任务是选择和互连各种硬件组件,以创造出满足特定功能、性能和成本目标的计算机系统。
图形与视觉
计算机图形学(Computer Graphics)是对于数字视觉内容的研究,它涉及图像数据的合成(Synthesis)和操作(Manipulation)。它与计算机科学的许多其它领域(包括计算机视觉、图像处理和计算几何)密切相关,同时也被大量地运用在电影特效和电子游戏(Video Games)的制作中。
安全和密码学
计算机安全(Computer Security)是计算机技术的一个分支,其目标包括保护信息免受未经授权的访问、中断和修改,同时为系统的预期用户保持系统的可访问性和可用性。密码学(Cryptography)是对于隐藏信息(加密)和破译信息(解密)的实践与研究。现代密码学主要与计算机科学相关,许多加密和解密算法的设计与分析都基于它们的计算复杂性。
计算科学
计算科学(Computational Science)或称科学计算(Scientific Computing),是关注构建数学模型和量化分析技术的研究领域,其目标是利用计算机来分析和解决科学(如物理、化学、生物)问题。在实际使用中,它通常表现为计算机模拟(Simulation)和计算等形式在各个科学学科问题中的具体应用。
信息科学
信息科学(Information Science)是一个相关的交叉学科领域。
软件工程
软件工程(Software Engineering)是对于设计、实现和修改软件的系统性研究,旨在确保软件产品具有高质量、适中的价格、良好的可维护性,并且能够被快速地构建出来。它是一个系统的、规范的软件设计方法,涉及将工程实践(Engineering Practices)应用到软件的开发与维护中。
计算机科学奖项
编辑计算机科学领域的最高荣誉是由ACM(美国计算机协会)设立的图灵奖(Turing Award)。该奖项被广泛誉为是“计算机科学界的诺贝尔奖”。它的获得者都是本领域中最为出色、最具开创性的科学家和先驱。华人学者中首位获得图灵奖的是姚期智(Andrew Chi-Chih Yao)先生。他于2000年,因其对计算理论(Theory of Computation)做出的诸多“根本性的、意义重大的”贡献而获得了这一崇高荣誉。
专业院校
编辑在美国,开设计算机科学专业的知名院校众多,例如(排名不分先后):普渡大学西拉法叶分校、弗吉尼亚大学、密西根大学安娜堡分校、乔治城大学、维克森林大学、耶鲁大学、哥伦比亚大学、华盛顿大学、卡内基梅隆大学、佐治亚理工学院、加州理工学院、麻省理工学院、斯坦福大学、加州大学伯克利分校、伊利诺伊大学香槟分校、威斯康星大学麦迪逊分校、伦斯勒理工学院、哈佛大学、俄勒冈大学等。
著名高校
编辑(根据某次排名)在计算机科学领域排名世界前五的大学通常包括:
1. Carnegie Mellon University (卡内基梅隆大学)
2. Massachusetts Institute of Technology (麻省理工学院)
3. Stanford University (斯坦福大学)
4. University of California - Berkeley (加州大学伯克利分校)
5. Cornell University (康奈尔大学) / University of Illinois - Urbana Champaign (伊利诺伊大学香槟分校)
专业介绍
编辑培养目标
(以中国某应用型专业为例)本专业旨在培养德、智、体全面发展,掌握计算机应用技术的基础理论知识,具备计算机及相关设备的维护与维修、行业应用软件的使用与开发、平面图像处理、广告设计制作、动画制作、计算机网络及网站建设与管理、数据库管理与维护等应用能力和操作能力的高等技术应用性人才。
主要课程
(应用型专业示例课程)计算机应用基础、计算机组装与维护、计算机局域网络的建设与管理、网络工程、操作系统、服务器配置与管理、数据库的开发与应用、网站建设与网页设计、C/C++语言程序设计、Visual Basic语言、平面设计(如Photoshop)、3D图形设计、多媒体设计、专业英语等。
就业方向
(应用型专业示例)毕业生主要面向交通系统各单位、交通信息化与电子政务建设与应用部门、各类计算机专业化公司、广告设计制作公司、汽车营销技术服务等领域,从事IT行业的相关工作。
研究课题
编辑计算机科学的核心研究课题(问题)包括:
① 计算机程序能做什么和不能做什么?(可计算性理论)
② 如何使程序更高效地执行特定任务?(算法和计算复杂性理论)
③ 程序如何有效地存取不同类型的数据?(数据结构和数据库理论)
④ 程序如何才能显得更具有智能?(人工智能)
⑤ 人类如何才能更高效、更自然地与程序沟通?(人机交互和用户界面)
学科
编辑计算机科学与另外一些学科(领域)紧密相关。这些学科之间存在明显的交叉领域,但同时也具有明显的差异。相关学科包括:信息科学、软件工程、信息系统、计算机工程、信息安全、密码学、数学、工程学、语言学、逻辑学等。
发展历史
编辑计算机科学中的理论部分(如算法、可计算性理论)在第一台实体数字计算机出现以前就已存在。计算机科学根植于电子工程、数学和语言学,是科学、工程和艺术多重属性的结晶。它在20世纪的最后三十年间(约1970年代起)兴起,成为一门独立的学科,并逐渐发展出自己特有的研究方法与专业术语。早在20世纪30年代,英国数学家A.M.图灵(Alan Turing)和美国数学家E.L.波斯特(Emil Post)几乎同时提出了理想计算机的概念(图灵提出的那种理想机在后来的文献中被称为“图灵机”)。40年代,随着数字计算机的实际产生,计算技术(即计算机设计技术与程序设计技术)以及有关计算机的理论研究开始得到蓬勃发展。这方面的内容构成了后来所说的理论计算机科学。至于图灵机理论,则可以看作是计算机科学这一学科正式形成前的奠基阶段。而“计算机科学”这一术语,则要到60年代初才开始出现,此后世界各国才开始在大学中陆续设置独立的计算机科学系。
学科内容
计算机科学是一门相对年轻的科学,关于它究竟应包括哪些具体内容,学术界尚未形成完全一致公认的看法。一般认为,计算机科学主要包括理论计算机科学、计算机系统结构、软件工程的一部分以及人工智能等核心领域。
理论计算机科学: 理论计算机科学是在20世纪30年代发展起来的。40年代机电的与电子的计算机出现后,关于现实计算机及其程序的数学模型性质的研究,以及关于计算复杂性(早期称作计算难度)的研究迅速发展起来,逐渐形成了自动机理论、形式语言理论、程序设计理论、算法设计与分析以及计算复杂性理论等几个主要领域。
计算机系统结构: 50年代以来,计算机的性能在计算速度和编址空间方面已经提高了数个数量级。但这些性能的提升,大部分是通过电子元件(如晶体管、集成电路)的更新换代而获得的。在系统结构方面,绝大部分计算机基本上仍属于40年代后期形成的存储程序型计算机,即所谓的冯·诺伊曼型(von Neumann)机器。这种结构的主要特点是它属于“控制流”(Control Flow)型机器,即在一项计算中,先做什么后做什么是事先在程序中确定了的,指令的执行顺序是事先静态确定了的。为了在计算机的性能方面取得更大的进展,研究者们认识到需要突破这种旧的形式。因此,计算机系统结构方面的重要课题之一,就是探索非冯·诺伊曼型机器的设计思想。在非冯·诺伊曼型机器中,有一种是70年代初提出的“数据流”(Data Flow)机器(又名数据驱动机器)。美国、苏联和英国都曾制成过这种机器的原型。数据流机器的特点是,在一项计算中先做什么后做什么并不是事先确定好的,所执行的指令是动态排序的。排序的唯一原则是:操作数已准备就绪的指令就可以先做。因此,它被称为数据驱动机器。这种类型的机器被认为更便于实现大规模的并行计算。
软件工程: 在计算机发展的早期,程序设计在相当长的时间内是一种类似“手艺”或“作坊式”的活动,而不是类似现代工程的技术。到了60年代,随着计算机应用的深入,出现了许多大型程序。这些大程序的可靠性很难得到保证。到60年代后期,西方国家出现了所谓的“软件危机”(Software Crisis)。这指的是有些程序系统(如操作系统)变得过于庞大(可能包含几十万条乃至几百万条指令),导致开发成本过高,而可靠性则比较差。于是,学术界和工业界提出了“软件工程”的概念,其目的在于使软件的开发和维护能够遵守严格的规范,使用一套科学、可靠的方法,从而保证软件产品的质量。现代软件工程的发展方向是形式化和自动化,而形式化的目的之一就在于为自动化提供基础。这里所说的自动化,就是指将程序设计过程中可以由机器来完成的工作(如代码生成、测试、验证),尽量交给机器去做。其中心课题之一是程序工具(Tools)和环境(Environments)的研究。程序工具是指辅助人编写程序的程序(如编译器、编辑器、调试器等);程序环境则是指一套有机结合起来、协同使用,用以辅助人编程序的程序工具集(即IDE或CASE环境)。
人工智能: 人工智能旨在利用计算机模拟人的智能活动,特别是模拟人类的思维活动。由于人的思维活动离不开语言,而且人在对某一类问题进行思索和探索解法时,总是需要以关于这一类问题的基本知识(无论是专业知识还是常识)作为出发点。于是,知识表示(Knowledge Representation)和机器对自然语言的理解(Natural Language Processing)就构成了人工智能的两个重要研究领域。所谓知识表示,是指将原来用自然语言等方式表示的知识,转换成可以用符号语言表示的、能够储存在机器内存中、并供机器进行推理和使用的知识形式。人工智能的研究角度有探索法(Heuristics)的角度和算法(Algorithms)的角度。通常所说的解题算法是指机械的、并且总能保证得到结果的方法;而这里所说的算法是广义的,也包括那些机械的、但在使用时不一定保证能得到结果的算法(例如,半可判定的方法)。人在解决复杂问题时,时常会采用探索法。这种方法具有“试错法”的性质,也就是说,试验若干条可能的途径,当发现一条路走不通时,再退回尝试另一条路,直到问题得到解决为止。机器可以模拟人使用探索法解题的思维活动。但由于可能途径的数目在很多问题中会非常之大(即状态空间巨大),机器不可能进行穷举式的探索。人类在解决问题时,一般只会选出一些“最有希望”得到结果的途径去进行探索。人的这种能力,就是进行创造性思维(或直觉)的能力。这被认为是机器极难模拟的事情。而如果采用算法角度,使用特定的解题算法或半可判定的方法时,又会遇到另一方面的困难。那就是当问题的复杂程度较高时(例如其计算复杂度是指数级的),即使问题理论上是有结果的,机器也无法在实际可行的时间内计算出结果。这就是所谓的“组合性爆炸”(Combinatorial Explosion)问题(指一些组合数学中的问题,在参数N增大时,计算时间的增长率通常是指数的,甚至高于指数)。在计算机出现的初期,人们曾寄希望于机器的高速度,以为在模拟人的思维时,机器或许能用它的高速度来弥“换取”它所不具有的创造性思维(即“暴力搜索”)。但通过对“组合性爆炸”问题的深入认识,人们逐渐认识到,单纯依靠计算速度的提升,并不能绕过组合性爆炸所产生的根本性障碍。是否有办法来克服这种困难,尚有待于人工智能和计算理论的进一步研究。
百科词条作者:小小编,如若转载,请注明出处:https://glopedia.cn/397446/
