普林斯顿计算机公开课(原书第2版)
[美]布莱恩·W. 柯尼汉(Brian W. Kernighan) 著
从大师视角诠释计算常识做一个穿行于数字世界与现实世界的智者
本书作者布莱恩·W.柯尼汉(Brian W. Kernighan)教授是计算机领域的著名学者和先驱。关于布莱恩教授,人们耳熟能详的一个传奇是,他与C语言的发明者丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language一书被奉为C程序设计语言的经典之作。之后,许多编程语言教程中的第一个示例都是打印出一句“Hello,World!”,就像在用编程语言这一计算机语言向世界问好,这个示例就是布莱恩教授首创的。布莱恩教授在大名鼎鼎的贝尔实验室工作了30年左右,见证了UNIX这一伟大的操作系统的诞生,并做出了卓越贡献。他还与人合作完成了著名的图划分问题和旅行商问题的算法,也是AWK和AMLP两门编程语言的设计者之一。其中任何一项成就都足以让人倍感荣耀,但布莱恩教授的成就远不止这些。在这之后他任职于普林斯顿大学计算机科学系,并开设了一门名为“我们世界中的计算机”(Computers in Our World)的课程,介绍计算机、通信、互联网、数据等方面的核心知识和其中的隐私、安全等问题。这本书便是这门课程使用的教学材料。
布莱恩教授作为计算机专业领域和写作方面的世界级大师,其作品自然值得精读。本书一如布莱恩教授的其他著作,行文通俗易懂而又严谨,将构建数字世界的关键技术和思想娓娓道来,并与实际应用以及我们的生活关联起来,尤其关注这些技术带来的伦理问题。全书读起来轻松愉快,令人受益匪浅。
越来越多的人已离不开数字世界这一现实世界的“平行世界”,“人机共生,虚实交融”的数字化生存将不可逆转。互联网、人工智能、虚拟现实、区块链、元宇宙这些数字化技术会把人们的生活塑造成什么样子,以及可能把人类命运带向何方,无人可以准确预测,哪怕是相关领域中的专家也众说纷纭。但我想,数字世界带给我们的思考总是有益的。比如,一个比特可以取值0和1,这些比特之间的简单计算又可以产生新的编码,由此竟然就可以构建出复杂的数字世界。这不由得让我们联想到中国古代哲学提出的“道生一, 一生二, 二生三, 三生万物”,以及达·芬奇所说的“简单是终极的复杂”。联系到实际的计算形态,现在流行的深度学习也是从无数小的简单神经元构建出来的。这是否也会对我们的大脑是如何“涌现”出智能的这一问题给出一些启示?我们从现实世界抽象出数字世界,又从数字世界中得到启发并回过头来指导现实世界。由此我们看到,数字世界有助于“认识你自己”,而随着人工智能等技术的发展,重新思考这一几千年前提出的哲思变得刻不容缓。所以,技术会把人类带向何方,取决于人们从数字世界中获得多少智慧和有益的反思。这本书会带给我们很多这方面的智识。
内容简介
从1999年开始,每年秋天,普林斯顿大学都有一门大受欢迎的计算机课程。Kernighan教授正是这门课程的主讲,他从科学家视角诠释的计算常识,使来自各个专业的学生都深深受益。
基于课程讲义,Kernighan教授撰写了D is for Digital(2011)和本书第1版(2017),而今,这本书再度全面升级。书中沿用简洁易懂的风格来讲解硬件、软件、通信和数据知识,并更新了大量时事案例来讨论随着疫情的变化和在线工作的增加而带来的隐私和安全问题。这使得本书不仅成为每个人畅游数字世界的科普指南,更折射出作者的人文关怀和思想锋芒。
作者简介
布莱恩·W. 柯尼汉(Brian W. Kernighan)
计算机科学家,普林斯顿大学教授,曾任职于贝尔实验室计算机科学研究中心(1969~2000)。他与C语言之父Dennis Ritchie共同撰写的《C程序设计语言》是编程语言书籍中的典范,对世界各地的程序员产生了深远的影响。他还是AWK语言和AMPL语言的发明人,并参与了UNIX等众多系统的开发。
译者简介
戴开宇 复旦大学计算机科学技术学院教师、硕士生导师,复旦大学教师教学发展中心特邀研究员。博士毕业于上海交通大学计算机应用专业。主要研究方向为现代教育信息科学与技术、Web技术、网络虚拟环境、智能技术等。入选全国首届“高校计算机专业优秀教师奖励计划”。长期讲授“程序设计”等课程,坚持通专结合的教学理念,多门课程被认定为上海市一流本科课程、上海市本科重点课程。曾获复旦大学校级教学成果奖一等奖,上海市教学成果奖二等奖。
专家推荐
世界顶尖的作者,简洁明了的内容,邀你共同探索数字世界的奥妙,值得人手一本!——Eric Schmidt Google公司前CEO、Alphabet公司前执行董事长
关于技术所扮演的角色,书中的讨论尽显人文关怀,不愧为大家之作。无论是计算常识,还是技术与生活的关系,这些都将在很长一段时间内相互作用并影响我们的世界。
——Steve Mansfield-Devine,Network Security期刊
在作者笔下,计算机和因特网变得不再神秘,机器里的复杂芯片、新闻中的热点事件、全球化的技术创新,这些统统融为一体,每个读者都将受益匪浅。
——Harry Lewis,Blown to Bits的作者
每天都在和电脑打交道的我们,到底需要懂多少电脑知识?读这本书就够了!它不仅能帮我们轻松了解硬件、编程、算法和网络知识,还讨论了与每个人切身相关的隐私、监管和安全问题,有趣又有用。
——John MacCormick,狄金森学院
这是所有人都能看懂的计算机和电子通信常识,涵盖的主题非常丰富,读起来更是自然流畅。不论你是外行还是专家,都强烈推荐!
——Bryan Respass,博根郡高中
目录
中文版序
译者序
前言
引言 …… 1
第一部分 硬件
第1章 什么是计算机 …… 16
1.1 逻辑结构 …… 20
1.1.1 处理器 …… 21
1.1.2 主存储器 …… 22
1.1.3 二级存储器 …… 24
1.1.4 其他 …… 27
1.2 物理结构 …… 28
1.3 摩尔定律 …… 33
1.4 小结 …… 35
第2章 比特、字节和信息的表示 …… 38
2.1 模拟和数字 …… 39
2.2 模数转换 …… 41
2.2.1 图像的数字化 …… 41
2.2.2 声音的数字化 …… 43
2.2.3 电影的数字化 …… 47
2.2.4 文本的数字化 …… 48
2.3 比特、字节和二进制 …… 49
2.3.1 比特 …… 50
2.3.2 2的幂和10的幂 …… 52
2.3.3 二进制数值 …… 52
2.3.4 字节 …… 55
2.4 小结 …… 58
第3章 深入了解处理器 …… 60
3.1 玩具计算机 …… 61
3.1.1 第一个玩具程序 …… 62
3.1.2 第二个玩具程序 …… 64
3.1.3 分支指令 …… 66
3.1.4 内存中的表示 …… 70
3.2 真实的处理器 …… 71
3.3 缓存 …… 75
3.4 其他类型的计算机 …… 77
3.5 小结 …… 80
硬件部分小结
第二部分 软件
第4章 算法 …… 89
4.1 线性算法 …… 91
4.2 二分查找 …… 94
4.3 排序 …… 96
4.4 难题和复杂性 …… 102
4.5 小结 …… 107
第5章 编程与编程语言 …… 109
5.1 汇编语言 …… 110
5.2 高级语言 …… 112
5.3 软件开发 …… 123
5.3.1 库、接口和开发工具包 …… 124
5.3.2 bug …… 126
5.4 知识产权 …… 130
5.4.1 商业秘密 …… 131
5.4.2 商标 …… 131
5.4.3 版权 …… 131
5.4.4 专利 …… 133
5.4.5 许可 …… 135
5.5 标准 …… 138
5.6 开源软件 …… 140
5.7 小结 …… 143
第6章 软件系统 …… 144
6.1 操作系统 …… 145
6.2 操作系统是如何工作的 …… 154
6.2.1 系统调用 …… 155
6.2.2 设备驱动程序 …… 156
6.3 其他操作系统 …… 158
6.4 文件系统 …… 159
6.4.1 二级存储文件系统 …… 161
6.4.2 删除文件 …… 165
6.4.3 其他文件系统 …… 167
6.5 应用程序 …… 170
6.6 软件层次 …… 173
6.7 小结 …… 176
第7章 学习编程 …… 178
7.1 编程语言的基本概念 …… 180
7.2 第一个JavaScript程序 …… 182
7.3 第二个JavaScript程序 …… 184
7.4 循环和条件 …… 186
7.5 JavaScript库和接口 …… 190
7.6 JavaScript是如何工作的 …… 192
7.7 第一个Python程序 …… 193
7.8 第二个Python程序 …… 195
7.9 Python库和接口 …… 197
7.10 Python是如何工作的 …… 201
7.11 小结 …… 202
软件部分小结
第三部分 通信
第8章 网络 …… 215
8.1 电话与调制解调器 …… 216
8.2 有线电视和DSL …… 217
8.3 局域网和以太网 …… 220
8.4 无线网络 …… 224
8.5 手机 …… 227
8.6 带宽 …… 232
8.7 压缩 …… 233
8.8 错误检测与纠正 …… 237
8.9 小结 …… 239
第9章 互联网 …… 241
9.1 互联网概述 …… 243
9.2 域名和地址 …… 247
9.2.1 域名系统 …… 249
9.2.2 IP地址 …… 250
9.2.3 根服务器 …… 252
9.2.4 注册你自己的域名 …… 253
9.3 路由 …… 254
9.4 TCP/IP …… 257
9.4.1 互联网协议 …… 259
9.4.2 传输控制协议 …… 260
9.5 高层协议 …… 263
9.5.1 Telnet和SSH协议:远程登录 …… 264
9.5.2 SMTP:简单邮件传输协议 …… 265
9.5.3 文件共享和点对点协议 …… 268
9.6 互联网上的版权问题 …… 270
9.7 物联网 …… 273
9.8 小结 …… 275
第10章 万维网 …… 279
10.1 万维网是如何工作的 …… 281
10.2 HTML …… 283
10.3 cookie …… 287
10.4 动态网页 …… 289
10.5 网页之外的动态内容 …… 292
10.6 病毒、蠕虫和木马 …… 293
10.7 Web安全 …… 297
10.7.1 对客户端的攻击 …… 297
10.7.2 对服务器的攻击 …… 305
10.7.3 对传输中信息的攻击 …… 308
10.8 自我防御 …… 309
10.9 小结 …… 314
第四部分 数据
第11章 数据和信息 …… 319
11.1 搜索 …… 321
11.2 跟踪 …… 327
11.3 社交网络 …… 338
11.4 数据挖掘和聚合 …… 343
11.5 云计算 …… 347
11.6 小结 …… 354
第12章 人工智能和机器学习 …… 356
12.1 历史背景 …… 358
12.2 经典机器学习 …… 360
12.3 神经网络和深度学习 …… 364
12.4 自然语言处理 …… 368
12.5 小结 …… 372
第13章 隐私和安全 …… 376
13.1 密码学 …… 378
13.1.1 密钥加密 …… 381
13.1.2 公钥加密 …… 383
13.2 匿名 …… 390
13.2.1 Tor以及Tor浏览器 …… 391
13.2.2 比特币 …… 395
13.3 小结 …… 398
第14章 接下来会发生什么 …… 402
注解 …… 410
术语表 …… 430