计算机教育史上,有关整个学科综述性导引课程的构建问题是一个长期以来引起激烈争论的主题。本书分为三篇: 科学篇、工程篇和方法篇。其中科学篇从认知的角度粗线条介绍计算机学科的核心思想以及基本知识;工程篇从工程的角度介绍工程的一般概念以及软件工程和网络工程;方法篇从计算机学科方法论以及学习方法的角度介绍如何学习计算机学科。本书通过对计算机学科进行系统化和科学化的描述,以历史和发展的观点介绍每一个专题,将学生引入计算机学科各个富有挑战性的领域,引导学生正确认知和学习计算机学科。
本书内容丰富,知识面宽,涉及计算机专业一级学科的几乎所有主题,有相当的深度和广度,可作为计算机及相关专业计算机导论课程的教材,也可作为非计算机专业了解计算机学科的参考书。
在计算机教育史上,有关整个学科综述性导引课程的构建问题是一个长期以来引起激烈争论的主题。CC 2001报告指出,整个学科综述性导引课程的构建有助于推动学科的发展,并鼓励各种学术团体(如学会或研究会)以及教师个人从事这方面的研究。
“计算机应用基础”这类课程主要解决的是对计算机功能的工具性认识问题,对计算机学科而言,即使某人可以相当熟练地操作计算机,仍不能说他已相当了解计算机学科,计算机应用技术和应用计算机技术是有本质区别的。“计算机学科概论”这类课程通过对计算机学科进行系统化和科学化的描述,以严密的方式将学生引入计算机学科各个富有挑战性的领域,让学生了解计算机学科中那些富有智慧的核心思想,让学生理解和掌握计算机学科的基本原理和根本问题,以及解决问题的思维模式,引导学生去认识和学习计算机学科。
“计算机学科概论”课程内容丰富,知识面宽,涉及计算机专业一级学科的几乎所有主题,有相当的广度和深度,同时,作为第一门专业课,学生几乎没有任何计算机学科的专业知识背景,因此,学习起来比较困难,学生对于许多内容的理解只停留在表面,有些内容甚至根本就不能理解,这是很正常的。“计算机学科概论”课程的教学目标应该是:
(1) 对整个计算机学科有一个正确的初步认知。要在这一门课程中达到完全认知计算机学科是不现实的,对整个计算机学科较深入的认识和感悟是一个循序渐进的过程,也是一个长期的过程,需要倾注每一个从业者的毕生精力。
(2) 俯瞰计算机学科,才能达到一个整体的正确认知。了解整个学科的概貌,明确相关知识将来在什么课程中可以学到,在后续课程的学习中才能自觉搭建整个知识体系,避免“只见树木,不见森林”.
(3) 对课程中出现的大多数基本概念和术语定位在了解层次。这门课程的教学重点不在于让学生学到了哪些具体知识,深入学习和掌握这些具体知识属于后续课程的教学内容,有些知识恐怕要到研究生阶段才会接触到。 (4) 激发学习兴趣,给学生留下大量的疑问和问题,为后续课程的学习打下伏笔。这门课程的教学效果应该是学生对计算机学科的各个主题充满了兴趣和好奇,同时又产生了太多的不理解和疑问,非常渴望探索其中的科学道理。
总之,“计算机学科概论”课程的教学目标是认知和导学,通过这门课程,学生能够对整个计算机学科有一个正确的初步认知,明确怎样去认识和学习计算机学科,能够怀着兴趣带着问题去学习后续课程,那么这门课程的教学目标也就达到了。
从“计算机学科概论”课程的教学目标和一年级新生在学习中普遍关心的问题出发,本书的编写思想是:
(1) 粗线条地介绍整个学科的概貌,介绍计算机学科知识领域划分的过程、涵盖的问题以及学科的本质,使学生一进入本学科就有着清晰、明确的方向和认识,在学习过程中不再感到困惑和茫然。
(2) 概要地介绍计算机学科最核心的基本知识,使学生在大学生活的开始就知道,要构建一个什么样的知识体系,以及如何构建这个知识体系。计算机软硬件技术的不断更新,使得计算机学科的教育已经不能完全通过跟踪流行系统的变化来跟踪学科的发展,但是随着计算机科学技术的发展,大多数的基本知识还是不变的。
(3) 按照科学的思想方法,只有认识世界,才能够改造世界,因此,本课程的教学内容首先是认知计算机学科,然后介绍本学科的方法论以及科学的学习方法,使学生在后续的学习过程中掌握正确的学习方法,少走弯路。
(4) 写作风格上,采取高级科普的深度定位和通俗易懂的语言,对具体知识不做进一步的展开和详细介绍,不引入过多晦涩的专业词汇,大量插入图片,大量引用计算机行业的具体事例,大量运用生活中的实例进行类比。
(5) 计算机学科是不断发展的,为了理解计算机学科,必须尽可能地领悟各主题的基本思想及其发展趋势,因此,本书以历史和发展的观点介绍每一个主题。
本书由胡明和王红梅共同执笔,并在长春工业大学计算机科学与技术专业本科教学中使用了两年,听课的学生对书稿提出了许多宝贵意见。
第1章 计算机发展史1
1.1 计算工具的发展简史1
1.1.1 手动式计算工具1
1.1.2 机械式计算工具3
1.1.3 机电式计算机5
1.1.4 电子计算机6
1.2 计算机发展简史7
1.2.1 计算机硬件发展简史8
1.2.2 计算机软件发展简史11
1.2.3 计算机的发展趋势15
1.3 计算机的分类和特点17
1.3.1 计算机的分类17
1.3.2 计算机的特点19
1.4 计算机的应用领域19
1.4.1 科学计算19
1.4.2 数据处理20
1.4.3 实时控制21
1.4.4 辅助工程与辅助教育21
1.4.5 艺术与娱乐21
阅读材料: 中国计算机发展简史22
习题123
第2章 认识计算机学科25
2.1 什么是计算机学科25
2.1.1 什么是计算25
2.1.2 科学与学科27目录 计算机学科概论 2.1.3 计算机学科的定义28
2.1.4 计算机学科的根本问题29
2.1.5 计算机学科与其他学科的关系30
2.2 计算机学科的科学问题30
2.2.1 什么是科学问题31
2.2.2 计算机学科的科学问题31
2.3 计算机学科的经典问题32
2.3.1 GOTO语句问题与程序设计方法学32
2.3.2 哥尼斯堡七桥问题与图论33
2.3.3 哲学家共餐问题与进程同步34
2.3.4 汉诺塔问题与计算复杂性35
2.3.5 证比求易与NP类问题36
2.3.6 TSP问题与组合爆炸37
2.3.7 图灵测试与人工智能38
2.4 计算机学科的知识体系39
2.4.1 计算机科学40
2.4.2 计算机工程42
2.4.3 软件工程46
2.4.4 信息系统46
2.4.5 信息技术47
阅读材料: 著名计算机组织48
习题249
第3章 计算机运算基础51
3.1 数理逻辑基础51
3.1.1 数理逻辑的起源和发展51
3.1.2 命题逻辑与命题代数52
3.1.3 逻辑代数54
3.2 二进制55
3.2.1 进位计数制56
3.2.2 二进制数和十进制数之间的转换57
3.2.3 二进制数与八进制数和十六进制数之间的转换59
3.3 数值数据的表示方法60
3.3.1 数的长度60
3.3.2 数的原码、反码和补码60
3.3.3 数的定点表示和浮点表示62
3.4 逻辑电路64
3.4.1 门64
3.4.2 电路66
3.4.3 集成电路68
阅读材料: 著名计算机奖项68
习题369
第4章 计算机硬件系统71
4.1 计算机硬件系统的基本组成71
4.1.1 计算机体系结构71
4.1.2 计算机的工作原理73
4.2 存储器75
4.2.1 存储器的层次结构75
4.2.2 内存储器76
4.2.3 外存储器78
4.2.4 高速缓冲存储器79
4.2.5 存储器的发展趋势80
4.3 中央处理器80
4.3.1 运算器80
4.3.2 控制器81
4.3.3 处理器的发展趋势83
4.4 输入输出设备84
4.4.1 输入设备84
4.4.2 输出设备85
4.4.3 输入/输出接口86
4.4.4 输入/输出设备的发展趋势87
阅读材料: 著名计算机公司87
习题488
第5章 计算机程序设计90
5.1 问题求解与程序设计90
5.1.1 问题求解的一般过程90
5.1.2 程序与程序设计91
5.2 程序设计语言92
5.2.1 程序的基本结构93
5.2.2 单词94
5.2.3 数据的表现形式95
5.2.4 表达式96
5.2.5 语法单位98
5.3 程序设计方法101
5.3.1 结构化程序设计102
5.3.2 面向对象程序设计102
5.3.3 程序设计方法的发展104
5.4 数据结构105
5.4.1 数据结构的起源和发展105
5.4.2 基本的数据结构105
5.4.3 数据结构在计算机中的存储方法107
5.5 算法和算法分析108
5.5.1 算法及描述算法的方法108
5.5.2 算法设计技术110
5.5.3 算法分析112
阅读材料: 几种经典的高级语言114
习题5115
第6章 计算机软件系统117
6.1 计算机软件系统的基本组成117
6.2 操作系统117
6.2.1 操作系统的定义118
6.2.2 操作系统的起源和发展119
6.2.3 操作系统的主要功能121
6.3 翻译程序123
6.3.1 翻译程序的工作方式123
6.3.2 编译程序的基本过程124
6.3.3 翻译程序的发展126
6.4 数据库管理系统126
6.4.1 数据库技术的产生和发展127
6.4.2 数据库与数据模型128
6.4.3 数据库管理系统129
6.4.4 数据库系统131
6.5 工具软件131
6.5.1 文件压缩软件131
6.5.2 文件下载软件132
6.5.3 防病毒软件133
6.6 计算机应用软件133
6.6.1 专用软件133
6.6.2 通用软件134
阅读材料: 开源软件138
习题6139
第7章 人机交互141
7.1 人机交互技术141
7.1.1 人机交互的起源和发展141
7.1.2 人机交互方式142
7.1.3 人机界面143
7.1.4 人机交互的发展趋势145
7.2 多媒体技术146
7.2.1 媒体、多媒体与超媒体146
7.2.2 多媒体信息的数字化147
7.2.3 多媒体信息的压缩152
7.3 虚拟现实技术153
7.3.1 虚拟现实的基本特征153
7.3.2 虚拟现实系统的组成154
7.3.3 虚拟现实的应用领域154
阅读材料: 如何预防计算机对人体健康的危害155
习题7156
第8章 人工智能158
8.1 什么是人工智能158
8.1.1 人工智能的定义158
8.1.2 人工智能的起源和发展159
8.1.3 人工智能的研究意义160
8.2 人工智能的研究方法161
8.2.1 符号智能一枝独秀161
8.2.2 计算智能异军突起162
8.2.3 智能Agent方兴未艾163
8.3 人工智能的研究与应用领域164
8.3.1 机器博弈164
8.3.2 专家系统165
8.3.3 数据挖掘与知识发现166
8.3.4 自然语言理解166
8.3.5 模式识别167
8.3.6 智能机器人168
阅读材料: 人机共生169
习题8170
第二篇 工 程 篇
第9章 认识工程171
9.1 什么是工程171
9.1.1 工程的定义171
9.1.2 科学、技术和工程的关系172
9.1.3 “科学-技术-工程-产业”链174
9.2 工程的几个关键问题175
9.2.1 工程理念175
9.2.2 工程决策176
9.2.3 工程管理176
9.2.4 工程进度177
9.3 工程创新178
9.3.1 创新思维的形式178
9.3.2 工程创新的体现179
9.4 工程教育180
9.4.1 我国工程教育的历史180
9.4.2 工程教育的特点181
9.5 信息化工程182
9.5.1 什么是信息化工程182
9.5.2 信息化工程的特点183
9.5.3 信息化工程的成本184
阅读材料: 从工程大国到工程强国,我们缺少什么185
习题9186
第10章 软件工程187
10.1 概述187
10.1.1 软件工程的发展简史187
10.1.2 软件工程的基本原理190
10.2 软件质量191
10.2.1 软件开发的复杂性191
10.2.2 软件质量特性192
10.3 软件过程193
10.3.1 软件生命周期193
10.3.2 软件开发模型194
10.3.3 软件能力成熟度模型196
10.4 软件开发方法197
10.4.1 结构化方法198
10.4.2 面向对象方法199
10.5 软件维护201
10.5.1 软件维护的定义201
10.5.2 与软件维护有关的问题202
10.6 软件项目管理202
10.6.1 成本估算203
10.6.2 进度安排204
10.6.3 人员组织205
10.6.4 软件配置管理206
阅读材料: 软件、硬件和人件207
习题10207
第11章 网络工程209
11.1 概述209
11.1.1 计算机网络的起源和发展209
11.1.2 计算机网络的定义和分类211
11.1.3 计算机网络的应用212
11.2 网络体系结构213
11.2.1 网络标准和协议214
11.2.2 OSI参考模型214
11.2.3 TCP/IP分层模型215
11.3 网络设备216
11.3.1 主机系统217
11.3.2 网络互联设备217
11.3.3 传输介质218
11.3.4 网络存储设备219
11.4 网络工程219
11.4.1 网络工程的含义220
11.4.2 网络工程的组织220
11.4.3 工程实施的要点222
11.5 网络信息安全222
11.5.1 信息加密222
11.5.2 身份认证223
11.5.3 防火墙224
11.5.4 入侵检测224
阅读材料: 我国Internet的起源和发展225
习题11226
第三篇 方 法 篇
第12章 计算机学科方法论229
12.1 什么是计算机学科方法论229
12.2 计算机学科的三个形态230
12.3 计算机学科的核心概念232
12.4 计算机学科的系统科学方法234
12.4.1 系统科学的基本概念234
12.4.2 系统科学遵循的一般原则235
12.5 计算机学科的典型方法236
12.5.1 抽象方法236
12.5.2 构造性方法237
12.5.3 公理化方法237
12.5.4 形式化方法238
12.5.5 原型方法与演化方法239
阅读材料: 计算机学科二维定义矩阵239
习题12240
第13章 如何学习计算机学科242
13.1 计算机学科的专业基础课242
13.1.1 专业基础课在计算机学科中的地位242
13.1.2 如何学好专业基础课243
13.2 数学思维能力的培养244
13.2.1 数学在计算机学科中的地位244
13.2.2 如何实现思维方式的数学化244
13.3 程序设计能力的培养246
13.3.1 程序设计在计算机学科中的地位246
13.3.2 如何提高程序设计能力246
13.4 实验和实践能力的培养247
13.4.1 实验在计算机学科中的地位247
13.4.2 如何提高实验和实践能力248
13.5 专业外语能力的培养249
13.5.1 专业外语在计算机学科的地位249
13.5.2 如何提高专业外语能力250
阅读材料: 大学学习中怎样听课和记笔记251
习题13253
第14章 职业与职业道德254
14.1 对计算机学科毕业生的要求254
14.1.1 科学素养254
14.1.2 知识、能力和素质255
14.1.3 专业能力与综合素质256
14.1.4 终生学习257
14.2 专业岗位258
14.2.1 信息时代对计算机人才的需求258
14.2.2 有关职位260
14.3 专业人员的职业道德260
14.3.1 道德选择261
14.3.2 职业责任261
14.3.3 软件工程师的道德规范262
14.4 计算机法律法规263
14.4.1 计算机软件知识产权263
14.4.2 计算机犯罪266
阅读材料: 逻辑炸弹268
习题14269
参考文献271