本書是一部深入淺出揭示計算機運行本質(zhì)的經(jīng)典著作。全書以通信為核心線索,從手電筒的開關(guān)控制講起,通過燈泡的亮滅引入二進制概念,進而剖析莫爾斯電碼、布萊葉盲文等編碼系統(tǒng)如何成為信息傳遞的基石。隨后,作者以邏輯門電路為起點,層層遞進地解釋如何通過繼電器、觸發(fā)器、存儲器等元件搭建出具備運算能力的機器,最終演化為現(xiàn)代計算機的中央處理器(CPU)。書中還探討了操作系統(tǒng)、編程語言及軟件開發(fā)的底層邏輯,揭示了代碼如何驅(qū)動硬件完成復(fù)雜任務(wù)。第2版新增了對現(xiàn)代計算機技術(shù)發(fā)展的延伸討論,例如,互聯(lián)網(wǎng)通信原理、圖形界面實現(xiàn)機制等,使內(nèi)容更貼合當下技術(shù)趨勢。
本書由微軟Windows先鋒獎得主撰寫,阿里巴巴達摩院院長張建鋒(花名:行癲)傾情翻譯,著譯雙馨。本書旨在揭開計算機硬件與軟件的神秘面紗,帶領(lǐng)讀者從最簡單的編碼概念出發(fā),逐步深入到復(fù)雜計算機系統(tǒng)的構(gòu)建。通過盲文、莫爾斯電碼等日常事物,將抽象的計算機原理具象化,即使是沒有任何技術(shù)背景的讀者也能輕松理解。本書不僅涵蓋了二進制、布爾邏輯、邏輯門、存儲器、微處理器等核心概念,還擴展了關(guān)于時鐘、算術(shù)邏輯單元、CPU控制信號、互聯(lián)網(wǎng)等重要主題的章節(jié)。
第2版前言本書的第1版出版于1999年9月。令我非常高興的是,我意識到我終于寫了一本永遠不需要修訂的書!這與我寫的第一本書形成了鮮明的對比,那本書是關(guān)于Microsoft Windows應(yīng)用程序編寫的,它在短短十年內(nèi)就已經(jīng)出版了5個版本。我寫的第二本書是關(guān)于OS/2 Presentation Manager的,它過時得更快。但我確信,Code這本書會永遠流傳下去。我對Code的最初想法是,從非常簡單的概念開始,慢慢地深入數(shù)字計算機的工作原理。在這個引導(dǎo)讀者穩(wěn)步攀登知識之山的過程中,我會盡量少使用隱喻、類比和滑稽的插圖,而是使用真正的工程師設(shè)計和構(gòu)建計算機時使用的語言和符號。我還有一個小妙招:使用古老的技術(shù)來展示普遍原理,假設(shè)這些古老的技術(shù)已經(jīng)有相當?shù)臍v史,并且永遠不會過時。這就好比以福特T型車(Ford Model T)為藍本來寫一本關(guān)于內(nèi)燃機的書。我仍然認為我的方法是可靠的,但在一些細節(jié)上我犯了錯誤。隨著時間的流逝,這本書開始顯出老態(tài):一些文化參照變得過時了;手機和手指取代了鍵盤和鼠標;互聯(lián)網(wǎng)在1999年確實已經(jīng)出現(xiàn),但它最終演化而成的樣子與當時大相徑庭;統(tǒng)一碼(Unicode)一種允許統(tǒng)一表示世界上所有語言以及表情符號的文本編碼在第1版中只占用了不到一頁的篇幅;JavaScript這個在網(wǎng)絡(luò)上變得無處不在的編程語言根本沒有提及。這些問題可能很容易解決,但第1版還有另一個方面一直讓我感到困擾。我想要展示真正的中央處理器(Central Processing Unit,CPU)的工作原理,CPU是計算機的大腦、心臟和靈魂,但在第1版中我并沒有做到這一點。我覺得我當時已經(jīng)接近這個關(guān)鍵的突破口,但后來我放棄了。讀者似乎沒有抱怨,但對我來說,這是一個明顯的缺陷。這個缺陷在第2版中得到了修正。這就是第2版比第1版多了大約70頁的原因。是的,這是一段更長的旅程,但如果你跟我一起走進第2版,我們將更深入地探索CPU的內(nèi)部工作原理。這是否會為你帶來更愉快的體驗,我不敢肯定。如果你感覺內(nèi)容太多,像是要把你淹沒了,請先休息一下透透氣。但如果能堅持閱讀到第24章,你應(yīng)該感到相當自豪,而且會高興地知道,書中的剩余部分內(nèi)容理解起來將會輕松許多。配套網(wǎng)站Code的第1版在電路圖中使用紅色來表示電流的流動。第2版也是如此,但這些電路的工作原理現(xiàn)在還通過一個新網(wǎng)站(CodeHiddenLanguage.com)以更具圖形交互性的方式進行了演示。在本書中,我們會不時提醒讀者訪問這個網(wǎng)站,同時我們還使用了一個特殊的圖標,如本段側(cè)邊所示。從現(xiàn)在起,每當出現(xiàn)這個圖標(通常伴隨著一個電路圖),就表示你可以在配套網(wǎng)站上探索該電路的工作原理。(我使用的是JavaScript和HTML5的canvas元素來編程這些網(wǎng)頁圖形。)CodeHiddenLanguage.com網(wǎng)站完全免費。在少數(shù)例子中,網(wǎng)站確實使用了Cookie,但這只是為了允許你在計算機上存儲一些信息。這個網(wǎng)站不會追蹤你的數(shù)據(jù)或進行惡意攻擊。我還將使用這個網(wǎng)站來對書中的內(nèi)容進行說明或勘誤。致謝除了在封面上署名的作者之外,還有一些同樣不可或缺的人為本書的出版做出了貢獻。特別要提到的是本書的執(zhí)行編輯Haze Humbert,她恰好在我正準備更新第2版的時刻找到我,與我溝通這件事情的可能性。我從2021年1月開始做這件事情,她巧妙地引導(dǎo)我們渡過了難關(guān),甚至在超過交稿截止日期幾個月后,依然耐心地給予我支持。本書第1版的項目編輯是Kathleen Atkins,她理解我試圖做的事,和她也有許多愉快的合作時光。當時我的代理人是Claudette Moore,她同樣看到了這樣一本書的價值,并且說服了Microsoft Press出版它。第1版的技術(shù)編輯是Jim Fuchs,我記得他幫我發(fā)現(xiàn)了很多令人尷尬的錯誤。第2版的技術(shù)審稿人Mark Seemann和Larry OBrien也發(fā)現(xiàn)了我的一些疏忽之處,并幫助我在原來的基礎(chǔ)上進行了優(yōu)化。我以為我在幾十年前就已經(jīng)弄清楚了compose和comprise這兩個單詞的區(qū)別,但顯然并沒有。對于這類錯誤的糾正,文字編輯Scout Festa做出了寶貴的貢獻。我一直受惠于文字編輯的善舉,是他們不懈地與不嚴謹和濫用語言的現(xiàn)象做斗爭,盡管很多時候我與他們并不相識。至于本書中所遺留的任何錯誤,完全是我的責任。我想再次感謝本書第1版的試讀者:Sheryl Canter、Jan Eastlund、Peter Goldeman(已故)、Lynn Magalska和Deirdre Sinnott(后來成為我的妻子)。本書第1版中的眾多插圖出自已故的Joel Panchot之手,我了解到他對自己為這本書所做的工作感到非常自豪。他的許多插圖仍然被保留下來,但是由于需要更多的電路圖,為了保持一致,我決定重做所有電路圖[這些插圖是我用C#程序生成的,該程序使用SkiaSharp圖形庫生成可縮放的矢量圖形文件。在高級內(nèi)容制作人Tracey Croom的指導(dǎo)下,SVG文件被轉(zhuǎn)換為封裝的PostScript(EPS),以便使用Adobe InDesign設(shè)置頁面]。最后,我想將這本書獻給我生命中最重要的兩位女性。我的母親曾在逆境中奮力拼搏,她為我的人生指引了方向,讓我學(xué)會不退縮。在這本書的寫作過程中,我們慶祝了她的95歲(也是最后一個)生日。我的妻子Deirdre Sinnott對我來說非常重要,她的成就、她對我的支持以及她的愛一直讓我引以為豪。同時,致本書第1版的讀者,你們的友好反饋讓我感到格外高興。Charles Petzold2022年5月9日
查爾斯·佩措爾德(Charles Petzold) 美國著名的程序員和技術(shù)作家,尤其在Windows應(yīng)用程序開發(fā)領(lǐng)域享有盛譽,從事編程和計算機方面的寫作已有35年之久。他不僅是一位微軟最有價值專家(MVP),更被授予微軟Windows先鋒獎,以表彰他對Windows平臺的杰出貢獻。他著有多部經(jīng)典技術(shù)書籍,包括被譽為Windows編程圣經(jīng)的Programming Windows系列,以及廣受贊譽的《編碼:隱匿在計算機軟硬件背后的語言》。他的作品以清晰易懂的風格著稱,能夠?qū)?fù)雜的計算機科學(xué)概念向更廣泛的讀者群體進行普及。目前,他和妻子歷史學(xué)家兼小說家迪爾德麗·辛諾特,以及兩只貓(分別名叫Honey和Heidi)住在紐約。他的網(wǎng)站地址是charlespetzold.com。
譯者序第2版前言作者簡介第1章 最好的朋友 /1第2章 編碼與組合 /7第3章 布萊葉盲文與二元編碼 /12第4章 手電筒的剖析 /19第5章 繞過拐角的通信 /27第6章 邏輯與開關(guān) /35第7章 電報機與繼電器 /49第8章 繼電器與邏輯門 /55第9章 我們的十個數(shù)字 /78第10章 十進制的替代 /85第11章 二進制數(shù) /102第12章 字節(jié)與十六進制 /120第13章 從ASCII碼到統(tǒng)一碼 /129第14章 使用邏輯門做加法 /147第15章 真的是這樣嗎 /159第16章 那么減法呢 /172第17章 反饋與觸發(fā)器 /186第18章 讓我們制作一個時鐘吧 /210第19章 存儲器組織 /231第20章 算術(shù)自動化 /250第21章 算術(shù)邏輯單元 /271第22章 寄存器和總線 /286第23章 CPU控制信號 /302第24章 循環(huán)、跳轉(zhuǎn)和調(diào)用 /322第25章 外圍設(shè)備 /343第26章 操作系統(tǒng) /352第27章 編碼 /363第28章 世界大腦 /382