计算机科学涉及计算的理论基础及其应用的实际技术。
计算机科学是对与数据相互作用的过程的研究,这些过程可以用程序的形式表示为数据。它允许使用算法来操作、存储和传递数字信息。一位计算机科学家研究计算理论和设计软件系统的实践[1]。
它的领域可以分为理论学科和实践学科。计算复杂性理论非常抽象,而计算机图形学强调实际的应用。编程语言理论考虑描述计算过程的方法,而计算机编程本身涉及编程语言和复杂系统的使用。人机交互考虑了使计算机有用、可用和可访问的挑战。
在现代数字计算机发明之前,计算机科学的最早基础就已经存在了。计算固定数字任务的机器,如算盘,自古以来就存在,帮助计算,如乘法和除法。执行计算的算法自古以来就存在,甚至在复杂计算设备发展之前。
Wilhelm Schickard在1623年设计并建造了第一台工作机械计算器[2]。1673年,Gottfried Leibniz演示了一种数字机械计算器,叫做步进计算器[3]。他可能被认为是第一位计算机科学家和信息理论家,原因之一是记录了二进制数系统。1820年, Thomas de Colmar发布了他的简化算术计,这是第一台足够强大和可靠的计算机 ,可以在办公室环境中每天使用。Charles Babbage于1822年开始设计第一台自动机械计算器—差分引擎,这最终让他想到了第一台可编程机械计算器—分析引擎[4]。 他于1834年开始开发这台机器,“在不到两年的时间里,他勾勒出了现代计算机的许多显著特征”[5]。“一个关键的步骤是采用源自[5] 提花织机的穿孔卡片系统,使其可无限编程。1843年,在翻译一篇关于分析引擎的法语文章时,Ada Lovelace在她所包括的许多注释中,写了一个计算伯努利数的算法,这被认为是第一个计算机程序[6]。大约在1885年,Herman Hollerith 发明了制表机,它使用穿孔卡片来处理统计信息;最终,他的公司成为了IBM的一部分。1937年,在Babbage不可能实现的梦想100年后,Howard Aiken说服正在制造各种穿孔卡设备的同时也在计算机行业[7]的IBM公司在Babbage的分析引擎的基础上开发他的巨型可编程计算器——ASCC/Harvard Mark I,该计算器本身使用卡和中央计算单元。当机器完成时,一些人称赞它为“Babbage的梦想成真”。[8]
在20世纪40年代,随着新的和更强大的计算机的发展,计算机一词开始指的是机器而不是它们的人类前辈[9]。随着计算机不仅仅可以用于数学计算这一点变得越来越清楚,计算机科学的领域也扩展到了研究一般计算。1945年,IBM在纽约市哥伦比亚大学建立了沃森科学计算实验室。曼哈顿西区翻新的兄弟会大楼是IBM第一个致力于纯科学的实验室。该实验室是IBM研究部门的前身,该部门目前在世界各地设有研究机构[10]。最终,IBM和该大学之间的密切关系促成了一门新的科学学科的出现,哥伦比亚大学于1946年开设了首批计算机科学学术学分课程之一[11]。 计算机科学在20世纪50年代和60年代初开始被确立为一门独特的学科 。世界上第一个计算机科学学位课程——剑桥计算机科学文凭始于1953年剑桥大学计算机实验室。美国第一个计算机科学系于1962年在普渡大学成立。自从实用计算机问世以来,计算机的许多应用已成为独立的研究领域。
尽管许多人最初认为计算机本身不可能真正成为一个科学研究领域,但在50年代后期,它逐渐被更多的学术群体所接受。这是现在众所周知的IBM品牌,它在这段时间里形成了计算机科学革命的一部分。IBM(国际商业机器的缩写)发布了IBM 704 和后来的IBM 709 计算机,这些计算机在这种设备的探索期间被广泛使用。“尽管如此,使用[计算机]让人感到沮丧,如果你在一条指令中放错了多达一个字母,程序就会崩溃,你必须重新开始整个过程”。20世纪50年代末,计算机科学学科处于发展阶段,这类问题司空见惯。
随着时间的推移,计算技术的可用性和有效性有了显著的提高。现代社会见证了计算机技术用户的重大转变,从仅由专家和专业人士使用,转向几乎无处不在的用户群。起初,计算机相当昂贵,有效使用需要某种程度的人道主义援助——部分来自专业计算机操作员。随着计算机的应用变得越来越广泛,越来越负担得起,普通使用所需的人工帮助也越来越少。
尽管计算机科学作为一门正式的学术学科历史不长,但它对科学和社会做出了许多根本性的贡献——事实上,它和电子学一样,是人类历史上被称为信息时代的一门创始科学,也是信息革命的推动力,被视为继工业革命(1750-1850年)和农业革命(公元前8000-5000年)之后人类技术进步的第三次重大飞跃。
这些贡献包括:
尽管“计算机科学”一词最早是在1956年提出的[14],但在1959年发表在ACM通讯的一篇文章中[14],Louis Fein在文章中主张创建一所计算机科学研究生院,类似于1921年[14] 在创建哈佛商学院,并认为该学科与管理科学一样具有应用性和跨学科性质,同时具有学术学科的典型特征,从而证明了这一名称的合理性[14]。他的努力以及其他人的努力如数值分析师George Forsythe,得到了回报:大学继续创建这样的系,从1962年普渡大学开始。[32]尽管有它的名字,大量的计算机科学并不涉及计算机本身的研究。因此,已经提出了几个替代名称[14]。主要大学的某些系更喜欢计算科学这个术语,以准确强调这种差异。丹麦科学家Peter Naurs建议使用术语“数据学”[14] 来反映这样一个事实,即科学学科围绕着数据和数据处理,而不一定涉及计算机。第一个使用这个术语的科学机构是哥本哈根大学数据学系,成立于1969年,是第一位Peter Naurs数据学教授。该术语主要用于斯堪的纳维亚国家。Naur提出的另一个术语是数据科学;这现在被用于数据分析的多学科领域,包括统计和数据库。
此外,在计算的早期,ACM都灵工程师、图尔学家、流程图专家、应用数学元学家和应用认识论者的交流中提出了计算领域从业人员的一些术语[14]。三个月后,在同一份杂志上,有人提出了计算机学家的建议,第二年又提出了生理学家的建议[14]。 计算机一词也被提出[14]。 在欧洲,经常使用从“自动信息”(例如意大利语中的“信息自动化”)或“信息和数学”这两个表达的合同翻译中派生出来的术语,例如希腊语中的信息(法语)、信息(德语)、信息(意大利语、荷兰语)、信息(西班牙语、葡萄牙语)、信息(斯拉夫语和匈牙利语)或普利罗福里基语(πληροφορική,意思是信息学)。英国也采用了类似的词汇(如爱丁堡大学信息学学院)[14]。“然而,在美国,信息学与应用计算或另一个领域的计算联系在一起。”[14]。
一个通常被认为是Edsger Dijkstra创造的民间格言说,“计算机科学与计算机的关系不比天文学与望远镜的关系更大。” 计算机和计算机系统的设计和部署通常被认为是计算机科学以外的学科领域。例如,计算机硬件的研究通常被认为是计算机工程的一部分,而商业计算机系统及其部署的研究通常被称为信息技术或信息系统。然而,在不同的计算机相关学科之间有许多思想交流。计算机科学研究也经常与其他学科交叉,如哲学、认知科学、语言学、数学、物理、生物学、统计学和逻辑学。
一些人认为计算机科学与数学的关系比许多科学学科密切得多,一些观察家认为计算是一门数学科学[14]。 早期的计算机科学受到了KurtGödel,Alan Turing,RózsaPéter和Alonzo Church等数学家工作的强烈影响,在数学逻辑、范畴理论、领域理论和代数等领域,这两个领域之间继续有着有益的思想交流[14]。
计算机科学和软件工程之间的关系是一个有争议的问题,由于关于“软件工程”一词的含义以及如何定义计算机科学的争论,这个问题变得更加模糊[14]。 大卫·帕纳斯(David Parnas)从其他工程和科学学科之间的关系中得到启示,他声称计算机科学的主要焦点是研究一般计算的性质,而软件工程的主要焦点是设计特定的计算来实现实际的目标,使这两个独立但互补的学科成为一体[14]。
计算机科学的学术、政治和资金方面往往取决于一个部门是以数学为重点还是以工程为重点。以数学为重点并以数字为导向的计算机科学系考虑与计算科学保持一致。这两种类型的部门都倾向于努力在教育领域搭建桥梁,如果不是跨越所有研究的话。
作为一门学科,计算机科学涵盖了一系列的主题,从算法的理论研究和计算的局限性到用硬件和软件实现计算系统的实际问题[17][18]。CSAB,前称计算科学认证委员会——由计算机械协会(ACM)和IEEE计算机学会(IEEE CS)[19]的代表组成——确定了它认为对计算机科学学科至关重要的四个领域:计算理论、算法和数据结构、编程方法和语言,以及计算机元素和体系结构。除了这四个领域,CSAB还将软件工程、人工智能、计算机网络和通信、数据库系统、并行计算、分布式计算、人机交互、计算机图形学、操作系统以及数字和符号计算等领域确定为计算机科学的重要领域[17]。
理论计算机科学在精神上是数学和抽象的,但它的动机来自于实践和日常计算。其目的是理解计算的本质,并因此提供更有效的方法。所有与数学、逻辑和形式概念和方法相关的研究都可以被认为是理论计算机科学,只要动机明显来自计算的字段。
数据结构和算法
数据结构和算法是对常用计算方法及其计算效率的研究。
计算理论
彼得·丹宁(Peter Denning)计算机科学的根本问题是,“什么可以(有效地)自动化?”[20] 计算理论的重点是回答关于什么可以计算以及执行这些计算需要多少资源的基本问题。为了回答第一个问题,可计算性理论检验了哪些计算问题可以在不同的计算理论模型上解决。第二个问题由计算复杂性理论解决,该理论研究与解决大量计算问题的不同方法相关的时间和空间成本。
著名的P=NP ?问题,千禧年大奖难题之一[20],是计算理论中的一个开放问题。
信息和编码理论
信息论与信息的量化有关。这是克Claude Shannon开发的,旨在发现信号处理操作的基本限制,例如压缩数据以及可靠地存储和传输数据[20]。编码理论是研究代码的性质(将信息从一种形式转换成另一种形式的系统)及其对特定应用的适应性。代码用于数据压缩、加密、错误检测和纠正,最近还用于网络编码。为了设计高效可靠的数据传输方法,对代码进行了研究。
编程语言理论
编程语言理论是计算机科学的一个分支,研究编程语言的设计、实现、分析、表征和分类及其各自特征。它属于计算机科学的学科,既依赖于也影响着数学,软件工程,语言学。这是一个活跃的研究领域,有许多专门的学术期刊。
类型论 | 编译器设计 | 编程语言 |
形式方法
形式化方法是一种特殊的基于数学的技术,用于软件和硬件系统的规范、开发和验证。在软件和硬件设计中使用形式方法的动机是期望,像在其他工程学科中一样,执行适当的数学分析可以有助于设计的可靠性和健壮性。它们构成了软件工程的重要理论基础,尤其是在涉及到安全性的地方。形式化方法是软件测试的有用附件,因为它们有助于避免错误,也可以提供测试框架。对于工业应用,需要工具支持。然而,使用形式化方法的高成本意味着它们通常只用于开发高度完整性和生命关键的系统,其中安全或安保至关重要。形式方法最好被描述为相当广泛的计算机科学理论基础的应用,特别是逻辑演算、形式语言、自动机理论和程序语义,以及类型系统和代数数据类型在软件和硬件规范和验证问题中的应用。
计算机体系结构和计算机工程
计算机体系结构或数字计算机组织是计算机系统的概念设计和基本操作结构。它主要关注中央处理器内部执行和访问内存地址的方式[20]。该领域通常涉及计算机工程和电气工程的学科,选择和互连硬件组件以创建满足功能、性能和成本目标的计算机。
计算机性能分析
计算机性能分析是对流经计算机的工作的研究,其总体目标是提高吞吐量、控制响应时间、有效利用资源、消除瓶颈以及预测预期峰值负载下的性能。[20]基准测试提供了一种比较不同芯片/系统架构中各种子系统性能的方法。
并发、并行和分布式系统
并发性是系统的一个属性,其中多个计算同时执行,并且可能相互交互。已经开发了许多用于一般并发计算的数学模型,包括Petri网、过程演算和并行随机存取机器模型。分布式系统将并发的思想扩展到通过网络连接的多台计算机上。同一分布式系统中的计算机有它们自己的私有内存,并且信息经常在它们之间交换以实现一个共同的目标。
计算机网络
计算机科学的这个分支旨在管理全球计算机之间的网络。
计算机安全和密码学
计算机安全是计算机技术的一个分支,其目标是保护信息免受未经授权的访问、中断或修改,同时保持系统对预期用户的可访问性和可用性。密码学是隐藏(加密)并因此解密(解密)信息的实践和研究。现代密码学在很大程度上与计算机科学有关,因为许多加密和解密算法都是基于它们的计算复杂性。
数据库
数据库旨在方便地组织、存储和检索大量数据。数字数据库通过数据库模型和查询语言使用数据库管理系统来存储、创建、维护和搜索数据。
计算机图形和可视化
计算机图形学是对数字视觉内容的研究,涉及图像数据的合成和处理。这项研究与计算机科学的许多其他领域相关联,包括计算机视觉、图像处理和计算几何,并被大量应用于特效和视频游戏领域。
人机交互
为用户界面设计者开发理论、原则和指导方针的研究,以便他们能够用台式机、笔记本电脑和移动设备创造满意的用户体验。
科学计算
科学计算(或计算科学)是与构建数学模型和定量分析技术以及使用计算机分析和解决科学问题有关的研究领域。在实际应用中,它通常是将计算机模拟和其他形式的计算应用于各种科学学科的问题。
人工智能
人工智能(AI)旨在或被要求综合目标导向的过程,如人类和动物的问题解决、决策、环境适应、学习和交流。从控制论和达特茅斯会议(1956年)的起源开始,人工智能研究必然是跨学科的,借鉴了应用数学、符号逻辑、符号学、电气工程、思想哲学、神经生理学和社会智能等专业领域。AI与机器人开发有着密切的联系,但实际应用的主要领域一直是作为软件开发领域的嵌入式组件,这需要计算理解。20世纪40年代末的起点是Alan Turing的问题“计算机能思考吗?”尽管Turing测试仍然被用来评估人类智力水平上的计算机输出,但这个问题仍然没有得到有效的回答。但是,评估和预测任务的自动化已经越来越成功地取代了涉及复杂现实世界数据的计算机应用领域中的人工监控和干预。
软件工程是为了确保软件的高质量、可负担性、可维护性和快速构建而设计、实现和修改软件的研究。这是一种系统的软件设计方法,包括将工程实践应用于软件。软件工程处理软件的组织和分析——它不仅处理新软件的创建或制造,还处理其内部维护和安排。
计算哲学家比尔·雷帕波特指出了计算机科学的三个伟大见解:[20]
编程语言可以用不同的方式来完成不同的任务。常见的编程范式包括:
许多语言为多种范式提供支持,这使得区分更多的是风格问题,而不是技术能力问题[21]。
计算机科学以其近义词计算机、计算机研究、信息技术(IT)和信息与计算技术(ICT)而闻名,自从批量处理、标记敏感卡片和纸带时代以来,就一直在英国学校教授,但通常只限于少数学生[25]。1981年,英国广播公司制作了一个微型计算机和教室网络,计算机学习成为GCE O级学生(11-16岁)和A级学生计算机科学的普遍现象。它的重要性得到了承认,并成为国家课程的必修部分,用于关键阶段3和4。2014年9月,这成为所有70万名4岁以上学生的一项权利[26]。
在美国,有14000个学区决定课程设置,但是这项规定已经破裂[27]。根据计算机协会(ACM)和计算机科学教师协会(CSTA)2010年的一份报告,50个州中只有14个州采用了高中计算机科学的重要教育标准[28]。
电气和电子工程师协会(IEEE)出版了超过30%的电气和电子工程及计算机科学领域的世界文献,出版了100多种同行评议的期刊。
以色列、新西兰和韩国已将计算机科学纳入其国家中等教育课程[29][30],其他几个国家也在跟进[31]。
在许多国家,计算机科学教育存在巨大的性别差距。2012年,美国仅有20%的计算机科学学位授予女性[32]。性别差距在其他西方国家也是一个问题[33]。在世界的某些地方,这种差距更小,甚至不存在。2011年,马来西亚女性获得了一半的计算机科学学位。[66]2001年,圭亚那55%的计算机科学毕业生是女性[33]。
^"WordNet Search—3.1". Wordnetweb.princeton.edu. Retrieved 14 May 2012..
^"Wilhelm Schickard – Ein Computerpionier" (PDF) (in German).CS1 maint: Unrecognized language (link).
^Keates, Fiona (25 June 2012). "A Brief History of Computing". The Repository. The Royal Society..
^"Science Museum—Introduction to Babbage". Archived from the original on September 8, 2006. Retrieved 24 September 2006..
^Anthony Hyman (1982). Charles Babbage, pioneer of the computer..
^"A Selection and Adaptation From Ada's Notes found in Ada, The Enchantress of Numbers," by Betty Alexandra Toole Ed.D. Strawberry Press, Mill Valley, CA". Archived from the original on February 10, 2006. Retrieved 4 May 2006..
^"In this sense Aiken needed IBM, whose technology included the use of punched cards, the accumulation of numerical data, and the transfer of numerical data from one register to another", Bernard Cohen, p.44 (2000).
^Brian Randell, p. 187, 1975.
^The Association for Computing Machinery (ACM) was founded in 1947..
^"IBM Archives: 1945". Ibm.com. Retrieved 2019-03-19..
^"IBM100 – The Origins of Computer Science". Ibm.com. 1995-09-15. Retrieved 2019-03-19..
^Maly, Timy (2013-01-30). "How Digital Filmmakers Produced a Gorgeous Sci-Fi Movie on a Kickstarter Budget". Wired. Retrieved November 24, 2015..
^Matthau, Charles (2015-01-08). "How Tech Has Shaped Film Making: The Film vs. Digital Debate Is Put to Rest". Wired. Retrieved November 24, 2015..
^"IBM 704 Electronic Data Processing System—CHM Revolution". Computerhistory.org. Retrieved 7 July 2013..
^Denning, P.J.; Comer, D.E.; Gries, D.; Mulder, M.C.; Tucker, A.; Turner, A.J.; Young, P.R. (January 1989). "Computing as a discipline". Communications of the ACM. 32: 9–23. doi:10.1145/63238.63239..
^Eden, A.H. (2007). "Three Paradigms of Computer Science" (PDF). Minds and Machines. 17 (2): 135–167. CiteSeerX 10.1.1.304.7763. doi:10.1007/s11023-007-9060-8. Archived from the original (PDF) on February 15, 2016..
^"Computer Science as a Profession". Computing Sciences Accreditation Board. May 28, 1997. Archived from the original on June 17, 2008. Retrieved 23 May 2010..
^Committee on the Fundamentals of Computer Science: Challenges and Opportunities, National Research Council (2004). Computer Science: Reflections on the Field, Reflections from the Field. National Academies Press. ISBN 978-0-309-09301-9..
^"CSAB Leading Computer Education". CSAB. August 3, 2011. Retrieved 19 November 2011..
^Denning, Peter J. (2000). "Computer Science: The Discipline" (PDF). Encyclopedia of Computer Science. Archived from the original (PDF) on May 25, 2006..
^"Multi-Paradigm Programming Language". developer.mozilla.org. Mozilla Foundation. Archived from the original on 21 August 2013..
^Meyer, Bertrand (April 2009). "Viewpoint: Research evaluation for computer science". Communications of the ACM. 25 (4): 31–34. doi:10.1145/1498765.1498780..
^Patterson, David (August 1999). "Evaluating Computer Scientists and Engineers For Promotion and Tenure". Computing Research Association..
^Fortnow, Lance (August 2009). "Viewpoint: Time for Computer Science to Grow Up". Communications of the ACM. 52 (8): 33–35. doi:10.1145/1536616.1536631..
^Burns, Judith (3 April 2016). "Computer science A-level 1970s style". Retrieved 9 February 2019..
^Jones, Michael (October 1915). "Developing a Computer Science Curriculum in England: Exploring Approaches in the USA" (PDF). Winston Churchill Memorial Trust. Retrieved 9 February 2019..
^"Computer Science: Not Just an Elective Anymore". Education Week. February 25, 2014..
^Wilson, Cameron; Sudol, Leigh Ann; Stephenson, Chris; Stehlik, Mark (2010). "Running on Empty: The Failure to Teach K–12 Computer Science in the Digital Age" (PDF). ACM..
^"A is for algorithm". The Economist. April 26, 2014..
^"Computing at School International comparisons" (PDF). Retrieved July 20, 2015..
^"Adding Coding to the Curriculum". The New York Times. March 23, 2014..
^"Percentage of Bachelor's degrees conferred to women, by major (1970–2012)". 14 June 2014. Retrieved July 20, 2015..
^James, Justin. "IT gender gap: Where are the female programmers?". TechRepublic..
暂无