[心得] Code (簡體中文版本)
Code: The Hidden Language of Computer Hardware and Software
作者在 1999 年開始寫這本書, 之前擁有的是英文版, 曾經試圖翻閱, 卻總是在其艱難的
英文句子中敗退下來。這是很久很久之前不知道在哪裡聽說到的書, 因為作者 Charles
Petzold (windows programming 界的大師級人物) 很有名, 我相信這會是一本好書。
20111212 在台南若水堂 ( http://goo.gl/TGJkEj )看到簡體中文版本, 意外驚喜之下
, 立刻買了下來。55X6 = 330, 花了 330 台幣。這本的簡體中文翻譯算是不錯, 不熟悉
閱讀簡體中文書籍的我也讀得津津有味, 也沒有任何的不流暢之處, 在缺乏繁體中文的版
本下, 是唯一也是不錯的選擇。
這本書的內容是什麼呢?從書名 CODE 來看, 又, 它是一本電腦相關書籍, 作者又是軟體
界大師級人物, 也許有人會猜和程式語言相關, 教怎麼寫程式吧! 不過從簡體中文的翻譯
可以看出, CODE 被翻成編碼的意思 ... 嗯!還是猜不到是吧?
這本書是在講述計算機的故事, 從燈泡、開關到打造出一台計算機以及後來的軟體發展到
網路的故事, 很意外吧!從書名完全看不出來是這樣的內容。
書中作者有一句話我很喜歡:「明喻與暗喻是文學描述中精妙的輔助手段, 但它們常常掩
蓋了科學技術的真正光芒。」在解釋一些專業的技術時, 大多會聽到一些比喻的方式, 不
過有時候的確只有精確的解釋, 才能了解其內涵。
因此我基本不會使用類比,因為類比其實就是在用外部知識來理解當前的話題,很容易把
話題扯開出去。
ref:http://goo.gl/LnnlMV (
http://blog.zhaojie.me/2012/08/programming-languages-arguments-dont-pull-me-in.html
)
在 iWoz 科技頑童沃茲尼克 ( http://goo.gl/JzYCGj )這本書中讀到, Steven Wozniak
從小被傳授電子學相關的知識, 其中包括原子核裡電子的流動與電流的關係, 我那時候心
想: 「好厲害!原來電流可以細談到電子。」而在本書 CODE 中, 從第四章 - 手電筒的
剖析, 我知道這是怎麼一回事了, 也許中學教育早已教過, 但我真的不記得了。
作者從第一章的摩斯電碼開始, 告訴讀者編碼的概念, 如何簡化編碼還原到原來的意思,
盲人使用的文字也是編碼的一種, 封面上每六個凸起或是平的圓點 (簡體中文版本才有)
就是 C, O, D, E 本書書名。
手電筒的線路到電子的流動完成整個電流的移動, 有趣而令人容易理解的比擬, 實在令人
佩服。
從人類十個手指頭的十進位 -> 卡通人物四個手指頭的八進位 -> 龍蝦螯的四進位 -> 海
豚兩個鰭的二進位, 原來印度人發明的阿拉伯數字是如此的偉大, 有了它, 我們得以用同
樣的原理計算八進位、四進位、二進位, 不過得先準備好其他進位的加法表和乘法表。一
路的解釋下來, 讓我有豁然開朗的感覺, 頓悟了原來數字這回事。
再來的邏輯學和燈泡完成了 and/or 運算, 真是神奇, 原來這些數學和計算機是這樣關聯
起來的。快要提到燈泡、電池、開關、導線和計算機的關係, 真期待後面的內容。
本書有 25 章, 372 頁, 平均一章 10 多頁, 很容易就可以看完一個章節, 很容易看下去
, 也很容易沉迷的繼續看下去, 大學時期要是有這樣有趣的教科書, 哪裡需要靠考試逼我
, 自己找時間就會看書, 也就瞭解計算機的工作原理了。是的 code 就是在講述計算機構
造, 如何用相關技術, 完成計算。我一直以為作者是軟體相關工作者, 沒想到果然軟體大
師級人物, 從數學、硬體果然有都有涉獵, 一直以來總是懷疑學校所學的知識到底是應用
在哪裡? 因為工作上幾乎沒用到相關的知識, 現在總算解了我的疑惑, 第十章的邏輯與開
關, 精彩的闡釋了這樣的學問如何應用在計算機的 and/or 運算。
( http://goo.gl/O6GiQN )原文版本的封面沒有使用盲人的凸點印刷, 簡體中文版本多
花了點成本使用了盲人的凸點印刷。
不過原文版本的燈泡圖形有紅色線條, 簡體中文版本就沒有了, 這樣的確比較不好看。
or gate, and gate, xor gate, nand gate, not gate, buffer 原來是繼電器 (其原理
是透過電池鐵來實作) 透過不同的組合來完成的, 從燈泡開關線路到這些基本 gate, 慢
慢的解釋計算機原理, 再來要講述加法器了, 你會和我一樣很期待嗎?
我似乎開始有印象學生時代的加法器了, 那時候讀起來很無趣, 沒想到透過 code, 我豁
然開朗, 原來半加器、全加器 (half adder, full adder) 是這樣兜出來的, 嗯!這我
有印象。而一補數、二補數原來是用來做減法運算用, 而不是純粹一種數學運算, 計算
機必須透過這樣的方式來完成減法的運算, 知其然的學習方式果然有趣多了。
用電子線路完成加法器很厲害, 但運用機械裝置, 齒輪、槓桿做出計算機我覺得更是神奇
, 這可是不用電的哦!不過可能大台了點 XD
而我也在這之後, 購入了一台monroe 機械式計算機 ( http://goo.gl/8mAe3m )。
ref:http://goo.gl/GZtC2N (
http://moodle.ncnu.edu.tw/file.php/13923/Ch01_%adp%ba%e2%be%f7%b5o%aei%a5v.pdf
)
英國發明家巴貝奇(Charles Babbage)於1833年製造了一部計算用的機器,被命名為巴貝
奇差分機
(Babbage Difference Engine),整部機器包含了25,000個零件,重約3噸,雖然著個機
器經常故障,
但他並沒有氣餒,再接再厲與他兒子在1847年製造出分析機(Analytical Engine),
這也是世界上第一部完全自動計算的機器,它包括了輸入、處理、控制、儲存、輸出五部
門,
可說是後來電腦構想的先驅;因此被稱為電腦之父(Father of the Computer)。
第十四章的內容對我有些難度, 閱讀速度慢了下來, 主要是運用 feedback 的概念來完成
很多神奇的電路。oscillator, R-S Flip-Flop, 電平觸發的 D 型觸發器 (可以用來儲存
訊號), 邊沿觸發的 D 型觸發器, 然後使用 oscillator 和邊沿觸發的 D 型觸發器完成
frequency divider, 在透過連接幾個 frequency divider 完成計數器。
電平觸發的 D 型觸發器 (可以用來儲存訊號) 這可以拿來幹嘛呢?前面有了加法器, 可
以相加兩個數, 如果要加三個數呢?那就需要這個電平觸發的 D 型觸發器來把第一次相
加的結果保存下來, 在與第三個數相加, 是不是很重要呢?也許你也想到這就是電腦上的
ram。
計數器: 很簡單, 就是從 0000, 0001, 0010, 0011 ... 數到 1111 在回到 0000。
( http://goo.gl/dwZi4B )
第十六章講述儲存器, RAM 為什麼會被稱為 RAM (Random Access Memory) 是因為它可以
讀取某個位址上的任何一個 bit, 若是其他循序型的儲存器 (ex: tape), 要讀取 101 的
位址值, 需要先讀取 100 的位址。原來是這樣兜起來的阿!
第十七章很複雜, 也是很精彩的一章, 我還無法 100% 理解其中內容, 不過對於計算機的
概念已經有深刻的體認, 要多花點腦力來閱讀。這章的內容雖然也有硬體的部份 (有很多
可怕的硬體元件連接起來), 但我想系統軟體程式設計師一定會很喜歡。從一個加法器漸
漸演變成為可使用組合語言指令的計算機 (computer), 這是怎麼開始的呢?很有趣吧!
從 ram array 開始, 導入 instruction code/operation code (就是常聽到的 op
code), 開始了一個簡單的組合語言程式。
之前聽說過:「設計一顆 cpu 就要設計其組合語言」, 我現在終於有了深刻的認識, 原來
這道理是這麼的自然, 哪裡需要花時間搞懂那句話呢? 而不知道 cpu 是怎麼設計出來的
, 只能對那句話有粗淺的體認, 無法了解其真正想說的內容。到了第十九章介紹 intel
8080 時, 為什麼那些 op code 要設計成這樣也有所理解, 能搞懂這些關係, 真是令我舒
體通暢, 沐浴春風。
手上真的有股衝動, 想去買個麵包版, 親手打造第十七章裡頭的計算機電路。而我也能理
解為什麼總是要有個 clock 來產生時脈, 這才能讓 cpu 從 0 開始運轉, 由下而上的貫
通, 了解整個計算機結構, 讓只專注於軟體設計的我非常受用, 原來我寫的 code, 就是
變成這樣來執行的。
前面幾章所提到的硬體元件, 就是要用來打造這樣的一台計算機, 看似簡單的元件, 但經
過複雜的組成後, 就變成你我在用的電腦了。
這是用 intel 8080 打造的 Altair 8800 ( http://goo.gl/pF2s2 )
看過本書後, 就會知道為什麼上面會有開關和那些燈泡了。現在的電腦當然不會長這樣,
但基本原理都是和這台有著開關和燈泡是一樣的。
( http://goo.gl/0FOYUs )在自然環境的包圍下, 閱讀如此精妙的好書, 充實感官與知
識上的養份, 實在是一大享受, 我坐在樹下的陰涼處, 舉著 code, 盡情吸收著書中的技
術, 享受專業書籍帶來的震憾。
從 22 章之後, 內容離開了生硬的計算機結構, 慢慢往軟體的部份而去, 從作業系統 (中
國翻譯為操作系統)、程式語言、網路 ... 這是我比較熟悉的部份, 對於計算機原理製作
的部份, 我非常喜愛。我不是熱愛和 and gate, or gate, xor gate, nand gate 奮鬥的
硬體工程師, 但關於這部份卻也讓我看的津津有味。果然了解計算機結構, 才能更深入了
解組合語言。
看完這本簡體中文的版本, 讓我了解不少中國的翻譯術語, 所以本篇心得有些辭彙是中國
術語, 因為我不知道對應的英文或是台灣術語, 所以我也無法標示其後。
在中國術語日漸入侵的台灣, 台灣工程師也慢慢開始使用著這些中國術語。例如:支援/
支持、實作/實現、呼叫/調用、質數/素數, 演算法/算法、物件導向/面向象, 有些術語
中國翻的很有意思, 不過大部份我還是習慣於台灣的用語。
簡體中文的版本 p 347 提到一個找尋質數的演算法 (Sieve of Eratosthenes), 在程式
設計討論區上有時候會看到求質數的問題, 把這個拿出來用還不賴哦!
在圖書館有發現一本類似的書籍, 也是在講計算機結構, 裡頭的電子線路更是多樣, 看起
來很嚇人, 還是燈泡與開關令人覺得友善, 看起來也不那麼可怕, 要是能先讀這本書, 也
許在大學的時候, 我也能好好的看看數位電路的書籍, 這門學問也和寫程式一樣有趣呢!
真是一本很棒的書籍, 要是因為英文的關係不能吸收裡頭的知識, 那真是太可惜了!翻譯
工業還是很重要的, 不是每個人都能為了學習專業知識而先把英文學好, 若能把原文這道
牆的門檻降低, 也間接可以提高工程人員的專業。要不然還有德文、日文的專業書籍, 工
程人員還要先對付這些外文實在辛苦。
( http://goo.gl/fZvoL1 )
Charles Petzold 的網站:http://goo.gl/UtrtZy (
http://www.charlespetzold.com/home.html )
// 本文使用 Blog2BBS 自動將Blog文章轉成縮址的BBS純文字 http://goo.gl/TZ4E17 //
blog 原文:
http://descent-incoming.blogspot.tw/2012/01/code-hidden-language-of-computer.html
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.198.76
※ 文章網址: http://www.ptt.cc/bbs/CompBook/M.1419305066.A.C5A.html
※ 編輯: descent (36.236.198.76), 12/23/2014 11:25:27
推
12/24 11:07, , 1F
12/24 11:07, 1F
推
12/29 12:40, , 2F
12/29 12:40, 2F
→
12/29 12:40, , 3F
12/29 12:40, 3F
→
12/31 14:38, , 4F
12/31 14:38, 4F
推
06/11 12:25, , 5F
06/11 12:25, 5F
CompBook 近期熱門文章
PTT數位生活區 即時熱門文章