掀起计算机的盖头来——简评《编程卓越之道 第一卷 深入理解计算机》
文/赖勇浩 尽管大多数程序员写的代码都在相同的平台上运行,但程序员对同一平台却有着不同的理解。有些程序员认为平台应该是对自己透明的不必自己去了解它,而另一部分的程序员却认为了解平台有利于自己在写程序的时候充分发挥平台的优势及规避平台的缺陷。久而久之前者就有可能沦为在网上讨论程序员三十岁三十五岁应该怎么办的那类人;后者则可能慢慢成就了自己成为卓越程序员的梦想。 因为国内关于计算机
文/赖勇浩
尽管大多数程序员写的代码都在相同的平台上运行,但程序员对同一平台却有着不同的理解。有些程序员认为平台应该是对自己透明的不必自己去了解它,而另一部分的程序员却认为了解平台有利于自己在写程序的时候充分发挥平台的优势及规避平台的缺陷。久而久之前者就有可能沦为在网上讨论程序员三十岁三十五岁应该怎么办的那类人;后者则可能慢慢成就了自己成为卓越程序员的梦想。
因为国内关于计算机体系结构的书籍太少,即使有也是非常理论化或者总是在讨论早已经不再流行的架构,学习资料的匮乏使想深入理解计算机体系结构的朋友举步维艰。幸好现在汇编语言编程名著《The Art Of Assembly Language》一书的作者Randall Hyde给我们带来了《Write Great Code》四卷本,该书的第一卷《Understanding the Machine》已经翻译成中文版出版了,这实在是追求卓越代码的程序员的福音!《编程卓越之道 第一卷 深入理解计算机》到手之后,我读得不舍得放下,读完之后,掩卷沉思,认为这本书有新、俗、通三大特点。
这本书新。它讲述了当前流行的PC硬件技术,比如高性能缓存、流水线架构的CPU、并行和超标量及乱序执行技术、AGP接口、PCI-E接口、火线(Firewire)甚至是USB。这些跟得上时代的技术肯定比学生时代只讲8086/286的《计算机导论》要强得多。因为我读硬件方面的书籍比较少,我是读到这本书才知道原来流水线是怎样组织的,超标量是怎么回事,AGP接口和PCI-E接口先进在哪里,甚至你可以从原理上理解USB接口的外设为什么会流行全世界。
这本书俗。一本书讲述的技术越是先进越是复杂,它就有可能越难让人读懂。Randall Hyde把这本书写得非常俗,写成了一本面向程序员的通俗手册。作者把整数、定点数、浮点数和字符串在机器里的表示讲解得深入浅出。他那循序渐进由浅入深的行文结构让人读起来不忍罢手。对于字符集、指令集这两大块,Randall Hyde不仅深入剖析现在流行的ASCII字符集、X86指令集,并提出了自己的见解,然后严谨地论述这样设计的先进性和意义,这样的章节在传统的计算机理论书籍里面是见不到的。在每一个章节,作者都力求向读者解释清楚为什么计算机的某一模块会被设计成这样,设计成这样有什么好处有什么坏处,我们怎么写代码才能更好地利用这一方案的优势,避免代码劣化。这样的一本书,对此有很大的指导意义。
这本书通。卓越的代码是能“感觉”到底层的硬件的,因为代码运行在硬件组成的计算机上。计算机组成或者对程序员可见,或者有助于理解为什么系统架构师选择了某个特定的系统设计方案,学习计算组成的目的不是为了让读者能够自己设计CPU或者计算机系统,而是为了教会读者如何最有效地利用现有的计算机设计。在这方面,作者Randall Hyde纵合横连地把计算机数据表示法、内存的组织与访问、复杂数据类型及其内存对象、布尔逻辑和数字设计、CPU体系结构、指令集体系结构、内存的体系结构与内存组织和输入与输出融汇在这本书里。从章节编排到内容过渡都浑然天成,让读者如饮仙露、甘之如饴。
扎实的计算机基本知识是写出卓越代码的基石,而典型的计算机科学或者计算机工程的课程恰恰对这些底层细节语焉不详、甚至删繁就简。这本书将计算机科学的几门课程的内容加以融合,最难能可贵的是这本书从程序员的角度进行阐述,让我们可以知其然更知其所以然,写出卓越的代码。嗯,举个例子,看完这本书,当你找工作时遇到一道重写CRT里的memcpy函数的面试题,你的答案将比以前高效得多。这并不是因为本书讲述了怎样写出高效的memcpy,而是它让你知道计算机的内存组织与访问的原理,你可以规避它的不足。
人无完人、金无足赤,这本书也不是完美无缺的。要求一本只有四百余页的书讲清道明复杂的X86计算机体系结构的方方面面是不可能的,本书只是从程序员需要的角度来阐述程序员需要了解的硬件特性,很多细节仍然被隐藏了起来。这些隐藏的细节其实对于很多程序员而言仍然重要,如有兴趣可以参考其它专门论述相关课题的专著。在这本书的中文版里,看得出译者花费了不少工夫和心血,质量不错;虽然有一些排版错误和最后一章译得稍显生硬,但瑕不掩瑜,它仍是一本值得各大中专院校师生、职业程序员一读的好书。
在深入理解了计算机体系结构之后,怎样在实际工作中应用这些知识呢?即将出版《编程卓越之道 第二卷 应用底层语言思想编写高层语言代码》马上就会带给大家格物致用的答案,现在就开始坐上快车尖叫出发吧!
更多推荐
所有评论(0)