從1999年開始,作者在普林斯頓大學(xué)開設(shè)了一門名為“我們世界中的計算機”的課程(COS 109:Computers in Our World),這門課向非計算機專業(yè)的學(xué)生介紹計算機的基本常識,多年來大受學(xué)生追捧。本書就是基于這門課程的講義編寫而成的,書中不僅解釋了計算機和通信系統(tǒng)的工作原理,還分析了新技術(shù)帶來的隱私和安全問題。第2版的新增章節(jié)討論了Python編程、人工智能、機器學(xué)習(xí)以及大數(shù)據(jù)等內(nèi)容。本書適合所有希望了解數(shù)字世界的讀者閱讀,通過了解技術(shù)的工作原理、起源和未來發(fā)展趨勢,更好地理解并改變我們身處的世界。
中 文 版 序
計算機和通信系統(tǒng),以及由它們所實現(xiàn)的許多事物遍布我們周圍。其中一些在日常生活中隨處可見,比如筆記本電腦、手機和互聯(lián)網(wǎng)。今天,在任何公共場所,都會看到許多人在使用手機查詢交通路線、購物以及和朋友聊天。與此同時,大部分計算機世界卻是隱形的,比如電子設(shè)備、汽車、火車、飛機、電力系統(tǒng)和醫(yī)療設(shè)備中的計算機。這種幾乎不可見的基礎(chǔ)設(shè)施對我們產(chǎn)生了巨大的影響,如果沒有這些在后臺運行的系統(tǒng),我們所處的現(xiàn)代社會將會坍塌。大多數(shù)情況下,它們確實在正確地執(zhí)行任務(wù),一切運轉(zhuǎn)正常。但我們會不時得到令人不安的警示,這發(fā)生在當(dāng)這些系統(tǒng)出現(xiàn)問題時,或當(dāng)我們聽到各種系統(tǒng)正在悄悄收集、共享,甚至濫用這些數(shù)據(jù)時。
本書篇幅不大,但對計算機和通信系統(tǒng)如何工作進行了詳細和透徹的解釋。它主要面向希望能更好地了解他們所生活的世界的非技術(shù)人員,但本書也應(yīng)該會對那些對技術(shù)有所了解的人有幫助—這些讀者或者對本書的內(nèi)容感興趣,或者希望將本書作為向朋友和家人解釋技術(shù)系統(tǒng)的一份指南。本書展示了當(dāng)今的計算和通信世界是如何運作的,從硬件到軟件,再到互聯(lián)網(wǎng)和Web。本書也討論了新技術(shù)帶來的社會、政治和法律問題(雖然主要是從美國的角度),由此你可以理解我們所面臨的難題,并理解為了解決它們所必須做出的權(quán)衡。
20多年來,我一直使用本書中的材料為普林斯頓大學(xué)的學(xué)生授課,告訴他們計算機技術(shù)是如何影響世界的。未來,他們在擔(dān)任有責(zé)任、有權(quán)威和有影響力的職務(wù)時,將能夠就涉及技術(shù)的復(fù)雜問題做出明智的決定。計算機和通信技術(shù)一直在發(fā)展,但那些基本的問題仍然保持不變。
我相信,無論人們的背景如何,位于世界何處,更多地了解這項了不起且應(yīng)用廣泛的技術(shù)是很重要的—這項技術(shù)已經(jīng)并將繼續(xù)對我們的生活產(chǎn)生深遠的影響。非常高興戴開宇博士作為譯者的中文版即將與中國讀者見面,對于他的卓越工作我深表感謝。我希望你會享受閱讀本書的過程,并開卷有益。
布萊恩·W.柯尼漢
譯 者 序
收到機械工業(yè)出版社翻譯本書的邀請時,我欣然接受了這一任務(wù)。很重要的一個原因是,本書作者布萊恩·W.柯尼漢(Brian W. Kernighan)教授是計算機領(lǐng)域的著名學(xué)者和先驅(qū)。關(guān)于布萊恩教授,人們耳熟能詳?shù)囊粋傳奇是,他與C語言的發(fā)明者丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language一書被奉為C程序設(shè)計語言的經(jīng)典之作。之后,許多編程語言教程中的第一個示例都是打印出一句“Hello,World!”,就像在用編程語言這一計算機語言向世界問好,這個示例就是布萊恩教授首創(chuàng)的。因為翻譯這一機緣,我又了解到,布萊恩教授在大名鼎鼎的貝爾實驗室工作了30年左右,見證了UNIX這一偉大的操作系統(tǒng)的誕生,并做出了卓越貢獻。他還與人合作完成了著名的圖劃分問題和旅行商問題的算法,也是AWK和AMLP兩門編程語言的設(shè)計者之一。其中任何一項成就都足以讓人倍感榮耀,但布萊恩教授的成就遠不止這些。在這之后他任職于普林斯頓大學(xué)計算機科學(xué)系,并開設(shè)了一門名為“我們世界中的計算機”(Computers in Our World)的課程,介紹計算機、通信、互聯(lián)網(wǎng)、數(shù)據(jù)等方面的核心知識和其中的隱私、安全等問題。這本書便是這門課程使用的教學(xué)材料。
布萊恩教授作為計算機專業(yè)領(lǐng)域和寫作方面的世界級大師,其作品自然值得精讀。能擔(dān)當(dāng)他的著作的譯者,我感到非常榮幸。翻譯的過程也是細細品讀的過程。本書一如布萊恩教授的其他著作,行文通俗易懂而又嚴(yán)謹(jǐn),將構(gòu)建數(shù)字世界的關(guān)鍵技術(shù)和思想娓娓道來,并與實際應(yīng)用以及我們的生活關(guān)聯(lián)起來,尤其關(guān)注這些技術(shù)帶來的倫理問題。全書讀起來輕松愉快,令人受益匪淺。
我在大學(xué)里教授虛擬世界和計算思維相關(guān)的兩門通識課程,認(rèn)識到越來越多的人已離不開數(shù)字世界這一現(xiàn)實世界的“平行世界”,“人機共生,虛實交融”的數(shù)字化生存將不可逆轉(zhuǎn);ヂ(lián)網(wǎng)、人工智能、虛擬現(xiàn)實、區(qū)塊鏈、元宇宙這些數(shù)字化技術(shù)會把人們的生活塑造成什么樣子,以及可能把人類命運帶向何方,無人可以準(zhǔn)確預(yù)測,哪怕是相關(guān)領(lǐng)域中的專家也眾說紛紜。但我想,數(shù)字世界帶給我們的思考總是有益的。比如,一個比特可以取值0和1,這些比特之間的簡單計算又可以產(chǎn)生新的編碼,由此竟然就可以構(gòu)建出復(fù)雜的數(shù)字世界。這不由得讓我們聯(lián)想到中國古代哲學(xué)提出的“道生一, 一生二, 二生三, 三生萬物”,以及達·芬奇所說的“簡單是終極的復(fù)雜”。聯(lián)系到實際的計算形態(tài),現(xiàn)在流行的深度學(xué)習(xí)也是從無數(shù)小的簡單神經(jīng)元構(gòu)建出來的。這是否也會對我們的大腦是如何“涌現(xiàn)”出智能的這一問題給出一些啟示?我們從現(xiàn)實世界抽象出數(shù)字世界,又從數(shù)字世界中得到啟發(fā)并回過頭來指導(dǎo)現(xiàn)實世界。由此我們看到,數(shù)字世界有助于“認(rèn)識你自己”,而隨著人工智能等技術(shù)的發(fā)展,重新思考這一幾千年前提出的哲思變得刻不容緩。所以,技術(shù)會把人類帶向何方,取決于人們從數(shù)字世界中獲得多少智慧和有益的反思。我想這本書會帶給我們很多這方面的智識。
在此書翻譯完成之際,我首先想感謝布萊恩教授,感謝他在書中分享的智慧和見識。當(dāng)我郵件聯(lián)系布萊恩教授,希望他能為中國讀者作序時,他很快回復(fù)了郵件。而當(dāng)時他正和夫人在英國旅行,也就是本書引言中說原計劃2020年出發(fā),后來被新冠肺炎疫情打斷的旅行,郵件中甚至分享了許多旅途中的照片。世界級大師的謙遜和平易近人,本身就傳遞了教育的內(nèi)涵。感謝復(fù)旦大學(xué)外文學(xué)院郭曄老師在書中三首英文詩歌的翻譯方面給出了熱情而專業(yè)的幫助。同時,由于本人水平有限,翻譯中肯定還有紕漏,歡迎指正,先謝謝大家的善意賜教,這將有利于本書翻譯的改進,從而讓更多讀者受益。
戴開宇
kydai@fudan.edu.cn
2022年6月
前 言
從1999年起,幾乎每個秋天我都在普林斯頓大學(xué)教授一門名為“我們世界中的計算機”的課程。課程名稱有點含糊,但這是我不得不在5分鐘內(nèi)想出來的,結(jié)果現(xiàn)在想要改名就難了。不過,教這門課倒是給了我極大的樂趣,讓我的工作幾乎完全成了一種享受。
這門課的開設(shè)是基于這樣一種觀察,即計算機和計算已經(jīng)無處不在。有些計算是顯而易見的:每個學(xué)生都擁有一臺筆記本電腦,其性能遠比一臺IBM 7094計算機強大得多。1964年,當(dāng)我作為一名研究生進入普林斯頓大學(xué)時,IBM 7094計算機要耗資幾百萬美元,并占據(jù)一個很大的空調(diào)房間,可以為整個校園提供服務(wù),F(xiàn)在每個學(xué)生還擁有一部計算能力遠超過那臺古老計算機的手機。與這個世界上的大部分人一樣,每位學(xué)生都可以高速上網(wǎng)。每個人都在線進行搜索、購物,并通過電子郵件、短信和社交網(wǎng)絡(luò)與親友保持聯(lián)系。
然而這些只是計算的冰山一角,其中大部分隱藏在表面之下。我們沒有看到,通常也很少會想到那些潛藏在家電、汽車、飛機中的計算機,以及那些司空見慣的數(shù)碼產(chǎn)品中的計算機,如智能電視、恒溫器、門鈴、語音識別器、健身追蹤器、耳機、玩具和游戲機。我們更不會想到像電話網(wǎng)絡(luò)、有線電視、空中交通管制、電網(wǎng)、銀行和金融服務(wù)這些基礎(chǔ)設(shè)施對計算的依賴程度如此之高。
大多數(shù)人不會直接參與創(chuàng)建這樣的系統(tǒng),但每個人都受到它們的巨大影響,有些人還需要做出與這些系統(tǒng)相關(guān)的重要決定。一個受過良好教育的人至少應(yīng)該知道關(guān)于計算機的基本知識:計算機能做什么以及如何做到,計算機技術(shù)的局限性以及目前來說哪些難以做到,計算機之間如何溝通,溝通時發(fā)生了什么,計算機和通信如何影響我們周圍的世界等。
計算的普及性以意想不到的方式影響著我們。盡管我們時常被提醒,監(jiān)視系統(tǒng)變得無處不在,隱私可能被侵犯,身份可能被盜竊,但我們可能沒有意識到它們在多大程度上被計算機和通信所賦能。
2013年6月,愛德華·斯諾登(Edward Snowden)—美國國家安全局(NSA)的一位承包商,向記者提供了5萬份文件,其中揭露了美國國家安全局曾定期監(jiān)測和收集世界上幾乎每一個人的電子通信,包括電話、短信、電子郵件和互聯(lián)網(wǎng)的使用,尤其是那些居住在美國并且對國家安全沒有任何威脅的美國公民。也許最令人驚訝的是,在最初引起公憤之后,一切又恢復(fù)了常
態(tài),并且隨著政府的監(jiān)控和監(jiān)視越來越多,公民也無可奈何或漠然接受。
公司也會追蹤和監(jiān)控我們在網(wǎng)上和現(xiàn)實世界中的行為。許多公司的商業(yè)模式基于廣泛的數(shù)據(jù)收集以及預(yù)測和影響我們行為的能力。大量數(shù)據(jù)的可用性使語音理解、計算機視覺和語言翻譯方面取得了巨大進展,但這是以我們的隱私為代價的,并且使任何人都很難匿名。
形形色色的黑客在攻擊數(shù)據(jù)存儲方面變得越來越老練。幾乎每天都發(fā)生著對企業(yè)和政府機構(gòu)的電子入侵,大量客戶和員工的信息被竊取,并通常用于欺詐和身份盜竊。不僅如此,對個人的攻擊也很常見。過去,人們可以通過忽略來自所謂的“尼日利亞王子”或他們的親戚的郵件來免受網(wǎng)絡(luò)詐騙,但現(xiàn)在有針對性的攻擊變得微妙得多,并已經(jīng)成為攻破企業(yè)計算機的最常見方式
之一。
Facebook、Instagram、Twitter、Reddit等社交媒體改變了人們相互聯(lián)系的方式—與朋友和家人保持聯(lián)系,看新聞,各種娛樂。這有時會帶來積極的影響,例如,在2020年年中,警察暴力的視頻引起了人們對非洲裔美國人生活問題的關(guān)注。
但社交媒體也造成了大量的負(fù)面影響。種族主義者、仇恨團體、陰謀論者和其他瘋狂的人,無論他們的信仰或政治立場如何,都可以很容易地在互聯(lián)網(wǎng)上找到彼此,協(xié)同合作并放大影響。言論自由相關(guān)的棘手問題,以及內(nèi)容審核方面的技術(shù)挑戰(zhàn),都讓人們很難徹底阻斷仇恨和無稽之談的傳播。
在一個完全由互聯(lián)網(wǎng)連接起來的世界里,司法管轄權(quán)問題也很難處理。2018年,歐盟實施了《通用數(shù)據(jù)保護條例》(GDPR),允許歐盟居民控制個人數(shù)據(jù)的收集和使用,并阻止公司向歐盟以外發(fā)送或存儲此類數(shù)據(jù)。GDPR在改善個人隱私方面的效果如何,目前還沒有定論,當(dāng)然,這些規(guī)則只適用于歐盟,世界其他地區(qū)的規(guī)則可能有所不同。
云計算的快速應(yīng)用增加了另一層復(fù)雜性。通過云計算,個人和公司在亞馬遜、谷歌和微軟等公司的服務(wù)器中存儲數(shù)據(jù)并進行計算。數(shù)據(jù)不再由它們的所有者直接持有,而是被第三方直接掌握,這些第三方有著不同的規(guī)程、責(zé)任和漏洞,而且可能面臨著相互沖突的司法規(guī)定。
將各種
中文版序
譯者序
前言
引言 …… 1
第一部分 硬件
第1章 什么是計算機 …… 16
1.1 邏輯結(jié)構(gòu) …… 20
1.1.1 處理器 …… 21
1.1.2 主存儲器 …… 22
1.1.3 二級存儲器 …… 24
1.1.4 其他 …… 27
1.2 物理結(jié)構(gòu) …… 28
1.3 摩爾定律 …… 33
1.4 小結(jié) …… 35
第2章 比特、字節(jié)和信息的表示 …… 38
2.1 模擬和數(shù)字 …… 39
2.2 模數(shù)轉(zhuǎn)換 …… 41
2.2.1 圖像的數(shù)字化 …… 41
2.2.2 聲音的數(shù)字化 …… 43
2.2.3 電影的數(shù)字化 …… 47
2.2.4 文本的數(shù)字化 …… 48
2.3 比特、字節(jié)和二進制 …… 49
2.3.1 比特 …… 50
2.3.2 2的冪和10的冪 …… 52
2.3.3 二進制數(shù)值 …… 52
2.3.4 字節(jié) …… 55
2.4 小結(jié) …… 58
第3章 深入了解處理器 …… 60
3.1 玩具計算機 …… 61
3.1.1 第一個玩具程序 …… 62
3.1.2 第二個玩具程序 …… 64
3.1.3 分支指令 …… 66
3.1.4 內(nèi)存中的表示 …… 70
3.2 真實的處理器 …… 71
3.3 緩存 …… 75
3.4 其他類型的計算機 …… 77
3.5 小結(jié) …… 80
硬件部分小結(jié)
第二部分 軟件
第4章 算法 …… 89
4.1 線性算法 …… 91
4.2 二分查找 …… 94
4.3 排序 …… 96
4.4 難題和復(fù)雜性 …… 102
4.5 小結(jié) …… 107
第5章 編程與編程語言 …… 109
5.1 匯編語言 …… 110
5.2 高級語言 …… 112
5.3 軟件開發(fā) …… 123
5.3.1 庫、接口和開發(fā)工具包 …… 124
5.3.2 bug …… 126
5.4 知識產(chǎn)權(quán) …… 130
5.4.1 商業(yè)秘密 …… 131
5.4.2 商標(biāo) …… 131
5.4.3 版權(quán) …… 131
5.4.4 專利 …… 133
5.4.5 許可 …… 135
5.5 標(biāo)準(zhǔn) …… 138
5.6 開源軟件 …… 140
5.7 小結(jié) …… 143
第6章 軟件系統(tǒng) …… 144
6.1 操作系統(tǒng) …… 145
6.2 操作系統(tǒng)是如何工作的 …… 154
6.2.1 系統(tǒng)調(diào)用 …… 155
6.2.2 設(shè)備驅(qū)動程序 …… 156
6.3 其他操作系統(tǒng) …… 158
6.4 文件系統(tǒng) …… 159
6.4.1 二級存儲文件系統(tǒng) …… 161
6.4.2 刪除文件 …… 165
6.4.3 其他文件系統(tǒng) …… 167
6.5 應(yīng)用程序 …… 170
6.6 軟件層次 …… 173
6.7 小結(jié) …… 176
第7章 學(xué)習(xí)編程 …… 178
7.1 編程語言的基本概念 …… 180
7.2 第一個JavaScript程序 …… 182
7.3 第二個JavaScript程序 …… 184
7.4 循環(huán)和條件 …… 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 小結(jié) …… 202
軟件部分小結(jié)
第三部分 通信
第8章 網(wǎng)絡(luò) …… 215
8.1 電話與調(diào)制解調(diào)器 …… 216
8.2 有線電視和DSL …… 217
8.3 局域網(wǎng)和以太網(wǎng) …… 220
8.4 無線網(wǎng)絡(luò) …… 224
8.5 手機 …… 227
8.6 帶寬 …… 232
8.7 壓縮 …… 233
8.8 錯誤檢測與糾正 …… 237
8.9 小結(jié) …… 239
第9章 互聯(lián)網(wǎng) …… 241
9.1 互聯(lián)網(wǎng)概述 …… 243
9.2 域名和地址 …… 247
9.2.1 域名系統(tǒng) …… 249
9.2.2 IP地址 …… 250
9.2.3 根服務(wù)器 …… 252
9.2.4 注冊你自己的域名 …… 253
9.3 路由 …… 254
9.4 TCP/IP …… 257
9.4.1 互聯(lián)網(wǎng)協(xié)議 …… 259
9.4.2 傳輸控制協(xié)議 …… 260
9.5 高層協(xié)議 …… 263
9.5.1 Telnet和SSH協(xié)議:遠程登錄 …… 264
9.5.2 SMTP:簡單郵件傳輸協(xié)議 …… 265
9.5.3 文件共享和點對點協(xié)議 …… 268
9.6 互聯(lián)網(wǎng)上的版權(quán)問題 …… 270
9.7 物聯(lián)網(wǎng) …… 273
9.8 小結(jié) …… 275
第10章 萬維網(wǎng) …… 279
10.1 萬維網(wǎng)是如何工作的 …… 281
10.2 HTML …… 283
10.3 cookie …… 287
10.4 動態(tài)網(wǎng)頁 …… 289
10.5 網(wǎng)頁之外的動態(tài)內(nèi)容 …… 292
10.6 病毒、蠕蟲和木馬 …… 293
10.7 Web安全 …… 297
10.7.1 對客戶端的攻擊 …… 297
10.7.2 對服務(wù)器的攻擊 …… 305
10.7.3 對傳輸中信息的攻擊 …… 308
10.8 自我防御 …… 309
10.9 小結(jié) …… 314
第四部分 數(shù)據(jù)
第11章 數(shù)據(jù)和信息 …… 319
11.1 搜索 …… 321
11.2 跟蹤 …… 327
11.3 社交網(wǎng)絡(luò) …… 338
11.4 數(shù)據(jù)挖掘和聚合 …… 343
11.5 云計算 …… 347
11.6 小結(jié) …… 354
第12章 人工智能和機器學(xué)習(xí) …… 356
12.1 歷史背景 ……