內容簡介
不管你是計算機高手,還是對這個神奇的機器充滿敬畏之心的菜鳥,都不妨翻閱《編碼:隱匿在計算機軟硬體背後的語言》一下,讀一讀大師的經典作品,必然會有收穫。
這是一本講述
計算機工作原理的書。不過,你千萬不要因為“工作原理”之類的字眼就武斷地認為,它是晦澀而難懂的。作者用豐富的想像和清晰的筆墨將看似繁雜的理論闡述得通俗易懂,你絲毫不會感到枯燥和生硬。更重要的是,你會因此而獲得對計算機工作原理較深刻的理解。這種理解不是抽象層面上的,而是具有一定深度的,這種深度甚至不遜於“電氣工程師”和“程式設計師”的理解。
圖書目錄
1至親密友
2編碼與組合
3布萊葉盲文與二進制碼
4手電筒的剖析
5繞過拐角的通信
6電報機與繼電器
7我們的十個數字
8十的替代品
9二進制數
10邏輯與開關
11門
12二進制加法器
13如何實現減法
14反饋與觸發器
15位元組與十六進制
16存儲器組織
17自動操作
18從算盤到晶片
19兩種典型的微處理器
20ASCII碼和字元轉換
21匯流排
22作業系統
23定點數和浮點數
24高級語言與低級語言
25圖形化革命
作者簡介
作者:(美國)查爾斯·佩措爾德(Charles Petzold) 譯者:左飛 薛佟佟
查爾斯·佩措爾德(Charles Petzold),是Windows編程界的一位大師,當今世界頂級技術作家。1994年5月,Petzold作為僅有的七個人之一(並且是唯一的作家)被《視窗雜誌》和Microsoft公司聯合授予Windows Pioneer獎,以表彰他對Microsoft Windows所做出的貢獻。Petzold從1984年開始編寫個人電腦程式,從1985年開始編寫Microsoft Windows程式。1986年他在Microsoft Systems Journal的12月號上發表了第一篇關於Windows程式設計的論文。從1986年到l995年,Petzold為PC Magazine撰寫專欄文章,向讀者介紹Windows和OS/2程式設計等方面的知識。直到今天他依然保持著WindowsGDl程式設計首席技術作家的地位。其大作Programming Windows(Windows程式設計)是盡人皆知的Windows編程經典,曾深深地影Ⅱ向過一代程式設計師,該書目前已出至第5版。
左飛,技術作家、譯者,除本書外他還翻譯了《代碼閱讀》和《代碼質量》兩部計算機領域的經典著作(兩書分別榮獲第14屆和第17屆美國Tolt圖書震撼大獎),其所著的《代碼揭秘》一書繁體版在中國台灣地區出版發行。2011年,在國家示範軟體學院成立10周年慶祝大會上,他被國家示範軟體學院院長聯席會和大會組委會共同授予“國家示範軟體學院成立10周年全國十佳優秀畢業生”稱號,以表彰他在專業領域中所做出的突出成績。
薛佟佟,在南京航空航天大學取得工學碩士學位後加入中國移動通信集團,長期專注於雲計算及分散式存儲技術的研究與套用。他是中國移動公眾服務雲與一級私有雲的核心推動者,同時是《提高C++性能的編程技術》(收錄於電子工業出版社“傳世經典書叢”)一書的譯者。
前言
推薦序《道德經》有云:大方無隅,大象無形,也就是老子所說“道”的至高境界。世界上最恢宏、壯麗的氣派和境界,往往並不拘泥於一定的事物和格局,而是表現出“氣象萬千”的面貌和場景,科學知識的論述也是如此。科學不一定等同於晦澀和深奧,最複雜的理論也可用最簡單的方式描述。這就是普遍存在於現實世界的辯證的、樸素的唯物主義精神。我想Charles Petzold 就是這樣一位智者。作為Windows 編程界開創者之一和世界頂級的技術專家,他在Windows編程方面著述豐富,在基礎計算機理論書籍方面也取得了卓爾不凡的成就。他善用豐富的想像和清晰的筆墨將看似繁雜的理論描述得生動、簡單,使讀者不會感到枯燥和生硬。尤其這本暢銷多年、經久不衰的《編碼——隱匿在計算機軟硬體背後的語言》(Code:TheHidden Language of Computer Hardware andSoftware)更是化腐朽為神奇,改晦澀為通俗之傑作。即使讀者不是計算機專業的人士,在Petzold筆墨的引導之下,也能夠輕鬆閱讀該書。書中使用像電線、電燈泡、觸發器等這些非常常見的零件,拼拼接接,最後令人驚異地建造了一台電子計算機。讀者在閱讀過程中,循序漸進地學習有關計算機系統基礎和構造的知識,作者的奇思妙想和妙趣橫生的講述方式不得不令人讚嘆。透過現象進而探索本質可以發現新事物;將複雜的事物簡單化,可以發現解決問題的新方法。作者將那些看似複雜的理論轉換成我們熟悉的諸多景象,使讀者不由自主地跟隨他的思路打造這台只有電線、電燈泡和觸發器組構成的龐大的計算機系統。V 我閱讀了本書的譯稿,並非常欣喜地將其推薦給每一位讀者,我相信讀者都能獲益良多。本書的譯者做了一件非常有意義的事情,將一部優秀的作品介紹給讀者。他們嚴謹的工作將本書詮釋得非常出色,使之在不喪失原作風采的基礎上更貼合中國讀者的習慣。最後,我還是想將《道德經》上的兩句話來送給各位讀者——“為學日益,為道日損,損之又損,以至於無為,無為而無不為”。衷心希望各位讀者有朝一日都能夠在學問上到達無為而治的境界。譯者序在想到要給《編碼——隱匿在計算機軟硬體背後的語言》(Code: The Hidden Language of ComputerHardware andSoftware)寫一篇序言的時候,內心就不由得激動起來。能夠翻譯這部經典之作實屬吾輩之榮幸。早在一年多之前,電子工業出版社的編輯跟我提到這本書的翻譯之事時,我便有頗大的興趣。一是由於該書作者CharlesPetzold 的鼎鼎大名,二是由於該部作品本身內容之不凡。作為 Windows 編程界的一位傳奇人物,Charles Petzold早在1994 年就作為僅有的七人之一(並且是唯一的作家)被《視窗雜誌》和Microsoft 公司授予Windows Pioneer獎。而作為一名世界頂級的技術作家,他的大作Programming Windows 則是盡人皆知的Win32 API編程經典,是學習Windows 編程的必讀之作。令我們欣喜的是,除了Windows 程式設計方面的著作,Petzold還撰寫了這部講述計算機工作原理的書籍,而且同樣堪稱經典。本書的翻譯過程漫長而又愉快,書中的精彩內容不斷給我們以驚喜。Petzold採用的敘述方式奇特卻又如此自然,他首先從歷史的角度審視了計算機技術的發展脈絡,繼而自底向上地將計算機體系結構方面的知識娓娓道來。在Petzold的筆觸下,導線、燈泡以及觸發器等簡單部件,通過精妙的組裝,竟然構建出了一台電子計算機,令我們在翻譯的過程中不禁有動手一試的衝動,但總是又被他精彩的筆觸所吸引而欲罷不能。Petzold在這本技術書籍里旁徵博引,從美國當紅的影評人到百年之前的布萊葉盲文,從史密斯·索尼亞的滑尺到馮·諾依曼的構想,從石破天驚的論文《思維之際》到圖形化革命,看似信手拈來,然則處處別出心裁。VII 這些被有機結合起來的零星知識,仿佛又把我帶回了大學的課堂。所涉及的問題包括計算機體系結構、彙編語言及數字電子技術等等。那些已經久遠而又模糊的知識驟然間變得異常清晰而且格外生動。這些知識原本只會出現在高校的計算機專業課堂里,令人驚奇的是,儘管遍布於世界各地的本書讀者往往有著各不相同的專業背景,而這卻絲毫不影響本書內容所帶給他們的震撼!所謂經典,就是歷盡歲月的洗滌,依然毫不褪色,然其光彩卻歷久彌新。我想本書被奉為經典之作當之無愧。為了能夠將該書的精彩原原本本地呈現給廣大中國讀者,並在保證質量的前提下力爭讓該書早日與廣大讀者見面,本書的譯者始終秉持著謹慎嚴肅的態度,對許多詞句都推敲再三,力求精益求精。在此期間,我們得到了許多師長和友人的支持與幫助,感激之情溢於言表。特別是南京航空航天大學丁秋林教授,他對我們的翻譯工作給予了極大的支持,並欣然為本書提筆作序,在此我們對丁教授表示誠摯的謝意。參與本書翻譯工作的人員還有北京拓爾思股份有限公司工程師初甲林、哈爾濱理工大學研究生劉悅、南京航空航天大學信息科學與技術學院研究生高新、高陽、鄧明強和趙德志。高新與高陽曾參與多個國家重點科研課題;鄧明強與趙德志在嵌入式開發方面具有多年經驗。他們在百忙之中積極地參與了本書的翻譯工作,在此向他們表示深深的感謝。此外趙學健、歐陽鍵兩位博士也參與了部分章節的審校工作,在此也向他們一併表示感謝。在本書即將付梓之際,除了激動喜悅之外,譯者又多了一份惶恐,儘管我們幾經校對,並在翻譯過程中始終以謹慎求實的態度對一些技術細節和翻譯方式反覆討論,力求表意準確。然而限於時間倉促,紕漏和欠缺之處在所難免,言語之中有失偏頗之處,還望讀者不吝賜教和批評。聯繫信箱:
[email protected]。薛佟佟2009 年秋於南京 作 者 序在真正開始撰寫這本書之前,紛繁的思緒在我的腦海中已經縈繞了近十年之久。但從著手寫作,一直到出版,我不斷反覆地問著自己一個問題:這本書是講什麼的?關於這個問題我總是找不到合適的答案。我想說:“這本書將帶領大家通過一段信息技術革命的旅程重新感觸現代計算機技術。”語畢,我內心糾結,這個回答真的將這本書的內容完整詮釋出來了嗎?最後我不得不承認:“這本書其實是講述計算機如何工作的。”我之所以有些底氣不足,那是因為我已經猜到了某些讀者的反應:“嗨,這種書我早就讀過了。”但我會立刻告訴他:“不,這種書你並沒有讀過。”對於這點,我堅信不疑。因為這本書並不是講“計算機——如何——工作”。書中並沒有用一張又一張描述磁碟的插圖,用各種箭頭解釋數據是如何被輸送到計算機的,書裡面也沒有裝載著一節又一節“0,1數據”的“火車”圖片。明喻與暗喻是文學描述中精妙的輔助手段,但它們常常掩蓋了科學技術的真正光芒。我還聽過另一個說法:“人們不願意了解計算機如何工作。”對於這句話我毫無保留地贊同,因為就我個人來說,也是在不經意之間才體會到理解事物如何運作的這一過程是多么有趣。但是這並不意味著我對世上一切事物的運作機制都感興趣,都有所了解,因此我絕對不會在任何場合向大家解釋我房間裡的冰櫃的工作原理。然而與此同時,經常有人向我問起一些涉及計算機內部運行機理的問題。一個常見的例子就是:“‘存儲器(storage)’與‘記憶體(memory)’有何區別?”對於計算機用戶而言,這個問題要是搞不清楚,的確“寸步難行”,可以看到,市場上考察個人計算機的存儲性能,最主要的就是這兩個概念。即便對於最初級的計算機用戶來說,他們也一定需要了解到底多少“兆位元組”或多少“吉位元組”的存儲器才能應對運行在其上的程式。如果進一步去思考,這些初級用戶或許更加想了解計算機中的“檔案”是什麼概念,甚至連帶這些檔案如何從存儲器載入進記憶體,又如何從記憶體存儲到存儲器,他們也非常期望學習這些知識。像這類“存儲器-記憶體”問題的解答大都使用類比法:“記憶體就好比你的辦公桌,而存儲器就好比你的檔案櫃。”就問題本身而言,它的確給出了滿意的回答。但我對此答案並不滿意,主要原因在於這個答案將計算機的體系結構與辦公室的結構等同起來,但是記憶體與存儲器的區別其實是在邏輯層面上的,它體現著計算機體系結構的實際需求與存儲器客觀性能之間的矛盾,簡單地說就是我們找不到一種同時具備這兩種存儲器所有優點的存儲媒介,這些優點就包括存儲速度塊、存儲容量大、非易失性等等。今天的計算機都採用“馮諾依曼體系結構”——五十年來它一直是計算機體系結構的主導,而記憶體與存儲器的區分也正是由於這種體系結構的不足所導致的。還有一些計算機用戶問我這樣一個問題:“為什麼Macintosh環境下的程式不能在Windows下運行?”我想立刻回答這個問題,但在我剛剛張開嘴的時候就立刻意識到,這個問題涉及太多的技術細節,要想徹底搞清楚,那提問的這位朋友也一定非準備和我來一次“茶話會”不可。我希望這本書能夠成為大家理解這些問題的“助手”,這種理解我希望不是抽象層面上的,而是具有一定深度,這種深度甚至不遜於“電氣工程師”和“程式設計師”的理解。我同時也非常希望大家能夠理解:計算機是二十世紀技術領域的“登峰造極之作”,它是一種值得欣賞、具有“美”學文化底蘊的人類偉大成果,這種“美”不需要明喻與暗喻的額外修飾。計算機擁有與生俱來的層次化體系結構,這種結構的底層是電晶體,其頂層則是計算機顯示器上所呈現的信息。自底向上分析該結構的每一層——這也是本書的編寫結構——其實這一切並沒有人們想像中那么難。當然,現代計算機的內部結構不斷推陳出新,但其本質上仍然是一些常見且簡捷的操作集合。儘管今天的計算機比起25年前,以及50年前的都複雜許多,但它們在本質上是完全一致的。