具体描述
《计算机科学概论》是计算机科学概论课程的经典教材,全书对计算机科学做了百科全书式的精彩阐述,充分展现了计算机科学的历史背景、发展历程和新的技术趋势。《计算机科学概论》首先介绍的是信息编码及计算机体系结构的基本原理,进而讲述操作系统和组网及因特网,接着探讨算法、程序设计语言及软件工程,然后讨论数据抽象和数据库方面的问题,讲述图形学的一些主要应用以及人工智能,以计算理论的介绍结束全书。《计算机科学概论》在内容编排上由具体到抽象逐步推进,很适合教学安排,每一个主题自然而然地引导出下一个主题。此外,书中还包含大量的图、表和示例,有助于读者对知识的了解与把握。
第12版主要是将Python程序设计语言方面的介绍纳入了重点章节,除了增加与Python相关的内容,几乎每一章都能看到对前一版对应章节的修订、更新以及修正。
作者简介
J. Glenn Brookshear 世界知名的计算机科学教育家。他在1975年获得新墨西哥州立大学博士后,创办了Marquette大学的计算机科学学位项目,并在该校任教至今。他的主要研究方向是计算理论。除了本书之外,他还著有《Theory of Computationr: Formal Languages, Automata, and Complexity》。
目录信息
0.1 算法的作用 1
0.2 计算机器的由来 3
0.3 学习大纲 6
0.4 计算机科学的首要主题 7
0.4.1 算法 8
0.4.2 抽象 9
0.4.3 创新 9
0.4.4 数据 10
0.4.5 程序设计 10
0.4.6 因特网 10
0.4.7 影响 11
社会问题 11
课外阅读 13
第1章 数据存储 14
1.1 位和位存储 14
1.1.1 布尔运算 14
1.1.2 门和触发器 15
1.1.3 十六进制记数法 18
1.2 主存储器 19
1.2.1 存储器结构 19
1.2.2 存储器容量的度量 20
1.3 海量存储器 21
1.3.1 磁系统 21
1.3.2 光系统 22
1.3.3 闪存驱动器 23
1.4 用位模式表示信息 24
1.4.1 文本的表示 24
1.4.2 数值的表示 26
1.4.3 图像的表示 27
1.4.4 声音的表示 27
*1.5 二进制系统 29
1.5.1 二进制记数法 29
1.5.2 二进制加法 30
1.5.3 二进制中的小数 31
*1.6 整数的存储 32
1.6.1 二进制补码记数法 33
1.6.2 余码记数法 35
*1.7 小数的存储 37
1.7.1 浮点记数法 37
1.7.2 截断误差 38
*1.8 数据与程序设计 40
1.8.1 Python入门 41
1.8.2 你好,Python 41
1.8.3 变量 42
1.8.4 运算符和表达式 43
1.8.5 货币转换 44
1.8.6 调试 44
*1.9 数据压缩 45
1.9.1 通用的数据压缩技术 45
1.9.2 图像压缩 47
1.9.3 音频和视频压缩 48
*1.10 通信差错 49
1.10.1 奇偶校验位 49
1.10.2 纠错码 50
复习题 52
社会问题 55
课外阅读 56
第2章 数据操控 57
2.1 计算机体系结构 57
2.1.1 CPU基础知识 57
2.1.2 存储程序概念 58
2.2 机器语言 59
2.2.1 指令系统 60
2.2.2 一种演示用的机器语言 61
2.3 程序执行 64
2.3.1 程序执行的一个例子 65
2.3.2 程序与数据 67
*2.4 算术/逻辑指令 69
2.4.1 逻辑运算 69
2.4.2 循环移位运算及移位运算 70
2.4.3 算术运算 71
*2.5 与其他设备通信 72
2.5.1 控制器的作用 72
2.5.2 直接存储器存取 74
2.5.3 握手 74
2.5.4 流行的通信媒介 74
2.5.5 通信速率 75
*2.6 数据操控编程 76
2.6.1 逻辑运算和移位运算 76
2.6.2 控制结构 77
2.6.3 输入和输出 79
2.6.4 马拉松训练助手 80
*2.7 其他体系结构 82
2.7.1 流水线 82
2.7.2 多处理器机器 83
复习题 84
社会问题 89
课外阅读 90
第3章 操作系统 91
3.1 操作系统的历史 91
3.2 操作系统的体系结构 94
3.2.1 软件概述 94
3.2.2 操作系统组件 96
3.2.3 系统启动 98
3.3 协调机器的活动 100
3.3.1 进程的概念 100
3.3.2 进程管理 100
*3.4 处理进程间的竞争 102
3.4.1 信号量 102
3.4.2 死锁 103
3.5 安全性 105
3.5.1 来自外部的攻击 106
3.5.2 来自内部的攻击 106
复习题 108
社会问题 110
课外阅读 110
第4章 组网及因特网 112
4.1 网络基础 112
4.1.1 网络分类 112
4.1.2 协议 113
4.1.3 组合网络 115
4.1.4 进程间通信的方法 117
4.1.5 分布式系统 118
4.2 因特网 118
4.2.1 因特网体系结构 119
4.2.2 因特网编址 120
4.2.3 因特网应用 122
4.3 万维网 126
4.3.1 万维网实现 126
4.3.2 HTML 127
4.3.3 XML 129
4.3.4 客户端和服务器端的活动 130
*4.4 因特网协议 132
4.4.1 因特网软件的分层方法 132
4.4.2 TCP/IP协议簇 134
4.5 安全性 136
4.5.1 入侵的形式 136
4.5.2 防护和对策 137
4.5.3 加密 138
4.5.4 网络安全的法律途径 140
复习题 142
社会问题 143
课外阅读 144
第5章 算法 146
5.1 算法的概念 146
5.1.1 非正式的回顾 146
5.1.2 算法的正式定义 147
5.1.3 算法的抽象本质 148
5.2 算法的表示 148
5.2.1 原语 149
5.2.2 伪代码 151
5.3 算法的发现 154
5.3.1 问题求解的艺术 155
5.3.2 迈出第一步 156
5.4 迭代结构 159
5.4.1 顺序搜索算法 159
5.4.2 循环控制 160
5.4.3 插入排序算法 164
5.5 递归结构 167
5.5.1 二分搜索算法 167
5.5.2 递归控制 171
5.6 效率和正确性 174
5.6.1 算法效率 174
5.6.2 软件验证 177
复习题 180
社会问题 185
课外阅读 185
第6章 程序设计语言 186
6.1 历史回顾 186
6.1.1 早期程序设计语言 186
6.1.2 机器无关和超越机器无关 188
6.1.3 程序设计范型 189
6.2 传统的程序设计概念 192
6.2.1 变量和数据类型 193
6.2.2 数据结构 195
6.2.3 常量和字面量 196
6.2.4 赋值语句 197
6.2.5 控制语句 198
6.2.6 注释 201
6.3 过程单元 202
6.3.1 函数 202
6.3.2 参数 203
6.3.3 有返回值的函数 205
6.4 语言实现 207
6.4.1 翻译过程 207
6.4.2 软件开发包 212
6.5 面向对象程序设计 213
6.5.1 类和对象 213
6.5.2 构造器 216
6.5.3 附加特性 217
*6.6 程序设计并发活动 218
*6.7 说明性程序设计 220
6.7.1 逻辑推演 220
6.7.2 Prolog 222
复习题 224
社会问题 227
课外阅读 228
第7章 软件工程 229
7.1 软件工程学科 229
7.2 软件生命周期 231
7.2.1 周期是个整体 231
7.2.2 传统的开发阶段 232
7.3 软件工程方法学 234
7.4 模块化 236
7.4.1 模块式实现 236
7.4.2 耦合 238
7.4.3 内聚 239
7.4.4 信息隐藏 239
7.4.5 构件 240
7.5 行业工具 241
7.5.1 较老的工具 241
7.5.2 统一建模语言 242
7.5.3 设计模式 246
7.6 质量保证 247
7.6.1 质量保证的范围 247
7.6.2 软件测试 248
7.7 文档 249
7.8 人机界面 250
7.9 软件所有权和责任 252
复习题 254
社会问题 256
课外阅读 257
第8章 数据抽象 258
8.1 基本数据结构 258
8.1.1 数组和聚合 258
8.1.2 列表、栈和队列 259
8.1.3 树 260
8.2 相关概念 261
8.2.1 抽象 261
8.2.2 静态结构与动态结构 261
8.2.3 指针 262
8.3 数据结构的实现 263
8.3.1 存储数组 263
8.3.2 存储聚合 265
8.3.3 存储列表 266
8.3.4 存储栈和队列 268
8.3.5 存储二叉树 270
8.3.6 操控数据结构 272
8.4 一个简短的案例 273
8.5 定制的数据类型 277
8.5.1 用户定义的数据类型 277
8.5.2 抽象数据类型 278
8.6 类和对象 280
*8.7 机器语言中的指针 282
复习题 284
社会问题 287
课外阅读 288
第9章 数据库系统 290
9.1 数据库基础 290
9.1.1 数据库系统的重要性 290
9.1.2 模式的作用 291
9.1.3 数据库管理系统 292
9.1.4 数据库模型 293
9.2 关系模型 294
9.2.1 关系设计中的问题 294
9.2.2 关系运算 297
9.2.3 SQL 300
*9.3 面向对象数据库 302
*9.4 维护数据库的完整性 304
9.4.1 提交/回滚协议 304
9.4.2 锁定 305
*9.5 传统的文件结构 307
9.5.1 顺序文件 307
9.5.2 索引文件 309
9.5.3 散列文件 310
9.6 数据挖掘 313
9.7 数据库技术的社会影响 314
复习题 316
社会问题 319
课外阅读 320
第10章 计算机图形学 321
10.1 计算机图形学的范围 321
10.2 3D图形概述 322
10.3 建模 324
10.3.1 单个物体的建模 324
10.3.2 整个场景的建模 327
10.4 渲染 329
10.4.1 光-表面交互 329
10.4.2 裁剪、扫描转换和隐藏面的
消除 331
10.4.3 着色 333
10.4.4 渲染-流水线硬件 334
*10.5 处理全局照明 335
10.5.1 光线跟踪 336
10.5.2 辐射度 337
10.6 动画 338
10.6.1 动画基础 338
10.6.2 动力学和运动学 339
10.6.3 动画制作过程 340
复习题 341
社会问题 342
课外阅读 343
第11章 人工智能 344
11.1 智能与机器 344
11.1.1 智能体 344
11.1.2 研究方法 346
11.1.3 图灵测试 346
11.2 感知 347
11.2.1 理解图像 347
11.2.2 语言处理 349
11.3 推理 352
11.3.1 产生式系统 352
11.3.2 搜索树 354
11.3.3 启发式法 356
11.4 其他研究领域 360
11.4.1 知识的表达和处理 360
11.4.2 学习 361
11.4.3 遗传算法 362
11.5 人工神经网络 363
11.5.1 基本特性 363
11.5.2 训练人工神经网络 365
11.5.3 联想记忆 367
11.6 机器人学 369
11.7 后果的思考 371
复习题 372
社会问题 376
课外阅读 377
第12章 计算理论 378
12.1 函数及其计算 378
12.2 图灵机 380
12.2.1 图灵机的原理 380
12.2.2 丘奇-图灵论题 382
12.3 通用程序设计语言 383
12.3.1 Bare Bones语言 383
12.3.2 用Bare Bones语言编程 385
12.3.3 Bare Bones的通用性 385
12.4 一个不可计算的函数 387
12.4.1 停机问题 387
12.4.2 停机问题的不可解性 388
12.5 问题的复杂性 391
12.5.1 问题复杂性的度量 391
12.5.2 多项式问题与非多项式问题 394
12.5.3 NP问题 395
*12.6 公钥密码学 397
12.6.1 模表示法 398
12.6.2 RSA公钥密码学 399
复习题 400
社会问题 403
课外阅读 404
附录A ASCII码 405
附录B 用于处理二进制补码表示的电路 406
附录C 一种简单的机器语言 408
附录D 高级程序设计语言 410
附录E 迭代结构与递归结构的等价性 412
索引 414
· · · · · · (收起)
读后感
建议非专业的人士一定要读一读,信息时代了,基本的信息技能是一个合格社会劳动者的基本要求。而这本书是大而全的计算机百科全书,当然都是简单的解释,计算机科学太庞大了,不是一本书可以解释清楚的。很适合非专业人士了解计算机科学。
这本书浅显易懂,运用图表将比较艰深的问题以较为清晰的形式描述出来。整本书逻辑严密,关键术语解释清楚,是计算机学科入门的优秀基础教材。相比较于其他类似教材,连篇累牍的陈述,缺乏图标的阐释,该书的确是用心良苦,煞费苦心,堪称典范。
本书以令人满意的深度和广度展现了计算机科学的基本框架。此类其它书籍更多地由于刻意回避被认为不适合初学者的话题或者内容而显得鸡肋,而本书则对全部的话题做了适度的展开,这使之同时能够实现以下两种功能。其一,充当计算机科学初学者的启蒙教材。本书清晰的条理...
本书以令人满意的深度和广度展现了计算机科学的基本框架。此类其它书籍更多地由于刻意回避被认为不适合初学者的话题或者内容而显得鸡肋,而本书则对全部的话题做了适度的展开,这使之同时能够实现以下两种功能。其一,充当计算机科学初学者的启蒙教材。本书清晰的条理...
介绍的内容很有深度,但是很好懂。 以算法为核心。 作者非常担心你不明白,所以不厌其烦的详细讲解。而且每小节后的练习都有答案。(每章的复习题没有答案)故此书很适合自学。 错误还是相当多的,我把我读的过程中发现的错误放在这里:(这是一个wiki,如果你发现了其他错误,...
用户评价
这本书的语言风格极其古板和学术化,阅读起来就像在啃一块干燥的石头。作者似乎完全不了解如何用生动、现代的方式来吸引读者的注意力。大量的长难句和不必要的修饰语充斥其中,使得获取一个核心概念需要反复阅读好几遍才能勉强理解。例如,在解释面向对象编程时,它用了一种极其绕口的哲学辩证法来描述封装性,而不是直接用一个清晰的类和对象实例来展示其益处。我感觉作者是在炫耀自己的词汇量和学术背景,而不是在认真地传授知识。此外,书中对一些新兴技术和发展趋势的捕捉明显滞后。比如,提到云计算和大数据时,使用的案例和术语都显得过时,没有体现出近五年计算机科学领域的巨大变革。这种“时间胶囊”般的体验,让我怀疑这本书的修订频率是否跟得上行业发展的步伐。如果一本教材不能与时俱进,它很快就会成为历史的脚注,而不是通往未来的阶梯。
这本书的习题设置完全脱离了实际的学习需求,更像是对概念的机械性复述,缺乏真正的挑战性和启发性。很多练习题的答案在书后也找不到,或者提供的参考答案过于简单粗暴,完全没有展示推导过程,这使得我们在自学时遇到困难后无从下手。更让我抓狂的是,很多“动手实践”的部分只是停留在口头上,比如它会提到“尝试用你选择的语言实现一个缓冲区溢出防护机制”,但完全没有给出任何初步的指导或者可以参考的框架,这对于新手来说几乎是不可能完成的任务。它似乎假设读者已经拥有了扎实的高级编程能力和实验环境搭建能力,这与它作为“入门”教材的定位完全矛盾。一本好的教材应该能引导学生逐步构建知识体系,并在实践中巩固理解,但这本教材更像是在知识的悬崖边上把你推下去,然后告诉你“自己想办法飞起来”。这种放羊式的教学方法,只会让许多有热情的初学者迅速感到沮丧并放弃。
我对这本书中对“跨学科应用”的论述感到非常失望。它在引言部分慷慨激昂地宣称计算机科学是现代所有学科的基础,但在后续章节中,这种宏大的叙事几乎完全消失了。它只是孤立地介绍了算法和数据结构,然后就回到了纯粹的理论推导中,完全没有展示这些工具是如何在生物信息学、金融建模或现代媒体处理中发挥关键作用的。这种脱节使得学习过程显得枯燥且缺乏目标感——我学这些复杂的计算模型到底有什么用?这本书似乎完全没有意识到,对于今天的学生而言,理解技术如何解决现实世界中的跨领域问题,远比记住某一个特定算法的复杂度分析更为重要。它更像是一部纯粹的“计算机科学史”的教科书,而不是一部教导我们如何利用这些工具去创造未来的实用指南。缺乏与实际应用场景的紧密结合,使得整本书的知识点显得漂浮不定,难以沉淀为可以实际操作的能力。
这本书的排版简直是一场灾难,插图模糊不清,很多关键的图示都没有清晰的标注,阅读体验极差。尤其是关于数据结构那一章,作者似乎完全不理解初学者在面对抽象概念时的困惑,用词晦涩难懂,完全没有提供足够的例子来辅助理解。我花了大量时间去猜测图表到底想表达什么,而不是去学习核心概念。更令人沮丧的是,书中的代码示例似乎是几十年前的版本,很多语法在现代编程环境中已经完全不适用,甚至有些示例根本无法运行。这对于希望通过实践来巩固知识的读者来说,无疑是巨大的障碍。感觉作者只是简单地将旧版本的内容堆砌在一起,丝毫没有进行现代化的修订和优化。如果一个入门教材连清晰的表达和实用的示例都做不到,那它的存在价值就非常可疑了。这本书在装帧设计上也没什么亮点,纸张质量一般,印刷的墨迹有时候浓淡不一,长时间阅读眼睛很容易疲劳。对于一本声称是“第12版”的权威教材来说,这种粗糙的制作水平是完全不能接受的。
我必须承认,这本书在理论深度上的挖掘是令人印象深刻的,它似乎试图涵盖计算机科学的每一个角落,但正是这种贪婪导致了内容的严重碎片化和不平衡。例如,关于计算理论的部分写得极其详尽,引用了大量的数学证明,这对有扎实数学基础的读者或许是宝贵的资料,但对于我这种主要想了解现代软件工程实践的读者来说,简直是天书。它花了数十页去论证一个在实际应用中可能只需要几行代码就能解决的问题的复杂度,却对操作系统中进程间通信的实际陷阱一带而过。这种偏科现象使得这本书更像是一本针对特定学术方向的参考手册,而不是一本面向大众的“概论”。你读完关于图灵机的部分可能会觉得自己在读一本数学专著,但当你翻到网络协议部分时,会发现讲解得极其肤浅,像是匆忙塞进去的附录。我期待的是一个全面且均衡的视角,而不是这种在某些领域过度钻研,而在其他关键领域严重不足的畸形结构。这本书给我的感觉是作者在不同时间点写了不同章节,最后拼凑起来,缺乏统一的教学思路和目标读者定位。
深入浅出的对计算机科学进行了介绍,避免了初学者“只见树木,不见森林”的情况。每一章后面所包含的对于伦理学的问题在理工科的教材里十分少见,这也反映了作者对于现代计算机方向的从业者的期许。阅读思考这一部分会有很多的收获。 同时,这本书也有很多方面值得其他学科的学习者借鉴的地方。他山之石,可以攻玉
深入浅出的对计算机科学进行了介绍,避免了初学者“只见树木,不见森林”的情况。每一章后面所包含的对于伦理学的问题在理工科的教材里十分少见,这也反映了作者对于现代计算机方向的从业者的期许。阅读思考这一部分会有很多的收获。 同时,这本书也有很多方面值得其他学科的学习者借鉴的地方。他山之石,可以攻玉
起到了扫盲的作用。看目录就知道很系统,作为入门书非常棒了。
整体来说还不错。 前面的章节都还可以,就是数据库开始有点乱了。不过一大部分原因是我没有数据库的基础,但也说明这部分对新手来说有点够呛。 每章的复习题都没有做;每节的习题凭眼缘挑着做;倒是社会问题经常给人一种新的思考角度,所以都一一看了并且思考了。这也真的是这本书的一大亮点了。
加深对计算机学科的整体了解,从这个意义上讲对得起“概论”这两个字。