《世界是數字的》閱讀筆記

Enoughtalk發表於2013-12-26

《世界是數字的》翻譯自 D is for Digital,作者是大牛Brian Kernighan。本書由圖靈引進,2013年6月中文版出版。恰逢圖靈社群在6月23日紀念圖靈誕辰101週年,以10元的優惠價格拿下電子版。以下為個人閱讀記錄。

Sunday -- 前言

通過Brian Kernighan 寫的《中文版序》來了解一下本書的意圖與主要內容。

如今,計算機、通訊系統,以及由它們支撐的數字產品已經無所不在了!膝上型電腦、手機和網際網路,這些都是顯而易見的。更多的則是我們平常看不見的,比如那些棲身於電子裝置、汽車、火車、飛機、電力系統、醫療裝置中的計算機。偶爾,透過某些提示,你會得知世界上有無數系統正在悄悄收集、分享你的個人資訊,這些資訊甚至會被用在違揹你意願的地方。

《世界是數字的》簡明扼要但又深入全面地解釋了計算機和通訊系統背後的祕密,旨在讓沒有技術背景的讀者更好地理解自己生活的這個數字世界。這本書解釋瞭如今計算和通訊的運作方式,包括硬體、軟體、網際網路,還有全球資訊網,同時還探討了新技術引發的社會、政治和法律問題,讓你明白現實當中的一些難題和迫不得已的折中。

我相信,瞭解這些技術常識對於任何人都非常重要,無論你是什麼背景。非常高興這本書由李鬆峰和徐建剛翻譯成中文出版,希望中國讀者能夠喜歡。

姑且認為本書適合大一、大二學生閱讀,繼續往下看。

譯者序中主要介紹了普林斯頓大學的 NB 和 Brian Kernighan 的 NB 之處。

致讀者

這本書涵蓋了三個核心技術領域:硬體軟體通訊。整本書都圍繞這三個主題展開。

這些主題與資料密不可分。

可通過本書網站kernighan.com獲取更多資訊。

Monday -- 硬體

PC vs MAC

PC的普及其價格是一個因素。另外:

使用某種東西的人越多,對其中每個人來說這種東西也就越有用,兩者之間基本成正比關係。

對選擇 Mac 的人來說:

他們自認為 Mac 在可靠性、質量和美學設計上更勝一籌, 還有人強調“到手就能用”,甚至還包含幾分對PC 的恐懼和厭惡。這些因素讓他們願意付出更多的錢。

在爭論中思考這兩種計算機的差別與共同之處。

邏輯構造

馮·諾依曼體系結構:CPU 提供運算和控制功能,記憶體和磁碟用於儲存資料,鍵盤、滑鼠和顯示器用於連線操 作人員。

然後分別講了匯流排、CPU、記憶體、外存、積體電路

摩爾定律

20 世紀電腦科學的偉大發現之一是,現在的數字計算機、最初的 PC 以及再往前體積更大、計算能力更弱的老式計算機器,它們在邏輯或者功能上的特性是完全一樣的。如果我們不考慮速度、儲存容量這些因素,這些計算機可以做完全一樣的計算。

位元、位元組與資訊表示

  • 計算機是數字處理器 它們儲存和處理離散的資訊,這些資訊表現為不連續的塊,具有不連續的值,基本上就是一個個數值。而與之相對的模擬資訊,則是平滑變化的值。
  • 計算機用位元表示資訊 計算機內部使用二進位制,而不是十進位制。
  • 較大的資訊以位元組表示 數值、字母、單詞、姓名、聲音、照片、電影,以及處理這些資訊的程式所包含的指令,都是用位元組來表示的。

深入瞭解 CPU

分散式計算 圖靈機 圖靈測試

Tuesday -- 軟體

事實表明,只要軟體不可靠不耐用,我們就一定會遇到麻煩。而隨著人們對軟體越來越依賴,潛在的麻煩也只會越來越大。

演算法。演算法就是一系列精確、無歧義的步驟,可以執行某種任務,然後停止。演算法描述了不依賴於任何實現的計算過程。這些步驟由定義明確的基本操作或原始操作構成。演算法有很多,這裡只介紹了基本的搜尋和排序演算法。

複雜性。演算法的複雜性是對演算法要執行的工作量的抽象描述。度量的依據是基本操作(如檢測資料項、比較資料項),而表述的是計算次數與資料項數的關係。演算法的複雜性可以分為幾個層次,就介紹的幾種演算法而言,既有對數級演算法(資料量加倍,計算次數只加一)也有線性演算法(計算次數與資料量成正比,最常見也最容易表達), 還有指數級演算法(資料量加一,計算次數加倍)。複雜性度量的是最壞情況(實際的問題很可能要簡單得多),而且描述的是一種漸近性質(只有資料量很大的時候才適用)。

程式設計。演算法是抽象的,而程式是具體的。程式是讓計算機完成一個任務的所有步驟的具體描述。程式必須考慮記憶體和時間的限制、數值的大小和精度,以及偏激和惡意使用者。

程式語言。程式語言是表達所有計算步驟的記號庫,人們可以籍此輕鬆寫出程式碼來, 而且程式碼可以被翻譯成計算機最終可以執行的二進位制形式。翻譯方式有很多種,但最 常見的是使用編譯器,有時候還要用匯編器,把用C 等語言編寫的程式轉換成二進位制形式,以便在計算機上執行。不同的處理器有不同的指令集和指令形式,因此編譯器也會有相應的差異。直譯器和虛擬機器是模擬真正或假想計算機的程式,可以面向它們編譯並執行程式碼。JavaScript 程式就是面向直譯器編譯執行的。

。編寫一個在真正計算機上執行的程式要牽扯很多細節,涉及很多常用操作。庫以及類似的機制可以提供預製的元件,供程式設計師在程式設計時使用。有了庫,程式設計師就可以在既有工作成果基礎上開展新工作。今天的程式設計工作通常都是組織既有元件與編寫原創程式碼並重。元件可能是庫函式(比如JavaScript程式中用到的那些函式),也可能是像Google Maps一樣的大型系統,或者是其他Web服務。然而,從底層來看,它們都是由程式設計師使用我們介紹過的語言或沒介紹過的類似語言指令編寫的。

介面。介面或者API(應用程式程式設計介面)是提供服務的軟體與使用該服務的軟體之間的一種約定。庫和元件通過API提供服務。作業系統通過自身的系統呼叫介面讓硬體看起來更有章可循,而且可以程式設計控制。

抽象和虛擬化。使用軟體可以隱藏實現的細節或者把實現偽裝成其他東西,比如虛擬記憶體、虛擬機器和直譯器。

Bug。計算機不懂寬容,因此容易犯錯的程式設計師必須寫出某種程度上沒有錯誤的程式來。所有大型程式都有 bug,也就是說有時候會不聽使喚。某些bug僅僅只是惹人討厭,比如設計得不好,並不像真正的錯誤那麼嚴重。(“這不是bug,而是一個功能” 是程式設計師中流行的說法。)而有些 bug 只有在極端情況下或者罕見的情境中才會出現, 往往很難再現,更不用說修復了。但有些bug確實嚴重,甚至會威脅到人身安全。

根據經驗,因為程式是基於既有元件構建的,而原有bug都會消滅掉,至少從原理上講,新程式中的錯誤應該越來越少。然而,與這些進步因素相對的是隨著計算機和語言的發展,系統承載的需求將越來越多樣,市場和消費者呼喚新功能帶來的壓力也會越來越大,於是無法避免的隱患也會層出不窮。總之,bug將成為我們心中永遠的痛。

Wednesday -- 通訊

網路中立(net neutrality)問題

百度百科

網路中立(Network Neutrality), 是指在法律允許範圍內,所有網際網路使用者都可以按自己的選擇訪問網路內容、執行應用程式、接入裝置、選擇服務提供商。這一原則要求平等對待所有網際網路內容和訪問,防止運營商從商業利益出發控制傳輸資料的優先順序,保證網路資料傳輸的“中立性”。 有關網路中立的立法目前在美國國會已經成為議員們爭論的熱點問題,各網路服務提供者和權利人都力爭在新法中更多地體現自己的利益。

頻寬是最基本的一個特性,它描述的是系統傳輸資料的速度。

等待延遲衡量的是特定資訊塊通過系統所需要的時間,用卡車滿載硬碟穿越整個國家,頻寬顯然是巨大的,但延遲也是極高的。

抖動,即延遲的可變性,對某些通訊系統(特別是語音通訊),同樣也很重要。

信程指的是某種技術能夠在多大地理範圍內實現聯網。有些網路的範圍不過數米,有些網路則可以覆蓋全球。

資料、資訊和隱私

關注隱私搜尋社交網路資料探勘

總結

  • 本書不適合計算機專業人員閱讀
  • 本書用大量篇幅介紹了資訊保安與加密,隱私洩露與保護,專利與政府政策,具有參考意義

注:本文參加 “@圖靈教育年末10本好書相贈活動”,for 《JavaScript高階程式設計(第3版)》

相關文章