本节书摘来自华章出版社《计算机科学概论》一书中的第1章,第1.3节计算工具与计算学科,作者[美]内尔·黛尔(Nell Dale)约翰·路易斯(John Lewis),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.3 计算工具与计算学科
在计算机软件历史简介一节中,我们指出了用户角色的不断改变。在第一代软件末期,用户被划分为两组,即开发使程序设计更简单的工具的系统程序员和使用这些工具的应用程序员。此后,应用程序员利用传统的语言工具开发出大量专用的应用程序,如统计包、文字处理程序、电子制表软件、智能浏览器、虚拟环境和医疗诊断应用程序,而这些应用程序又由没有计算机背景的从业人员使用。
因此,到底谁在把计算机用作工具?除了为其他人创建工具的程序员之外,所有人都在使用计算机这个工具。对于那些工具制作者来说,计算是一种学科(低级工具),或者计算这种学科使他们的工具成为可行的(将一种应用程序构建在另一种应用程序之上)。
学科(discipline)被定义为一种学习领域。Peter Denning把计算机科学学科定义为“计算机专家在工作中使用的知识和实践的主体……这一学科也称为计算机科学和工程学、计算学或信息学”。[13]他继续说道,“计算知识的主体经常被描述为对算法过程的系统研究,包括算法的理论、分析、设计、有效性、实现和应用。隐藏在所有计算问题之下的基本问题是‘什么可以被有效地自动操作?’”
一种用途。
Denning认为每个从业人员需要四个领域的技巧:
- 算法思想,即能够用按部就班的过程表示问题,从而解决它们。
- 表示法,即用能被有效处理的方式存储数据。
- 程序设计,即把算法思想和表示法组织在计算机软件中。
- 设计,使软件满足一种用途。
关于计算学是一种数学学科还是一种科学学科或工程学科,存在着长期的争论。计算学当然来源于数学逻辑。图灵定理告诉我们,有些问题是不能解决的。布尔代数描述了计算机电路,数字分析在科学计算中扮演着重要的角色。科学学科尝试理解它们的系统是如何运作的。自然科学的存在是为了“填写上帝忘记给我们的说明书”。[14]因此,在构建和测试自然现象的模型时,计算学属于科学学科。在设计和构建越来越大的计算系统时,我们采用的则是工程学的技术。
1989年,一组计算机科学教育家提出了一种课程模式,涵盖了计算历史中出现的三个方面的所有分区,这三个方面即理论(数学)、被计算机科学家称为抽象的实验(科学)和设计(工程学)[15]。理论指为理解一个领域中的对象之间的关系而构建的基本概念和符号。实验(抽象)指研究不同应用领域内的系统和体系结构的模型,判断这些模型是否预测了新的行为。设计指构造支持不同应用领域内的工作的计算机系统。
表1-1展示了工作组提出的主题领域。在九个主题领域中,六个在大体上都与理解和构建计算工具有关:算法和数据结构、编程语言、(计算机)体系结构、操作系统、软件方法学与工程学以及人机交互。不足为奇的是,这些领域被称为系统领域。三个主题领域与计算机的工具化使用有关:数据库和信息检索、人工智能和机器人技术以及计算机图形学。这些区域被称为应用程序领域。
表1-1 1989年计算学科主题领域
计算学科主题领域,1989年 计算学科主题领域,1989年 计算学科主题领域,1989年
算法与数据结构 操作系统 人工智能与机器人技术
编程语言 软件方法学与工程学 人机交互
计算机体系结构 数据库与信息检索 图形学
2001年出版的修订课程文件将主题领域重组和扩展为14个,算法和数据结构被扩展并被划归到编程基础领域中。随着Web的兴起,网络有了自己的类别:网络中心计算。人工智能和机器人技术也被扩展,并包含了所有智能系统的内容。数据库和信息检索现在被称为信息管理。
**计算机走进大学
1962年普度大学和斯坦福大学设立第一个计算机科学系,1965年宾夕法尼亚大学授出第一个计算机科学博士学位,1968年ACM发布第一个计算机科学课程设置。**
新的主题领域包括对计算十分重要的一个数学领域课题离散结构(对计算来说数学不是那么重要的学科)和算法与复杂性(对算法的系统学习而不是学习如何写算法)。这些属于系统领域。计算科学包括在分子动力学、天体力学、经济预测和生物信息学等方面数值和模拟技术的应用。最后一个新的主题领域是社会和职业道德问题,这与系统和应用领域均有关系。这一领域现在被称为the Tenth Strand,对这一话题我们将在道德问题部分进一步讨论。表1-2展示了一个2001年主题领域的列表。“计算机科学课程2008:临时修订计算机科学2001”报告在2008年12月发表,保持了这14个主题领域而未进行变更。
表1-2 2001年计算学科主题领域
计算学科主题领域,2001 计算学科主题领域,2001 计算学科主题领域,2001
离散结构 网络中心计算 信息管理
编程基础 编程语言 社会和职业道德问题
算法与复杂性 人机交互 软件工程学
计算机体系结构与组织 图形学与可视化计算 计算科学
操作系统 智能系统
对系统分区和应用分区的研究都正在进行中。系统研究带来了更好的通用工具,应用研究为领域特定的应用提供了更好的工具。毫无疑问,把计算主题直接作为学科研究的人将影响那些把计算机用作工具的人。计算研究促成了人们日常使用的应用,而技术转变的速度也惊人地快。这种共生关系在计算学中比在其他学科中更强。
本书以绪论的方式解释了计算学科的基本思想。尽管本书有助于你成为更好的计算机用户,但这不是它存在的目的。我们的意图在于让你全面地了解计算机系统是如何工作的、它们现在处于什么阶段以及将来会向什么方向发展这些基础知识。因此,我们既要分析系统,也要分析应用。
小结
计算机系统由构成设备的硬件、机器执行的软件程序及由前两者管理和操作的数据组成,本书对计算机系统进行了概括性的研究。计算系统可以分为多个层次,本书将按照从内到外的顺序逐一介绍这些分层。
计算的历史使我们了解了现代计算系统的来源。计算的历史被划分为四个时代,每个时代都以用于构建硬件的元件和为了让用户更好地利用这些硬件而开发的软件工具为特征。这些工具构成了包围硬件的软件层。
在本书剩余的部分中,我们将分析构成计算系统的各个分层,从信息分层开始,到通信分层结束。我们的目标是让你理解和欣赏计算系统的方方面面。
你可能会继续对计算机科学做深度的研究,为计算系统的将来做出贡献。你也可能把计算机作为工具,成为其他学科的应用专家。无论你拥有什么样的未来,只有计算系统仍然盛行,对它们是如何运作的有一个基本了解都是必要的。
**道德问题:the Tenth Strand[16-18]
虽然被ACM(美国计算机协会)授权的Curriculum 1991中有一个称为社会和职业道德的部分,强调了学生需要“理解计算中包含的最基本的文化、社会、法律和道德问题”,但是对道德标准的学习并不在九个主题领域之内。到2001年,社会和职业道德问题部分被包含为计算教学主题领域中的一个。
在这中间的十年中,美国计算教育文献充斥着这一主题的文章,它们准确地表述了运用计算会带来怎样的特定道德问题,以及如何衡量这些问题带来的社会影响。由国家科学基金会资助的ImpactCS项目支持了领域内的25个专家来确定合适的核心内容。这些专家也定义了将材料集成到课程中的方法。在这一领域内工作的教育人员将这一主题称为the Tenth Strand。
但是,“计算机道德”这一术语可能会很模糊。在the Tenth Strand中,这一术语的使用指的是专业计算机人士应在自己职业内遵守的道德准则。计算机道德同样也可以指代传统西方专业哲学家通过计算机或计算机网络分析的案例。
在下一个道德问题中,我们将着眼于Curriculum 2001中编撰的the Tenth Strand的知识单元(核心内容)结构。之后,我们将展示两大主要的计算机组织IEEE(电气与电子工程师协会)和ACM(美国计算机协会)定义的计算机道德准则。我们通过一系列“如果…会怎样”的问题进行思考,并从个人道德责任扩展到每个人都涉及的问题。
我们意识到你们大多数人也许不会成为计算机专业人士,但是接下来要展示的思考和分析问题的技巧却会对你将从事的任意专业都有帮助。**
练习
从下列人名中选择练习1~10的答案。
A.?Leibniz B.?Pascal C.?Babbage D.?Lovelace E.?Hollerith F.?Byron G.?Turing H.?Jacquard
- 哪位法国数学家制造并出售了第一台齿轮传动的、能够计算加法和减法的机械机器?
- 谁制造了第一台能够计算加法、减法、乘法和除法的机械机器?
- 谁设计了第一台具有存储器的机械机器?
- 谁是第一位程序设计员?
- 谁提出了用穿孔卡片进行人口普查?
- 谁编辑了Babbage的著作?
- Ada Lovelace的父亲是谁?
- 《Code Breakers》这本书中提到了谁?
- 谁提出了用于织布的孔的概念?
- 谁与IBM相关?
在下列清单中,为练习11~23的硬件选出匹配的一代。
A.?第一代 B.?第二代 C.?第三代
D.?第四代 E.?第五代
- 电路板
- 晶体管
- 磁芯存储器
- 卡片输入/输出
- 并行计算
- 磁鼓
- 磁带驱动器
- 集成电路
- 个人计算机
- 真空管
- 大规模集成电路
- 磁盘
- 连网
在下列清单中,为练习24~38的软件或软件概念选出匹配的一代。
A.?第一代 B.?第二代 C.?第三代
D.?第四代 E.?第五代
- 汇编器
- FORTRAN
- 操作系统
- 结构化程序设计
- 分时
- HTML(用于Web)
- 装入器
- 电子制表软件
- 文字处理软件
- Lisp
- PC-DOS
- 绑定在操作系统中的装入器和连接器
- Java
- SPSS
- C++
为练习39~59中的问题提供简短的答案。 - 如何理解“20世纪80年代和20世纪90年代的特征是用户概念的改变”这句话?
- 请解释Mosaic浏览器的重要性。
- 请讨论浏览器战争。
- 请描述2002年之后Web的变化。
- 请结合1.2.3节中列出的预言,说一说这之中你认为哪一条预言存在最大的判断错误,并解释。
- 请列举出每个从业人员都需要的四个领域的技巧。
- 计算机科学中的应用分区与计算机作为工具的用途相关,请列出这6种分区。
- 请区分计算工具和计算学科。
- 计算是数学学科、科学学科还是工程学学科?请解释。
- 在计算学科中,请区分系统领域和应用程序领域。
- 定义术语抽象,并将其与图1-2中的图关联。
- 对比表1-1和表1-2,请说一说你看到的变化趋势。
- 请定义术语协议,并解释在计算中如何使用它。
- 请区分机器语言和汇编语言。
- 请区分汇编语言和高级语言。
- FORTRAN和COBOL是在第二代计算机软件中定义的高级语言。比较这两种语言的历史和用途。
- 请区分汇编器和编译器。
- 请区分系统程序员和应用程序员。
- 操作系统开发的基本原理是什么?
- 什么构成了系统软件?
-
下列软件的用途是什么?
a)装入器 b)连接器 c)编辑器
- SPSS与它之前的程序有什么区别?
思考题 - 请识别学校环境中的5种抽象,说明它们隐藏了什么细节,以及抽象如何有助于管理复杂度。
- 请讨论抽象在计算机软件史上的角色。
- 请解释the Tenth Strand的含义。
- 你之前有没有曾经参加过道德课程?如果有,请分享一下在这个过程中你研究了什么课题。