目录 1
第1章 绪论 1
1.1 计算机科学与技术方法论产生的历史背景 1
1.1.1 早期关于“计算机科学”名称的争论 2
1.1.2 《计算作为一门学科》报告的主要成果及其局限性 2
1.1.3 CC1991的主要成果 3
1.1.4 CC2001的主要成果 4
1.1.5 计算教育面临的3个重大问题 4
1.1.6 计算机科学与技术方法论的提出 5
1.2 计算机科学与技术方法论的建立 6
1.2.1 计算机科学与技术方法论的定义 6
1.2.2 计算学科二维定义矩阵 7
1.2.3 计算学科的本质问题归约为定义矩阵本质问题的说明 8
1.3 计算机科学与技术方法论作为一个理论体系的阐述 9
1.3.1 作为理论体系的科学技术方法论 10
1.3.2 作为理论体系的计算机科学与技术方法论 12
1.4 计算机科学与技术方法论研究的意义 14
思考题 16
第2章 计算学科中的科学问题 17
2.1 概述 17
2.1.1 科学问题的定义 17
2.1.2 科学问题的主要特征和方法论作用 17
2.2 计算的本质、计算学科的定义及其根本问题 18
2.2.1 计算本质的认识历史 18
2.2.2 康托尔的集合论和罗素悖论 19
2.2.4 图灵对计算本质的揭示 20
2.2.3 希尔伯特纲领 20
2.2.5 现代计算机的产生以及计算学科的定义 21
2.2.6 计算学科的根本问题 22
2.2.7 从计算的角度认知思维、视觉和生命过程 23
2.3 计算学科各主领域的基本问题 23
2.4 计算学科中的典型问题及其相关内容 27
2.4.1 哥尼斯堡七桥问题 28
2.4.2 梵天塔问题 29
2.4.3 算法复杂性中的难解性问题、P类问题和NP类问题 31
2.4.4 证比求易算法 32
2.4.5 P=?NP 33
2.4.6 旅行商问题与组合爆炸问题 34
2.4.7 生产者-消费者问题与“哲学家共餐”问题 36
2.4.8 GOTO语句的问题以及程序设计方法学 37
2.5 人工智能中的若干哲学问题 38
2.5.1 图灵测试 38
2.5.2 西尔勒的“中文屋子” 40
2.5.3 计算机中的博弈问题 40
思考题 42
第3章 计算学科中的3个学科形态 44
3.1 一个关于“学生选课”的例子 44
3.1.1 对“学生选课”例子的感性认识 44
3.1.2 对“学生选课”例子的理性认识 46
3.1.3 “学生选课”系统的工程设计 47
3.2.3 例子中有关抽象形态的主要内容及其简要分析 49
3.2.2 计算学科中有关抽象形态的论述 49
3.2.1 一般科学技术方法论中有关抽象形态的论述 49
3.2 抽象形态 49
3.3 理论形态 50
3.3.1 一般科学技术方法论中有关理论形态的论述 50
3.3.2 计算学科中有关理论形态的论述 50
3.3.3 例子中有关理论形态的主要内容及简要分析 50
3.4 设计形态 50
3.4.1 一般科学技术方法论中有关设计形态的论述 50
3.4.2 计算学科中有关设计形态的论述 51
3.4.3 例子中有关设计形态的主要内容及简要分析 51
3.5 3个学科形态的内在联系 52
3.5.1 一般科学技术方法论中有关3个学科形态内在联系的简要论述 52
3.5.2 计算学科中有关3个学科形态内在联系的论述 52
3.5.3 关系数据库领域中3个学科形态内在联系的有关内容 53
3.6 各主领域中3个学科形态的主要内容 54
3.7 计算机语言的发展及其3个学科形态的内在联系 59
3.7.1 自然语言与形式语言 59
3.7.2 图灵机与冯诺依曼型计算机 62
3.7.3 机器指令与汇编语言 66
3.7.4 以虚拟机的观点来划分计算机的层次结构 68
3.7.5 高级语言 70
3.7.6 应用语言 72
3.7.7 自然语言 73
3.7.8 小结 76
思考题 77
4.1.1 算法的历史简介 78
第4章 计算学科中的核心概念 78
4.1 算法 78
4.1.2 算法的定义和特征 79
4.1.3 算法实例 80
4.1.4 算法的表示方法 82
4.1.5 算法分析 88
4.2 数据结构 89
4.2.1 数据结构的基本概念 89
4.2.2 常用的几种数据结构 90
4.2.3 树和二叉树 90
4.2.4 图 91
4.4 软件 92
4.3 程序 92
4.5 硬件 93
4.6 CC1991报告提取的核心概念 93
思考题 95
第5章 计算学科中的数学方法 97
5.1 数学的基本特征 97
5.2 数学方法的作用 98
5.3 计算学科中常用的数学概念和术语 98
5.3.1 集合 98
5.3.2 函数和关系 100
5.3.3 字母表、字符串和语言 101
5.3.4 布尔逻辑 102
5.4.1 直接证明法和间接证明法 103
5.4.2 反证法 103
5.4 证明方法 103
5.3.5 定义、定理和证明 103
5.4.3 归纳法 104
5.4.4 构造性证明 105
5.5 递归和迭代 106
5.5.1 递归 106
5.5.2 迭代 108
5.6 公理化方法 109
5.6.1 理论体系 109
5.6.2 公理化方法 109
5.6.3 实例 110
5.7.2 形式化方法 111
5.7.1 具体公理系统和抽象公理系统 111
5.7 形式化方法 111
5.8 一个实例——Armstrong公理系统 113
5.8.1 预备知识 113
5.8.2 Armstrong公理系统 114
思考题 116
第6章 计算学科中的系统科学方法 117
6.1 系统科学的基本思想 117
6.1.1 系统科学的基本概念 118
6.1.2 系统科学遵循的一般原则 119
6.1.3 常用的几种系统科学方法 120
6.1.4 实例 121
6.2 结构化方法 122
6.2.2 结构化方法遵循的基本原则 123
6.2.1 结构化方法的产生和发展 123
6.2.3 结构化方法的核心问题 124
6.3 面向对象方法 126
6.3.1 面向对象方法的产生和发展 126
6.3.2 面向对象方法的基本思想 127
6.3.2 面向对象方法的核心问题 129
6.4 小结 130
思考题 131
第7章 形式化技术 132
7.1 形式化技术概述 132
7.2 形式化规格技术 134
7.2.1 形式化规格的定义及其分类 134
7.2.2 操作类规格技术 134
7.2.3 描述类规格技术 139
7.2.4 形式化规格技术的应用 143
7.3 形式化验证技术 144
7.3.1 模型检验 144
7.3.2 定理证明 146
思考题 147
第8章 社会和职业的问题 148
8.1 计算的历史 149
8.1.1 计算机史前史——1946年以前的世界 149
8.1.2 计算机硬件的历史 150
8.1.3 计算机软件的历史 151
8.1.4 计算机网络的历史 153
8.2.1 计算的社会内涵 154
8.2.2 网络的社会内涵 154
8.2 计算的社会背景 154
8.2.3 因特网的增长、控制和使用 155
8.2.4 有关性别的问题 156
8.3 道德分析的方法 157
8.3.1 道德选择 157
8.3.2 道德评价 158
8.3.3 道德选择中其他相关因素及道德选择过程 158
8.4 职业和道德责任 159
8.4.1 职业化的本质 159
8.4.2 软件工程师的道德准则及行为规范 159
8.4.3 检举政策 161
8.4.4 计算中的“可接受使用”政策 161
8.5.1 历史上软件风险的例子 162
8.5 基于计算机系统的风险和责任 162
8.5.2 软件的正确性、可靠性和安全性 163
8.5.3 软件测试 163
8.5.4 软件重用中隐藏的问题 164
8.5.5 风险评定与风险管理 164
8.6 知识产权 165
8.6.1 什么是知识产权 165
8.6.2 我国有关知识产权保护的现状 166
8.6.3 软件专利 167
8.6.4 有关知识产权的国际问题 168
8.7 隐私和公民自由 168
8.7.1 隐私保护的道德和法律基础 168
8.7.2 隐私保护的技术 169
8.7.3 电脑空间的言论自由 170
8.7.4 相关的国际问题和文化之间的问题 171
8.8 计算机犯罪 172
8.8.1 计算机犯罪及相关立法 172
8.8.2 黑客(Cracking/Hacking) 173
8.8.3 恶意计算机程序和拒绝服务攻击 173
8.8.4 防止计算机犯罪的策略 174
思考题 175
第9章 计算教育哲学 177
9.1 概述 177
9.2 计算教育哲学的第一个基本任务 178
9.3 计算教育哲学的第二个基本任务 178
9.3.1 如何定义一门学科 178
9.3.3 计算学科是“工科”还是“理科” 179
9.3.2 计算学科的本质、根本问题以及学科的未来 179
9.3.4 程序设计在计算学科中的地位 180
9.3.5 计算学科目前的核心课程能否培养学生计算方面的能力 180
9.3.6 在计算课程中如何做到理论与实践相结合 180
9.3.7 关于创新 181
9.3.8 关于能力的培养 182
9.4 计算教育哲学的第三个基本任务 182
9.4.1 技术的变化 183
9.4.2 文化的改变 183
9.4.3 制定教学计划的原则 184
9.4.4 未来计算教育的发展 185
思考题 187
附录 计算机科学知识体 188
参考文献 200