贡献者: 待更新
本文根据 CC-BY-SA 协议转载翻译自维基百科相关文章。
计算机科学是关于计算、信息和自动化的研究。[1][2][3] 计算机科学涵盖了从理论学科(如算法、计算理论和信息理论)到应用学科(包括硬件和软件的设计与实现)等多个领域。[4][5][6]
算法和数据结构是计算机科学的核心。[7] 计算理论研究的是计算的抽象模型和可以通过这些模型解决的普遍问题。密码学和计算机安全领域涉及研究安全通信的手段以及防止安全漏洞的技术。计算机图形学和计算几何学关注图像的生成。编程语言理论探讨了描述计算过程的不同方式,数据库理论则关注数据存储库的管理。人机交互研究人类和计算机交互的接口,软件工程则专注于开发软件的设计和原则。操作系统、网络和嵌入式系统等领域研究复杂系统的原理和设计。计算机架构描述了计算机组件和计算机操作设备的构建方式。人工智能和机器学习旨在合成目标导向的过程,如人类和动物中出现的问题解决、决策制定、环境适应、规划和学习过程。在人工智能领域,计算机视觉旨在理解和处理图像和视频数据,而自然语言处理则专注于理解和处理文本和语言数据。
计算机科学的根本问题是确定什么可以被自动化,什么不能。[2][8][3][9][10] 图灵奖通常被认为是计算机科学领域的最高荣誉。[11][12]
1. 历史
图 1:戈特弗里德·威廉·莱布尼茨(Gottfried Wilhelm Leibniz,1646-1716)发展了二进制数系统的逻辑,并被称为“计算机科学的创始人。[13]
计算机科学的最早基础早于现代数字计算机的发明。像算盘这样的计算固定数值任务的机器,自古以来就存在,用于帮助进行乘法和除法等计算。执行计算的算法也自古就有,甚至在复杂计算设备的发展之前就已存在。[16]
威廉·席卡德(Wilhelm Schickard)于 1623 年设计并制造了第一台工作的机械计算器。[17] 1673 年,戈特弗里德·莱布尼茨(Gottfried Leibniz)展示了一种数字机械计算器,称为 “阶梯计算机”(Stepped Reckoner)。[18] 莱布尼茨可能被认为是第一位计算机科学家和信息理论家,原因有很多,其中之一是他记录了二进制数系统的使用。1820 年,托马斯·德·科尔马(Thomas de Colmar)发明了简化版的算术仪器——第一台足够强大且可靠的计算机器,能够在日常办公环境中使用,从而开启了机械计算器行业。[note 1] 查尔斯·巴贝奇(Charles Babbage)于 1822 年开始设计第一台自动机械计算器——差分机(Difference Engine),这最终启发了他设计第一台可编程的机械计算机——分析机(Analytical Engine)。[19] 他于 1834 年开始开发这台机器,并且 “不到两年,他就勾画出了现代计算机的许多显著特征”。[20] “一个关键步骤是采用了源自贾卡尔织布机的打孔卡片系统”[20],使得这台机器具有了无限的可编程性。[note 2] 1843 年,在翻译关于分析机的法国文章时,阿达·洛夫莱斯(Ada Lovelace)在她的多篇附注中写下了一个计算伯努利数的算法,这被认为是历史上首个专门为计算机实施的已发表算法。[21] 大约在 1885 年,赫尔曼·霍勒里斯(Herman Hollerith)发明了制表机,这种机器使用打孔卡片来处理统计信息;最终,他的公司成为了 IBM 的一部分。在巴贝奇之后,虽然未曾了解他之前的工作,珀西·卢德盖特(Percy Ludgate)于 1909 年发表了[22]历史上仅有的两个机械分析机设计中的第二个。1914 年,西班牙工程师莱昂纳多·托雷斯·奎韦多(Leonardo Torres Quevedo)发表了《自动化论文》[23],并设计了一台理论上的电机计算机,灵感来自巴贝奇,计划通过只读程序来控制这台机器。该论文还介绍了浮点算术的概念。[24][25] 1920 年,为庆祝算术仪器发明 100 周年,托雷斯在巴黎展示了电机算术仪器原型,这台原型演示了电机分析机的可行性,[26] 可通过键入命令并自动打印结果。[27] 1937 年,在巴贝奇的梦想百年后,霍华德·艾肯(Howard Aiken)说服了 IBM,IBM 当时生产各种打孔卡片设备并涉足计算器业务[28],开发了他的大型可编程计算机——ASCC/哈佛马克 I,基于巴贝奇的分析机,后者本身就使用卡片和中央计算单元。当机器完成后,一些人将其誉为 “巴贝奇的梦想成真”。[29]
图 2:查尔斯·巴贝奇有时被称为“计算机之父。[14]
在 1940 年代,随着像阿塔纳索夫–贝里计算机(Atanasoff–Berry Computer)和 ENIAC 等新型更强大的计算机器的出现,“计算机” 一词开始指代这些机器,而非其人类前身。[30] 随着计算机可以用于的不仅仅是数学计算,计算机科学的领域扩展到研究一般的计算问题。1945 年,IBM 在纽约市哥伦比亚大学成立了沃森科学计算实验室。位于曼哈顿西区的一座翻修过的兄弟会大厦成为了 IBM 第一个专注于纯科学的实验室。该实验室是 IBM 研究部的前身,今天,IBM 在全球各地都设有研究设施。[31] 最终,IBM 与哥伦比亚大学之间的紧密关系对于新科学学科的诞生起到了关键作用,哥伦比亚大学于 1946 年开设了第一门计算机科学学分课程。[32] 计算机科学开始在 1950 年代和 1960 年代初期作为一个独立的学术学科逐渐确立。[33][34] 世界上第一个计算机科学学位课程——剑桥大学计算机科学文凭课程,于 1953 年在剑桥大学计算机实验室开设。美国的第一个计算机科学系于 1962 年在普渡大学成立。[35] 自从实用计算机问世以来,计算的许多应用已成为独立的研究领域。
2. 词源与范围
图 3:艾达·洛夫莱斯(Ada Lovelace)发表了第一篇旨在用于计算机处理的算法。[15]
尽管 “计算机科学” 这一术语最早于 1956 年提出[36],但它首次出现在 1959 年《ACM 通讯》的一篇文章中[37],在文章中路易斯·费因(Louis Fein)主张创建类似于 1921 年哈佛商学院的计算机科学研究生院[38]。路易斯通过主张这一名称的合理性来辩护,认为这一学科像管理科学一样,具有应用性和跨学科的特点,同时也具备典型的学术学科特征[37]。他和其他学者的努力,如数值分析师乔治·福赛思(George Forsythe),最终得到了回报:大学开始创建类似的部门,普渡大学于 1962 年率先成立[39]。尽管名为 “计算机科学”,但该学科的很多内容并不涉及计算机本身的研究。正因如此,曾有人提出了几个替代的名称[40]。一些大学的部门更倾向于使用 “计算科学” 一词,以突出这一区别。丹麦科学家彼得·诺尔(Peter Naur)提出了 “数据学”(datalogy)一词,用以反映这一学科主要围绕数据及其处理展开,而不一定涉及计算机。第一个使用 “数据学” 这一术语的科学机构是 1969 年成立的哥本哈根大学数据学系,彼得·诺尔是数据学的第一位教授。该术语主要在斯堪的纳维亚国家使用。诺尔还提出了另一个替代术语 “数据科学”,这一术语现已用于一个多学科的领域,涉及数据分析,包括统计学和数据库等内容。
在计算机学科的早期,《ACM 通讯》中曾建议使用多个术语来称呼计算领域的从业者——例如 “图灵工程师(turingineer)”、“图论学家(turologist)”、“流程图人(flow-charts-man)”、“应用元数学家(applied meta-mathematician)” 和 “应用认识论者(applied epistemologist)”[42]。三个月后,《ACM 通讯》又提出了 “计算学家(comptologist)” 这一术语,次年又提出了 “假设学家(hypologist)”[43]。还有人提出了 “计算学(computics)” 这一术语[44]。在欧洲,常常使用源自 “自动信息”(如意大利语中的 “informazione automatica”)或 “信息与数学”(例如法语的 “informatique”,德语的 “Informatik”,意大利语和荷兰语的 “informatica”,西班牙语和葡萄牙语的 “informática”,斯拉夫语言和匈牙利语的 “informatika” 以及希腊语中的 “πληροφορική”)的表达的术语。类似的词汇也在英国被采纳(如爱丁堡大学的信息学系)。[45] 然而,在美国,“信息学” 通常与应用计算机学科相关,或者是在其他领域中的计算机学科[46]。
有一句民间语录,通常归功于但几乎肯定不是由埃德斯格·戴克斯特拉(Edsger Dijkstra)首次提出的,它称 “计算机科学并不比天文学与望远镜有关”[note 3]。计算机和计算机系统的设计与部署通常被视为其他学科的领域。例如,计算机硬件的研究通常被认为是计算机工程的一部分,而商业计算机系统的研究及其部署则通常被称为信息技术或信息系统。然而,计算机相关学科之间存在着思想交流。计算机科学的研究也常常与其他学科交叉,如认知科学、语言学、数学、物理学、生物学、地球科学、统计学、哲学和逻辑学。
计算机科学被一些人认为与数学有比许多其他科学学科更紧密的关系,有人认为计算机科学是一门数学科学。[33] 早期的计算机科学深受数学家如库尔特·哥德尔(Kurt Gödel)、阿兰·图灵(Alan Turing)、约翰·冯·诺依曼(John von Neumann)、罗莎·佩特(Rózsa Péter)和阿朗佐·丘奇(Alonzo Church)等人的工作影响,并且至今在数学逻辑、范畴理论、领域理论和代数等领域依然存在有益的思想交流[36]。
计算机科学与软件工程之间的关系一直是一个有争议的问题,这个问题因 “软件工程” 这一术语的定义以及计算机科学的定义而更加复杂。[47] 大卫·帕纳斯(David Parnas)借鉴其他工程学科与科学学科之间的关系,曾主张计算机科学的主要关注点是研究计算的性质,而软件工程的主要关注点是设计具体的计算以实现实际目标,因此,二者是分离但互为补充的学科。[48]
计算机科学的学术、政治和资金方面往往取决于一个部门是以数学为重点,还是以工程为重点。那些以数学为重点、以数值为导向的计算机科学系往往与计算科学保持一致。两种类型的系都倾向于在教育上架起桥梁,尽管在所有研究领域尚未做到这一点。
3. 哲学
计算机科学的认识论
尽管 “科学” 一词出现在其名称中,但关于计算机科学是否属于科学、数学或工程学科仍存在争论。[49][50][51] 艾伦·纽厄尔(Allen Newell)和赫伯特·A·西蒙(Herbert A. Simon)在 1975 年曾提出:
计算机科学是一门经验学科。我们本可以称之为实验科学,但像天文学、经济学和地质学一样,它的一些独特观察和经验形式并不符合狭义的实验方法的刻板印象。尽管如此,它们仍然是实验。每一台新机器的建造都是一次实验。实际构建机器向自然提出了一个问题;我们通过观察机器的运行并使用所有可用的分析和测量手段对其进行分析,来聆听自然的回答。[51]
此后,有人认为计算机科学可以被归类为一门经验科学,因为它使用经验测试来评估程序的正确性,但仍存在定义计算机科学定律和定理(如果存在的话)以及定义计算机科学实验性质的问题。[51] 主张将计算机科学归类为工程学科的人认为,计算系统的可靠性研究与土木工程中的桥梁和航空航天工程中的飞机类似。[51] 他们还认为,虽然经验科学观察的是当前存在的事物,计算机科学则观察的是可能存在的事物,而科学家通过观察发现定律,但在计算机科学中并未发现适当的定律,它更关注的是创造现象。[51]
主张将计算机科学归类为数学学科的人认为,计算机程序是数学实体的物理实现,程序可以通过数学形式化方法进行演绎推理。[51] 计算机科学家艾兹杰·W·迪克斯特拉(Edsger W. Dijkstra)和托尼·霍尔(Tony Hoare)将计算机程序的指令视为数学命题,并将编程语言的形式语义解释为数学公理系统。[51]
计算机科学的范式
许多计算机科学家主张将计算机科学区分为三种独立的范式。彼得·韦格纳(Peter Wegner)认为这三种范式分别是科学、技术和数学。[52] 彼得·丹宁(Peter Denning)的工作小组则认为它们是理论、抽象(建模)和设计。[33] 阿姆农·H·伊登(Amnon H. Eden)将其描述为 “理性主义范式”(将计算机科学视为数学的一个分支,广泛存在于理论计算机科学中,主要采用演绎推理)、“技术官僚范式”(这种范式可能出现在工程方法中,特别是在软件工程中)以及 “科学范式”(从自然科学的经验视角看待计算机相关的人工制品,[53] 在某些人工智能分支中可以识别出这一范式)。[54]
计算机科学专注于设计、规范、编程、验证、实现和测试人类制造的计算系统中所涉及的方法。[55]
领域
作为一门学科,计算机科学涵盖了从算法理论和计算极限的理论研究,到在硬件和软件中实现计算系统的实际问题的广泛主题。[56][57] 计算机科学认证委员会(CSAB,前身为计算科学认证委员会)由计算机协会(ACM)和 IEEE 计算机学会(IEEE CS)的代表组成,认为计算机科学的四个关键领域是:计算理论、算法与数据结构、编程方法与语言,以及计算机元件与体系结构。除了这四个领域,CSAB 还认为软件工程、人工智能、计算机网络与通信、数据库系统、并行计算、分布式计算、人机交互、计算机图形学、操作系统以及数值与符号计算等领域也是计算机科学的重要组成部分。[56]
理论计算机科学
理论计算机科学在本质上是数学的和抽象的,但它的动机来自于实际和日常计算。它旨在理解计算的本质,并通过这种理解提供更高效的方法论。
计算理论
根据彼得·丹宁(Peter Denning)的说法,计算机科学的根本问题是:“什么可以被自动化?” 计算理论的重点是回答关于什么可以被计算以及执行这些计算需要多少资源的基本问题。为了回答第一个问题,可计算性理论研究哪些计算问题可以在各种理论计算模型中解决。第二个问题则由计算复杂性理论来解决,它研究解决大量计算问题的不同方法所涉及的时间和空间成本。
著名的 P = NP?问题,作为千年大奖难题之一,是计算理论中的一个未解问题。
图 4
信息与编码理论
主条目:信息理论 和 编码理论
信息理论与概率论和统计学密切相关,主要研究信息的量化问题。该理论由克劳德·香农(Claude Shannon)发展,用以确定信号处理操作的基本限制,如数据压缩、数据的可靠存储和通信。[60] 编码理论则研究编码的性质(将信息从一种形式转换为另一种形式的系统)及其在特定应用中的适用性。编码用于数据压缩、密码学、错误检测和修正,近年来也用于网络编码。编码的研究目的是设计高效且可靠的数据传输方法。[61]
图 5
数据结构与算法
数据结构与算法是研究常用计算方法及其计算效率的学科。
图 6
编程语言理论与形式化方法
编程语言理论是计算机科学的一个分支,研究编程语言的设计、实现、分析、特征描述和分类。它属于计算机科学领域,并与数学、软件工程和语言学相互依存和影响。它是一个活跃的研究领域,拥有众多专门的学术期刊。
形式化方法是一种基于数学的技术,用于软件和硬件系统的规范、开发和验证。[62] 在软件和硬件设计中使用形式化方法的动机是,像其他工程学科一样,适当的数学分析可以有助于设计的可靠性和稳健性。形式化方法为软件工程提供了重要的理论支持,尤其是在涉及安全或可靠性时。形式化方法是软件测试的重要补充,因为它们有助于避免错误,还可以提供测试框架。在工业应用中,形式化方法需要工具支持。然而,使用形式化方法的高成本意味着它们通常仅用于开发高完整性和生命关键系统,在这些系统中,安全性或可靠性至关重要。形式化方法最好被描述为广泛应用理论计算机科学基础,特别是逻辑计算、形式语言、自动机理论和程序语义学,此外还包括类型系统和代数数据类型,用于解决软件和硬件规范及验证中的问题。
图 7
应用计算机科学
计算机图形学与可视化
计算机图形学是研究数字视觉内容的学科,涉及图像数据的合成与处理。该研究与计算机科学的许多其他领域密切相关,包括计算机视觉、图像处理和计算几何,并在特效和视频游戏领域有广泛应用。
图 8
图像与声音处理
信息可以以图像、声音、视频或其他多媒体形式存在。信息的位可以通过信号进行流传。其处理是信息学的核心概念,这是欧洲计算领域的观点,研究信息处理算法,而不考虑信息载体的类型——无论是电气的、机械的还是生物的。该领域在信息理论、电信、信息工程中发挥着重要作用,并在医学图像计算、语音合成等方面有广泛应用。快速傅里叶变换算法的复杂度下界是什么?这是理论计算机科学中的一个未解问题。
图 9
计算科学、金融与工程
科学计算(或计算科学)是一个涉及构建数学模型和定量分析技术的研究领域,利用计算机分析和解决科学问题。科学计算的一个主要应用是模拟各种过程,包括计算流体动力学、物理、电气和电子系统与电路,以及社会和社会情境(尤其是战争游戏)及其栖息地等。现代计算机使得这些设计的优化成为可能,例如完整的飞机设计。在电气和电子电路设计中,SPICE[63]等工具非常重要,以及用于实现新(或修改)设计的物理实现软件。后者包括集成电路的基本设计软件[64]。
图 10
人机交互
人机交互(HCI)是一个研究领域,专注于计算机系统的设计和使用,主要基于对人类与计算机界面交互的分析。HCI 有多个子领域,关注情感、社会行为和大脑活动与计算机之间的关系。
图 11
软件工程
软件工程是研究设计、实施和修改软件的学科,目的是确保软件具有高质量、可负担性、可维护性并且能快速构建。它是一种系统化的软件设计方法,涉及将工程实践应用于软件开发。软件工程不仅涉及软件的创建或制造,还包括其内部结构和维护。例如,软件测试、系统工程、技术债务和软件开发流程。
人工智能
人工智能(AI)旨在合成目标导向的过程,如问题解决、决策、环境适应、学习和交流,这些过程在人类和动物中都有出现。从其在控制论和达特茅斯会议(1956 年)的起源开始,人工智能研究一直是跨学科的,涉及应用数学、符号逻辑、符号学、电气工程、心灵哲学、神经生理学和社会智能等领域的专业知识。人工智能在大众认知中通常与机器人开发相关,但实际应用的主要领域是作为嵌入式组件,应用于需要计算理解的软件开发领域。人工智能的起点可以追溯到 20 世纪 40 年代末,艾伦·图灵提出的 “计算机能思考吗?” 这一问题,虽然这一问题至今未能得到有效回答,图灵测试仍用于评估计算机输出是否接近人类智能。然而,自动化的评估和预测任务在许多涉及复杂现实世界数据的计算机应用领域,已逐渐成为人类监控和干预的替代品,并取得了越来越大的成功。
图 12
计算机系统
计算机体系结构与微体系结构
计算机体系结构,或称数字计算机组织,是计算机系统的概念设计和基本操作结构。它主要关注中央处理单元(CPU)内部的工作方式以及如何访问内存中的地址。[65] 计算机工程师研究计算逻辑和计算机硬件的设计,从单个处理器组件、微控制器、个人计算机到超级计算机和嵌入式系统。计算机文献中的 “体系结构” 一词可追溯到 Lyle R. Johnson 和 Frederick P. Brooks Jr.的研究工作,他们是 IBM 主要研究中心机器组织部门的成员,该部门的研究始于 1959 年。
图 13
并发、并行和分布式计算
并发是指系统中多个计算同时执行,并可能相互交互的特性。[66] 为了描述一般的并发计算,已开发出多个数学模型,包括 Petri 网、过程演算和并行随机访问机器模型。[67] 当多个计算机通过网络连接并使用并发时,这被称为分布式系统。该分布式系统中的计算机具有自己的私有内存,信息可以交换以实现共同目标。[68]
计算机网络
计算机网络学科旨在管理全球计算机之间的网络。
计算机安全与密码学
计算机安全是计算机技术的一个分支,目的是保护信息不被未经授权的访问、干扰或修改,同时保持系统对预期用户的可访问性和可用性。
历史密码学是写作和解密秘密信息的艺术。现代密码学是研究与可被攻击的分布式计算相关的问题的科学。[69] 现代密码学研究的技术包括对称加密和非对称加密、数字签名、密码学哈希函数、密钥协商协议、区块链、零知识证明和混淆电路。
数据库与数据挖掘
数据库的目的是组织、存储和便捷地检索大量数据。数字数据库通过数据库管理系统来管理,存储、创建、维护和查询数据,通过数据库模型和查询语言进行操作。数据挖掘是从大量数据集中发现模式的过程。
4. 发现
计算机哲学家比尔·拉帕波特(Bill Rapaport)提出了计算机科学的三大重要见解:[70]
- 戈特弗里德·威廉·莱布尼茨、乔治·布尔、艾伦·图灵、克劳德·香农和塞缪尔·莫尔斯的见解:计算机为了表示 “任何事物” 必须处理的只有两种对象。
任何可计算问题的所有信息都可以仅使用 0 和 1(或任何其他可以在两个易于区分的状态之间反转的双稳态对,如 “开/关”、“磁化/去磁化”、“高电压/低电压” 等)来表示。
参见:数字物理学
- 艾伦·图灵的见解**:计算机为了 “做任何事” 只需执行五个动作。
每个算法都可以用一种计算机语言表示,这种语言仅由五条基本指令组成:[71]
- 向左移动一个位置;
- 向右移动一个位置;
- 读取当前所在位置的符号;
- 在当前位置打印 0;
- 在当前位置打印 1。
参见:图灵机
- 科拉多·博姆和朱塞佩·贾科皮尼的见解:为了让计算机 “做任何事”,只需要三种方式将这些动作组合在一起(形成更复杂的动作)。[72]
只需要三条规则即可将任何一组基本指令组合成更复杂的指令:
- 顺序:首先做这个,然后做那个;
- 选择:如果是这样,那么做这个,否则做那个;
- 重复:当满足某个条件时,做这个。
博姆和贾科皮尼的三条规则可以通过使用 goto 语句进一步简化(这意味着它比结构化编程更基础)。
参见:结构化程序定理
5. 编程范式
编程语言可以通过不同的方式完成不同的任务。常见的编程范式包括:
- 函数式编程:一种构建计算机程序结构和元素的方式,将计算视为数学函数的求值,避免使用状态和可变数据。它是一种声明式编程范式,这意味着编程是通过表达式或声明来完成的,而不是通过语句。[73]
- 命令式编程:一种编程范式,使用改变程序状态的语句。[74] 这种编程方式与自然语言中的命令语气类似,命令式程序由计算机执行的命令组成。命令式编程侧重于描述程序如何操作。
- 面向对象编程:一种基于 “对象” 概念的编程范式,对象可以包含数据(通常以字段形式表示,称为属性)和代码(通常以方法形式表示)。对象的一个特点是,它的程序可以访问并经常修改与之相关联的数据字段。因此,面向对象的计算机程序是由彼此交互的对象组成的。[75]
面向对象编程:一种基于 “对象” 概念的编程范式,对象可以包含数据(通常以字段形式表示,称为属性)和代码(通常以方法形式表示)。对象的一个特点是,它的程序可以访问并经常修改与之相关联的数据字段。因此,面向对象的计算机程序是由彼此交互的对象组成的。[75]
- 面向服务编程:一种使用 “服务” 作为计算工作单元的编程范式,用于设计和实现集成的业务应用程序和关键任务软件程序。
许多编程语言支持多种范式,因此范式的区别更多的是风格上的,而非技术能力上的问题。[76]
6. 研究
更多信息:计算机科学会议列表 和 计算机科学期刊类别
会议是计算机科学研究中的重要活动。在这些会议上,来自公共和私营部门的研究人员展示他们的最新研究成果并进行交流。与大多数其他学术领域不同,在计算机科学领域,会议论文的声誉通常超过期刊出版物。[77][78] 一种可能的解释是,这一相对较新的领域的发展速度较快,需要快速的评审和成果传播,而这一任务由会议而非期刊更容易处理。[79]
7. 另见
- 计算机科学教育
- 计算机科学词汇表
- 计算机科学家名单
- 计算机科学奖项名单
- 计算机科学先驱名单
- 计算机科学大纲
8. 注释
- 1851 年
- “将穿孔卡片引入新机器不仅仅是因为它比鼓更方便控制,或者因为程序现在可以是无限扩展的,可以存储并重复使用,而不会因为手动设置机器时可能引入错误而造成危险;它的重要性还在于,它使得巴贝奇意识到他发明了某种真正新的东西,远远超出了一个复杂计算机的范畴。” ——布鲁斯·科利尔,1970 年
- 请参见 Wikiquote 中的 “计算机科学” 条目,了解这段引言的历史。
- “任何事物”(anything)一词被放在引号中,因为计算机无法做某些事情。例如:回答一个问题,给定的任意计算机程序是否最终会完成,或者是否会永远运行(停机问题)。
9. 参考文献
- "What is Computer Science?". 计算机科学系,约克大学。原文档存档于 2020 年 6 月 11 日。检索于 2020 年 6 月 11 日。
- What Can Be Automated? Computer Science and Engineering Research Study. 计算机科学系列。MIT 出版社,1980 年。ISBN 978-0262010603。原文档存档于 2021 年 1 月 9 日。
- Denning, P.J.; Comer, D.E.; Gries, D.; Mulder, M.C.; Tucker, A.; Turner, A.J.; Young, P.R. (1989 年 2 月)。“计算作为一门学科”。《计算机》。22(2): 63–70。doi:10.1109/2.19833。ISSN 1558-0814。原文档存档于 2022 年 3 月 3 日。检索于 2022 年 3 月 3 日。计算学科是对描述和转换信息的算法过程的系统研究,包括其理论、分析、设计、效率、实现和应用。所有计算的基本问题是:“什么可以(高效地)自动化?”
- "WordNet Search—3.1"。WordNet 搜索。Wordnetweb.princeton.edu。原文档存档于 2017 年 10 月 18 日。检索于 2012 年 5 月 14 日。
- "Definition of computer science | Dictionary.com"。www.dictionary.com。原文档存档于 2020 年 6 月 11 日。检索于 2020 年 6 月 11 日。
- "What is Computer Science? | Undergraduate Computer Science at UMD"。undergrad.cs.umd.edu。原文档存档于 2020 年 11 月 27 日。检索于 2022 年 7 月 15 日。
- Harel, David (2014)。Algorithmics The Spirit of Computing。Springer Berlin。ISBN 978-3-642-44135-6。OCLC 876384882。原文档存档于 2020 年 6 月 17 日。检索于 2020 年 6 月 17 日。
- Patton, Richard D.; Patton, Peter C. (2009),Nof, Shimon Y. (编),"What Can be Automated? What Cannot be Automated?",《自动化手册》,Springer Handbooks,柏林,海德堡:Springer,第 305–313 页,doi:10.1007/978-3-540-78831-7_18,ISBN 978-3-540-78831-7,原文档存档于 2023 年 1 月 11 日,检索于 2022 年 3 月 3 日。
- Forsythe, George (1969 年 8 月 5–10 日)。“计算机科学与教育”。《IFIP 1968 年大会论文集》。问题 “什么可以自动化?” 是当代文明中最具启发性和实践性的问题之一。
- Knuth, Donald E. (1972 年 8 月 1 日)。“乔治·福赛思与计算机科学的发展”。《计算机协会通讯》。15(8): 721–726。doi:10.1145/361532.361538。ISSN 0001-0782。S2CID 12512057。
- Hanson, Vicki L. (2017 年 1 月 23 日)。“庆祝图灵奖 50 周年”。《计算机协会通讯》。60(2): 5。doi:10.1145/3033604。ISSN 0001-0782。S2CID 29984960。
- Scott, Eric; Martins, Marcella Scoczynski Ribeiro; Yafrani, Mohamed El; Volz, Vanessa; Wilson, Dennis G (2018 年 6 月 5 日)。“ACM 庆祝 ACM A.M.图灵奖 50 周年及计算领域最伟大的成就”。《ACM SIGEVOlution》。10(3): 9–11。doi:10.1145/3231560.3231563。ISSN 1931-8499。S2CID 47021559。
- “2021 年:莱布尼茨 375 周年诞辰,计算机科学之父”。people.idsia.ch。原文档存档于 2022 年 9 月 21 日。检索于 2023 年 2 月 4 日。
- “查尔斯·巴贝奇研究所:查尔斯·巴贝奇是谁?” cbi.umn.edu。原文档存档于 2007 年 1 月 9 日。检索于 2016 年 12 月 28 日。
- “Ada Lovelace | 巴贝奇引擎 | 计算机历史博物馆”。www.computerhistory.org。原文档存档于 2018 年 12 月 25 日。检索于 2016 年 12 月 28 日。
- “计算机科学历史”。cs.uwaterloo.ca。原文档存档于 2017 年 7 月 29 日。检索于 2022 年 7 月 15 日。
- “威廉·席卡德——计算机先驱”(PDF)(德语)。原文档存档(PDF)于 2020 年 9 月 19 日。检索于 2016 年 12 月 4 日。
- Keates, Fiona (2012 年 6 月 25 日)。“计算的简短历史”。《皇家学会存档》。原文档存档于 2012 年 6 月 29 日。检索于 2014 年 1 月 19 日。
- “科学博物馆,巴贝奇的分析引擎,1834-1871(试验模型)”。原文档存档于 2019 年 8 月 30 日。检索于 2020 年 5 月 11 日。
- Hyman, Anthony (1982 年)。《查尔斯·巴贝奇:计算机的先驱》。牛津大学出版社。ISBN 978-0691083032。
- “《来自阿达笔记的选摘与改编》 by Betty Alexandra Toole Ed.D.《阿达,数字魔女》, Strawberry Press, Mill Valley, CA”。原文档存档于 2006 年 2 月 10 日。检索于 2006 年 5 月 4 日。
- “约翰·加布里尔·伯恩计算机科学收藏” (PDF)。原文档存档于 2019 年 4 月 16 日。检索于 2019 年 8 月 8 日。
- Torres Quevedo, L. (1914)。“自动化试论——定义及其应用的理论扩展”。《精确科学学会期刊》,12,页 391–418。
- Torres Quevedo, Leonardo。《自动化:机器理论的补充》,(PDF),页 575–583,《公共工程期刊》,1914 年 11 月 19 日。
- Ronald T. Kneusel。《数字与计算机》,Springer,第 84–85 页,2017 年。ISBN 978-3319505084
- Randell, Brian。《数字计算机,起源历史》,(PDF),第 545 页,《数字计算机:起源》,《计算机科学百科全书》,2003 年 1 月。
- Randell 1982,第 6,11–13 页。
- “从这个意义上说,艾肯需要 IBM,其技术包括使用穿孔卡片、数据积累以及数据从一个寄存器转移到另一个寄存器”,Bernard Cohen,第 44 页(2000 年)
- Brian Randell,第 187,1975 页
- 计算机协会(ACM)成立于 1947 年。
- “IBM 档案:1945”。Ibm.com。2003 年 1 月 23 日。原文档存档于 2019 年 1 月 5 日。检索于 2019 年 3 月 19 日。
- “IBM100 – 计算机科学的起源”。Ibm.com。1995 年 9 月 15 日。原文档存档于 2019 年 1 月 5 日。检索于 2019 年 3 月 19 日。
- Denning, P.J.; Comer, D.E.; Gries, D.; Mulder, M.C.; Tucker, A.; Turner, A.J.; Young, P.R. (1989 年 2 月)。“计算作为一门学科”。《计算机》。22 (2):63–70。doi:10.1109/2.19833。ISSN 1558-0814。原文档存档于 2022 年 3 月 3 日。检索于 2022 年 3 月 3 日。
- “某些 EDSAC 统计数据”。剑桥大学。原文档存档于 2007 年 9 月 3 日。检索于 2011 年 11 月 19 日。
- “计算机科学先驱 Samuel D. Conte 逝世,享年 85”。普渡大学计算机科学系。2002 年 7 月 1 日。原文档存档于 2014 年 10 月 6 日。检索于 2014 年 12 月 12 日。
- Tedre, Matti (2014)。《计算科学:塑造一门学科》。Taylor and Francis / CRC Press。
- Louis Fine (1960)。“大学在计算机、数据处理及相关领域的作用”。《ACM 通讯》。2 (9):7–14。doi:10.1145/368424.368427。S2CID 6740821。
- “斯坦福大学口述历史”。斯坦福大学。原文档存档于 2017 年 4 月 4 日。检索于 2013 年 5 月 30 日。
- Donald Knuth (1972)。“George Forsythe 与计算机科学的发展”。《ACM 通讯》。原文档存档于 2013 年 10 月 20 日。
- Matti Tedre (2006)。“计算机科学的发展:社会文化视角”(PDF)。第 260 页。原文档存档于 2022 年 10 月 9 日。检索于 2014 年 12 月 12 日。
- Peter Naur (1966)。“数据学的科学”。《ACM 通讯》。9 (7):485。doi:10.1145/365719.366510。S2CID 47558402。
- Weiss, E.A.; Corley, Henry P.T. “致编辑的信”。《ACM 通讯》。1 (4):6。doi:10.1145/368796.368802。S2CID 5379449。
- 《ACM 通讯》 2(1):第 4 页
- IEEE 计算机 28(12):第 136 页
- P. Mounier-Kuhn,《法国信息学:从二战到计算计划的历史》。巴黎,PUPS,2010,第 3 章和第 4 章。
- Groth, Dennis P. (2010 年 2 月)。“为什么选择信息学学位?”《ACM 通讯》。Cacm.acm.org。原文档存档于 2023 年 1 月 11 日。检索于 2016 年 6 月 14 日。
- Tedre, M. (2011)。“计算作为一门科学:竞争观点的调查”。《心智与机器》。21 (3):361–387。doi:10.1007/s11023-011-9240-4。S2CID 14263916。
- Parnas, D.L. (1998)。“软件工程课程不是计算机科学课程”。《软件工程年鉴》。6:19–37。doi:10.1023/A:1018949113292。S2CID 35786237,第 19 页:“我不把软件工程当作计算机科学的一个子领域,而是将其视为土木工程、机械工程、化学工程、电气工程等集合中的一个元素。”
- Luk, R.W.P. (2020)。“计算机科学如何成为一门科学的见解”。《科学与哲学》。8 (2):17–47。doi:10.23756/sp.v8i2.531。
- Knuth, D.E. (1974)。“计算机科学与数学的关系”。《美国数学月刊》。81 (4):323–343。doi:10.2307/2318994。JSTOR 2318994。
- 《计算机科学的哲学》。计算机科学的哲学(斯坦福哲学百科全书)。斯坦福大学形而上学研究实验室,2021 年。原文存档于 2021 年 9 月 16 日。检索于 2021 年 9 月 16 日。
- Wegner, P.(1976 年 10 月 13 日至 15 日)。“计算机科学中的研究范式——第二届国际软件工程会议论文集”。美国加利福尼亚州旧金山:IEEE 计算机协会出版社,洛杉矶,CA。
- Denning, Peter J.(2007)。“计算是自然科学”。《ACM 通讯》。50 (7):13–18。doi:10.1145/1272516.1272529。S2CID 20045303。
- Eden, A.H.(2007)。“计算机科学的三种范式”(PDF)。《心智与机器》。17 (2):135–167。CiteSeerX 10.1.1.304.7763。doi:10.1007/s11023-007-9060-8。S2CID 3023076。原文存档于 2016 年 2 月 15 日(PDF)。
- Turner, Raymond; Angius, Nicola(2019)。“计算机科学的哲学”。在 Zalta, Edward N.(编辑)《斯坦福哲学百科全书》中。原文存档于 2019 年 10 月 14 日。检索于 2019 年 10 月 14 日。
- 《计算机科学作为职业》。计算科学认证委员会。1997 年 5 月 28 日。原文存档于 2008 年 6 月 17 日。检索于 2010 年 5 月 23 日。
- 美国国家研究委员会《计算机科学基础:挑战与机遇委员会》(2004)。《计算机科学:对该领域的反思,来自该领域的反思》。国家科学院出版社。ISBN 978-0-309-09301-9。原文存档于 2011 年 2 月 18 日。检索于 2008 年 8 月 31 日。
- 《CSAB 领先计算机教育》。CSAB。2011 年 8 月 3 日。原文存档于 2019 年 1 月 20 日。检索于 2011 年 11 月 19 日。
- 克雷数学研究所 P = NP,原文存档于 2013 年 10 月 14 日。
- P. Collins, Graham(2002 年 10 月 14 日)。“Claude E. Shannon:信息理论的创始人”。《科学美国人》。原文存档于 2014 年 1 月 16 日。检索于 2014 年 12 月 12 日。
- Van-Nam Huynh; Vladik Kreinovich; Songsak Sriboonchitta(2012)。《计量经济学中的不确定性分析及其应用》。Springer 科学与商业媒体,第 63 页。ISBN 978-3-642-35443-4。
- Phillip A. Laplante(2010)。《软件工程百科全书 三卷本(印刷版)》。CRC 出版社,第 309 页。ISBN 978-1-351-24926-3。
- Muhammad H. Rashid(2016)。《电力电子与电力工程中的 SPICE》。CRC 出版社,第 6 页。ISBN 978-1-4398-6047-2。
- 《什么是集成电路(IC)?现代电子学的关键组件》。WhatIs.com。原文存档于 2021 年 11 月 15 日。检索于 2021 年 11 月 15 日。
- A. Thisted, Ronald(1997 年 4 月 7 日)。“计算机架构”(PDF)。芝加哥大学。原文存档于 2022 年 10 月 9 日(PDF)。
- Jiacun Wang(2017)。《实时嵌入式系统》。Wiley 出版社,第 12 页。ISBN 978-1-119-42070-5。
- Gordana Dodig-Crnkovic; Raffaela Giovagnoli(2013)。《计算自然:图灵百年视角》。Springer 科学与商业媒体,第 247 页。ISBN 978-3-642-37225-4。
- Simon Elias Bibri(2018)。《未来的智能可持续城市:大数据分析与情境感知计算在推动可持续性方面的未开发潜力》。Springer,第 74 页。ISBN 978-3-319-73981-6。
- Katz, Jonathan(2008)。《现代密码学导论》。Yehuda Lindell。Boca Raton:Chapman & Hall/CRC。ISBN 978-1-58488-551-1。OCLC 137325053。原文存档于 2022 年 5 月 6 日。检索于 2021 年 11 月 17 日。
- Rapaport, William J.(2013 年 9 月 20 日)。“什么是计算?” 纽约州立大学布法罗分校。原文存档于 2001 年 2 月 14 日。检索于 2013 年 8 月 31 日。
- B. Jack Copeland(2012)。《艾伦·图灵的电子大脑:构建 ACE 世界最快计算机的斗争》。牛津大学出版社,第 107 页。ISBN 978-0-19-960915-4。
- Charles W. Herbert(2010)。《使用 Alice 2.2 进行编程入门》。Cengage Learning,第 122 页。ISBN 0-538-47866-7。
- Md. Rezaul Karim;Sridhar Alla(2017)。《Scala 与 Spark 大数据分析:探索函数式编程、数据流和机器学习的概念》。Packt Publishing Ltd,第 87 页。ISBN 978-1-78355-050-0。
- Lex Sheehan(2017)。《在 Go 中学习函数式编程:使用 Go 中的函数式编程改变你对应用程序的处理方式》。Packt Publishing Ltd,第 16 页。ISBN 978-1-78728-604-7。
- Evelio Padilla(2015)。《变电站自动化系统:设计与实施》。Wiley 出版社,第 245 页。ISBN 978-1-118-98730-8。
- “多范式编程语言”。MDN Web 文档。Mozilla 基金会。原文存档于 2013 年 8 月 21 日。
- Meyer, Bertrand(2009 年 4 月)。“观点:计算机科学的研究评估”。《ACM 通讯》。25(4):31-34。doi:10.1145/1498765.1498780。S2CID 8625066。
- Patterson, David(1999 年 8 月)。“评估计算机科学家与工程师的晋升与终身教职”。《计算研究协会》。原文存档于 2015 年 7 月 22 日。检索于 2015 年 7 月 19 日。
- Fortnow, Lance(2009 年 8 月)。“观点:是时候让计算机科学成熟了”。《ACM 通讯》。52(8):33-35。doi:10.1145/1536616.1536631。
10. 进一步阅读
- Tucker, Allen B.(2004)。《计算机科学手册》(第 2 版)。Chapman and Hall/CRC 出版社。ISBN 978-1-58488-360-9。
- Ralston, Anthony;Reilly, Edwin D.;Hemmendinger, David(2000)。《计算机科学百科全书》(第 4 版)。Grove's Dictionaries 出版社。ISBN 978-1-56159-248-7。原文存档于 2020 年 6 月 8 日。检索于 2011 年 2 月 6 日。
- Edwin D. Reilly(2003)。《计算机科学与信息技术的里程碑》。Greenwood Publishing Group 出版社。ISBN 978-1-57356-521-9。
- Knuth, Donald E.(1996)。《计算机科学精选论文》。CSLI Publications,剑桥大学出版社。
- Collier, Bruce(1990)。《可能的计算机:查尔斯·巴贝奇的计算机》。Garland Publishing Inc.出版社。ISBN 978-0-8240-0043-1。原文存档于 2007 年 1 月 20 日。检索于 2013 年 5 月 4 日。
- Cohen, Bernard(2000)。《霍华德·艾肯,计算机先驱的肖像》。MIT 出版社。ISBN 978-0-262-53179-5。
- Tedre, Matti(2014)。《计算科学:塑造学科》。CRC 出版社,Taylor & Francis 出版社。
- Randell, Brian(1973)。《数字计算机的起源,精选论文》。Springer-Verlag 出版社。ISBN 978-3-540-06169-4。
- Randell, Brian(1982 年 10 月–12 月)。“从分析机到电子数字计算机:Ludgate、Torres 和 Bush 的贡献”(PDF)。《IEEE 计算历史年鉴》。4(4):327–341。doi:10.1109/mahc.1982.10042。S2CID 1737953。原文存档于 2013 年 9 月 21 日。
- Peter J. Denning。计算机科学是科学吗?,《ACM 通讯》,2005 年 4 月。
- Peter J. Denning,计算机科学课程中的伟大原则,《计算机科学教育技术研讨会》,2004 年。
11. 外部链接
- DBLP 计算机科学文献库
- 计算机协会(Association for Computing Machinery)
- 电气和电子工程师协会(Institute of Electrical and Electronics Engineers)
致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者
热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。