产品特色
内容简介
从1999年开始,作者在普林斯顿大学开设了一门名叫“我们世界中的计算机”的课程(COS109:ComputersinOurWorld),这门课是向非计算机专业的学生介绍计算机基本常识的,多年来大受学生追捧。除了向学生讲解计算机理论知识,这门课还有相应的实验课——学生可以试着用流行的编程语言写几行代码,大家一起讨论苹果、谷歌和微软的技术如何渗入日常生活的每个角落。本书就是以这门课程的讲义为主要内容重新编写而成,它解释了计算机和通信系统的工作原理,并讨论了新技术带来的隐私和安全问题。
目录
目 录
译者序
前言
引言
第一部分 硬件
第1章 计算机里有什么 6
1.1 逻辑结构 9
1.1.1 CPU 10
1.1.2 RAM 12
1.1.3 硬盘和其他二级存储器 13
1.1.4 其他 16
1.2 物理结构 17
1.3 摩尔定律 22
1.4 小结 24
第2章 位、字节和信息的表示 25
2.1 模拟和数字 26
2.2 模数转换 28
2.3 位、字节和二进制 36
2.3.1 位 36
2.3.2 2的幂和10的幂 38
2.3.3 二进制数 39
2.3.4 字节 42
2.4 小结 45
第3章 深入CPU 47
3.1 玩具计算机 48
3.1.1 第一个玩具程序 49
3.1.2 第二个玩具程序 51
3.1.3 跳转指令 53
3.1.4 RAM中的表示 56
3.2 真实的CPU 58
3.3 缓存 61
3.4 其他种类的计算机 63
3.5 小结 66
硬件总结 68
第二部分 软件
第4章 算法 74
4.1 线性算法 76
4.2 二分查找 78
4.3 排序 81
4.4 难题与复杂性 87
4.5 小结 90
第5章 编程与编程语言 93
5.1 汇编语言 94
5.2 高级语言 96
5.3 软件开发 105
5.3.1 库、接口和开发包 107
5.3.2 缺陷 109
5.4 知识产权 112
5.4.1 商业秘密 113
5.4.2 版权 113
5.4.3 专利 115
5.4.4 许可 117
5.5 标准 120
5.6 开源 121
5.7 小结 124
第6章 软件系统 126
6.1 操作系统 127
6.2 操作系统的工作原理 134
6.2.1 系统调用 136
6.2.2 设备驱动程序 136
6.3 其他操作系统 138
6.4 文件系统 139
6.4.1 磁盘文件系统 141
6.4.2 清除文件 144
6.4.3 其他文件系统 147
6.5 应用程序 148
6.6 软件的层次 152
6.7 小结 155
第7章 学习编程 157
7.1 编程语言的概念 159
7.2 第1个JavaScript范例 160
7.3 第2个JavaScript范例 162
7.4 循环语句 164
7.5 条件语句 166
7.6 库和接口 168
7.7 JavaScript的工作原理 170
7.8 小结 171
软件总结 173
第三部分 通信
第8章 网络 184
8.1 电话与调制解调器 185
8.2 电缆与DSL 186
8.3 局域网与以太网 189
8.4 无线 192
8.5 手机 195
8.6 带宽 200
8.7 压缩 202
8.8 错误检测与纠错 205
8.9 小结 207
第9章 因特网 209
9.1 因特网概述 211
9.2 域名与地址 215
9.2.1 域名系统 216
9.2.2 IP地址 218
9.2.3 根服务器 219
9.2.4 注册自己的域名 221
9.3 路由 222
9.4 TCP/IP 224
9.4.1 IP——因特网协议 226
9.4.2 TCP——传输控制协议 227
9.5 高层协议 229
9.5.1 Tel与SSH——远程登录 231
9.5.2 SMTP——简单邮件传输协议 232
9.5.3 文件共享与点对点协议 234
9.6 因特网上的版权 236
9.7 物联网 239
9.8 小结 240
第10章 万维网 244
10.1 万维网的工作原理 246
10.2 HTML 248
10.3 cookie 251
10.4 网页上的动态内容 254
10.5 其他地方的动态内容 256
10.6 病毒、蠕虫和特洛伊木马 258
10.7 网络安全 261
10.7.1 攻击客户机 262
10.7.2 攻击服务器 268
10.7.3 攻击传输中的信息 270
10.8 自我防御 271
10.9 小结 275
第11章 数据与信息 277
11.1 搜索 278
11.2 跟踪 285
11.3 社交网络 294
11.4 数据挖掘与聚合 298
11.5 云计算 302
11.6 小结 309
第12章 隐私与安全 311
12.1 加密 312
12.1.1 密钥加密 315
12.1.2 公钥加密 317
12.2 匿名 323
12.2.1 Tor与Tor浏览器 324
12.2.2 比特币 329
12.3 小结 331
第13章 结束语 335
注释 341
术语表 357
前言/序言
前 言从1999年秋季起,我就在普林斯顿大学教授一门名为“我们世界中的计算机”的课程。这门课程的名称实在模糊得过分,令人尴尬。这是某天我在不到5分钟的时间内想出的,结果“一失足成千古恨”,想要改名就难了。然而,在讲授这门课程这个本身就令人享受的工作中,教学是我所做过的最充满乐趣的事。
这门课是基于这样一种观察,即计算机和计算无处不在。每个学生都拥有计算机,这些计算机的功能都远比一台IBM 7094计算机强大得多。1964年,当我还是普林斯顿大学的一名研究生时,IBM 7094这台耗资上万美元搭建、占据了一个很大的空调房间的计算机,为整个校园提供着服务。现在每个学生都拥有计算能力远超过1964年的计算机的手机。与这世界上很大一部分人一样,大家还享受着高速的因特网连接。每个人都在线搜索、购物,并通过电子邮件、短信和社交网络与亲友保持联系。
然而这些只是计算机时代的冰山一角,更多的运用则藏在生活的表面之下。我们既看不见,通常也很少会考虑生活中接触的计算机,它们潜藏在家电、汽车、飞机,以及无所不在、司空见惯的数码产品中,诸如照相机、DVD播放器、平板电脑、GPS导航仪和电子游戏等。我们更不会想到像电话网络、有线电视、空中管制、电网、银行和金融服务这些基础设施有多么依赖于计算机运算。
大多数人不会直接参与这些系统的创建,然而它们对我们每一个人都有着重要影响,有些人还会做出与这些系统相关的重要决定。如此看来,如果人们能更好地了解计算机岂不会更好?一个受过教育的人至少应该了解最基础的计算机知识:计算机能做什么以及如何做到,计算机技术的局限性以及目前来说几乎难以达到的极限,计算机之间如何沟通,沟通时会发生什么,以及计算机和通信如何影响着我们身边的世界。
计算机技术的普遍性通过意想不到的方法影响着我们。监控系统的增长时不时提醒着我们隐私入侵和身份盗窃的危险,我们需要认识一下这些危险通过计算和通信技术所能达到的程度。
2013年6月,爱德华·斯诺登,美国国家安全局(NSA)的一位承包商,在向记者提供的文件中揭露了美国国家安全局对于几乎世界上所有人,尤其是居住于美国本土公民的电子通信的常规监控和信息收集。值得注意的是,这些本土公民对于他们的国家无法造成任何威胁,而情报机构对于电子通信的监控和信息采集覆盖了监控对象的电话、电子邮件以及网络使用。斯诺登的文件显示,其他国家也在对他们的公民进行暗中监视,例如英国的政府通信总部(GCHQ),其对于英国而言正相当于美国国家安全局之于美国的地位。情报机构之间会进行常规的情报共享,然而它们共享的并不是所有情报。也正因如此,美国国家安全局在窃听德国总理安格拉·默克尔的手机这件事对于德国情报界而言可能是有些震惊的。
这些集团对我们的跟踪和监控同时在线上及线下进行,所以对于任何人来说,保持匿名都是很困难的。海量数据的可获得性促成了在语音识别、图像识别和语言翻译方面的巨大进步,而这一切均以我们的隐私为代价。
罪犯在对数据存放处的攻击方面越来越有经验。政府和商业机构的电子非法闯入变得越来越频繁,有关顾客和职员的信息大量失窃,而这些信息常被用来进行诈骗和身份盗窃。不仅如此,针对个人的攻击也很常见。在过去,任何人只要单纯地忽略来自所谓的尼日利亚王子及其亲戚的邮件就可以安全地避开网络诈骗。然而当今有针对性的攻击如此普遍,已经成为导致公司计算机泄密的最常见手段之一了。
管辖权的问题也很难处理。欧盟已经要求主要搜索引擎提供“可遗忘权”这个机制,这样普通人可以将他们的在线历史排除在搜索引擎结果之外。对于那些利用位于欧盟(而非美国)境内的服务器存储欧盟公民数据的公司,欧盟也制定了相关的条款以要求它们实行相同的机制。当然,这些条款仅在欧盟境内生效,在世界上其他地区则因地而异。
云计算的快速采用使情况更加复杂。通过云计算,个人和公司在亚马逊、谷歌和微软以及其他一些服务商提供的服务器中存储数据并进行计算。数据不再由它们的所有者直接拥有,而是为第三方直接掌握,这些第三方有着不同的规程、责任和弱点,而且可能面临着不同的管辖权规定。
“物联网”也在飞速增长。在物联网中,各种设备都与因特网相连。一个最明显的例子当然是手机,但汽车、监视摄像头、家用电器及其控制器、医药设备,还有很多的基础设施如空中交通管制和电网之类都属于此。将能看见的所有设备都与因特网进行连接的这个趋势将会持续,因为相互连接的好处令人无可抗拒。然而不幸的是,物联网的尝试存在很多风险,例如与更加成熟的系统相比,设备的安全性更加脆弱。
密码学是应对这些隐患的有效抵抗策略之一,因为密报可以提供手段以保证通信和数据存储的私密。然而强大的密报也经受着持续攻击。个人、公司或恐怖分子可以拥有真正的私有通信,这个主意并不为政府所欢迎。因此,时常会有议案要求在密报机制中提供后门,这样就可以允许政府机构在有着“适当安全保障”、仅仅“为了国家安全”的前提下解除加密。然而,值得高度关注的一点是,这是个坏
普林斯顿大学计算机科学入门:探索数字世界的奥秘 “普林斯顿计算机公开课”并非一本具体的书籍名称,而是一个广为流传的、代表着普林斯顿大学计算机科学教育理念和开放共享精神的代名词。这个概念所指向的,是一系列由普林斯顿大学顶尖教授们精心设计、面向全球学习者的在线课程,它们以其严谨的学术深度、前沿的知识视野和清晰易懂的教学方式,为无数渴望理解计算科学精髓的探索者打开了一扇通往数字世界的大门。 这些“公开课”的价值,在于它们以一种突破时空限制的方式,将世界一流的计算机科学教育资源带给了普通大众。它们并非为了满足某个特定出版社的商业需求而撰写,也非迎合某种流行的短期学习热点。相反,它们是普林斯顿大学学术使命的延伸,是对知识共享的坚定承诺,更是对激发下一代计算人才热情的不懈追求。 核心课程体系:构建坚实的计算思维基石 “普林斯顿计算机公开课”最核心、最受欢迎的部分,通常围绕着计算机科学的基础概念展开。它们旨在培养学习者“计算思维”——一种能够理解问题、设计解决方案并分析其效率的思维模式。 算法与数据结构: 这是任何计算机科学学习者都绕不开的基石。公开课会深入剖析各种经典算法,如排序(快速排序、归并排序)、搜索(二分查找、广度优先搜索、深度优先搜索)以及图论中的算法。同时,它们会详细讲解数据结构,如链表、栈、队列、树(二叉树、堆)和图,以及如何根据问题的特性选择最合适的数据结构来优化算法的性能。学习者将理解时间复杂度和空间复杂度分析的重要性,学会如何评估一个算法的优劣,并从中领悟到效率是软件工程的核心考量之一。 编程语言基础与实践: 通常,这些公开课会以一到两种主流编程语言为载体,例如Java或Python。它们会从最基础的语法开始,逐步引导学习者掌握变量、数据类型、控制流(条件语句、循环)、函数、对象导向编程(类、对象、继承、多态)等核心概念。更重要的是,它们强调“动手实践”,通过大量的编程练习和项目,让学习者将理论知识转化为实际可运行的代码,亲身体验编程的乐趣和挑战。 计算机系统: 深入理解计算机是如何工作的,是成为一名优秀的程序员的必经之路。公开课会涉及计算机体系结构的基本原理,包括CPU的工作方式、内存管理、操作系统是如何管理硬件资源的,以及编译器和解释器是如何将人类可读的代码转化为机器可执行的指令。这部分内容能够帮助学习者理解为什么某些代码会运行得更快,为什么内存泄漏会发生,以及如何编写更高效、更可靠的程序。 离散数学与逻辑: 计算科学本质上是建立在数学和逻辑的基础之上的。这些课程会介绍逻辑学中的命题逻辑、谓词逻辑,以及集合论、图论、组合数学等离散数学概念。这些数学工具不仅是理解算法和数据结构的理论支撑,更是进行形式化证明、分析系统正确性的关键。 进阶主题的探索:视野的拓展与能力的深化 除了基础课程,“普林斯顿计算机公开课”也常常会触及更广泛、更前沿的计算机科学领域,为学习者提供更广阔的视野和更深入的探索方向。 网络与互联网: 随着互联网的普及,理解网络通信的原理变得至关重要。课程可能会讲解TCP/IP协议栈,包括HTTP、DNS、Socket编程等,让学习者了解数据如何在网络上传输,以及如何构建和维护网络应用程序。 数据库系统: 数据是现代信息社会的核心。公开课可能会介绍关系型数据库的基本概念,如SQL语言,以及数据库的设计原理、事务管理和并发控制,帮助学习者理解如何高效地存储、检索和管理大量数据。 人工智能与机器学习: 近年来,人工智能和机器学习成为了热门领域。虽然这些课程可能不会提供完整的AI硕士项目,但它们可能会 introd uce(介绍)机器学习的基本思想,如监督学习、无监督学习,以及一些常见的算法,如线性回归、逻辑回归、决策树等,让学习者对这个充满活力的领域有一个初步的认识。 软件工程与开发实践: 仅仅掌握编程语言是不够的,还需要学习如何高效地进行软件开发。课程可能会讨论软件开发的生命周期、版本控制工具(如Git)、测试驱动开发(TDD)、敏捷开发等实践,培养学习者良好的工程习惯。 信息安全: 在数字化时代,信息安全的重要性不言而喻。课程可能会涉及加密学的基本原理、常见的网络攻击方式以及如何防范,让学习者认识到保护信息安全的重要性。 普林斯顿的独特优势:严谨、创新与开放 “普林斯顿计算机公开课”之所以备受推崇,离不开普林斯顿大学在计算机科学领域的深厚积累和独特优势: 世界顶尖的师资力量: 普林斯顿大学汇聚了全球最优秀的计算机科学家。公开课的授课者往往是这些领域的佼佼者,他们将自己最前沿的研究成果和深刻的教学洞察融入到课程设计中。 前沿的研究导向: 普林斯顿大学在理论计算机科学、算法、人工智能、系统等多个领域都处于世界领先地位。这些研究成果常常会反映在公开课的内容中,让学习者能够接触到最新、最尖端的知识。 对基础知识的深刻理解: 普林斯顿的教育理念非常注重对学科基础的夯实。这些公开课不会仅仅教授“如何做”,更会深入探讨“为什么这么做”,帮助学习者建立起深刻的理论理解,从而能够举一反三,应对更复杂的挑战。 开放共享的精神: 普林斯顿大学积极响应教育公平的号召,通过Coursera、edX等平台,将高质量的计算机科学课程免费或以低廉的费用提供给全球学习者。这极大地降低了学习门槛,让更多人有机会接触到世界一流的教育资源。 注重解决实际问题的能力: 尽管强调理论基础,但普林斯顿的计算机科学教育同样注重培养学生的实践能力。公开课会包含大量的编程作业、小项目和挑战,让学习者在解决实际问题的过程中,巩固所学知识,提升编程技能。 谁适合学习? “普林斯顿计算机公开课”面向的受众非常广泛: 渴望进入计算机科学领域的初学者: 无论您是高中生、大学生,还是希望转行到IT行业的成年人,这些课程都能为您打下坚实的计算科学基础。 希望系统性学习计算机科学的学生: 它们可以作为大学课程的补充,帮助您更深入地理解理论知识,或是为您的学术生涯打下坚实的基础。 希望提升编程技能的开发者: 即使您已经是一名程序员,这些课程也能帮助您拓展知识边界,学习更高级的算法、数据结构或系统设计。 对计算科学充满好奇心的任何人: 计算机科学已经渗透到我们生活的方方面面,理解其基本原理,能够帮助您更好地理解这个数字时代。 总而言之,“普林斯顿计算机公开课”所代表的,是一种前沿、严谨、开放且极具影响力的计算机科学教育模式。它们并非一本具体的书籍,而是一个汇聚了普林斯顿大学智慧和资源的知识宝库,为全球学习者提供了一个系统、深入地探索计算科学奇妙世界的绝佳途径。通过学习这些课程,您将不仅仅掌握编程技能,更将培养出一种能够理解、分析和解决复杂问题的计算思维,为您的未来学习和职业发展奠定坚实的基础。