[心得] Code (简体中文版本)

楼主: descent (“雄辩是银,沉默是金”)   2014-12-23 11:24:19
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

Links booklink

Contact Us: admin [ a t ] ucptt.com