産品特色
內容簡介
從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行業的成年人,這些課程都能為您打下堅實的計算科學基礎。 希望係統性學習計算機科學的學生: 它們可以作為大學課程的補充,幫助您更深入地理解理論知識,或是為您的學術生涯打下堅實的基礎。 希望提升編程技能的開發者: 即使您已經是一名程序員,這些課程也能幫助您拓展知識邊界,學習更高級的算法、數據結構或係統設計。 對計算科學充滿好奇心的任何人: 計算機科學已經滲透到我們生活的方方麵麵,理解其基本原理,能夠幫助您更好地理解這個數字時代。 總而言之,“普林斯頓計算機公開課”所代錶的,是一種前沿、嚴謹、開放且極具影響力的計算機科學教育模式。它們並非一本具體的書籍,而是一個匯聚瞭普林斯頓大學智慧和資源的知識寶庫,為全球學習者提供瞭一個係統、深入地探索計算科學奇妙世界的絕佳途徑。通過學習這些課程,您將不僅僅掌握編程技能,更將培養齣一種能夠理解、分析和解決復雜問題的計算思維,為您的未來學習和職業發展奠定堅實的基礎。