Archive for the '书评' Category

读完了csapp(中文名:深入理解计算机系统)

星期一, 十二月 25th, 2006
Tags:

上个星期终于把csapp看完了。
我买的是中文版的,因为除了貌似评价不错以外,由于涉及到些自己不了解的底层东西,怕是看英文会云里雾里。现在看来,大概不能算是个优点,但是的确能够加快我的看书速度,否则一星期还真不大可能把这书搞定。

对csapp慕名已久,主要在于据说这本书尽量的做到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算机院校里面最偏软件的cmu的作品),重点非常得当,像我这种没有本科科班出生又不想去死读些不知道以后有没有用的东西的人来说,最是适合了。感兴趣的东西就可以再加深,不感兴趣的就算了,正好。
在csapp的序言里有个课程列表,其中推荐了几种教学课程,对应使用不同的章节。我参考选用的是ICS+的规划。ICS+的cmu课号为15-213,据说正好和cmu的邮编相同,然后就有了这句“15-213: The Class That Gives CMU Its Zip!”。以这句为关键词,能够找到ICS+的slide。
ICS+的课程基本上涵盖了全书,除了第4章“处理器体系结构”以外。我自己除了跳过这个的确不太感兴趣的章节(太偏硬件)以外,还有第9章“测量程序执行时间”是略略翻过,其他的都是认真读完写完习题的。

书的确是难得的书。我第一次试图读这本书是几个月以前,当时第2章“信息的表示和处理”没看完就放下了,觉得讲了一大堆数字表达方式很没意思……这次稍微坚持了一下,没想到就一口气读下来了……
重点推荐第3章“程序的机器级表示”第5章“优化程序性能”第6章“存储器层次结构”第10章“虚拟存储器”。觉得这四章乃是全书之精华,看得人欲罢不能。

“程序的机器级表示”一章几乎是一种教授逆向工程的方法在讲授,剖析编译器产生的汇编代码,以此来加深对具体代码实现的理解。大量的习题都是根据汇编来猜源程序是什么,有趣极了。这一章还覆盖了缓冲区攻击——但是这点讲得太少了,不解渴,有时间自己弄弄……
讲底层离不了汇编这个有点棘手的东西,我还一度担心自己汇编学得不太过关,会碰到障碍。但这里作者提出一个很实际的要求:以前要求程序员都会写汇编,现在要求程序员都会读汇编。这里以一种“读”的方式教人用汇编,不局限于很多细小的语法,让仅仅懂得C的程序员也毫无障碍。仅仅100多页,不仅初步讲了汇编的语法和使用,还配合大量的例子分析来解读产生的汇编代码,让人理解深刻,实在是技高一筹。

“优化程序性能”是全书最闪光的章节。作者对一个例子不断优化,讲循环效率和过程调用,到讲存储器引用,一直讲到现代处理器的结构,讲到IA32处理器的局限,一路下来,畅快淋漓。还将IA32处理器的优化结果和Compaq Alpha 21164做对比,一目了然的看出哪些优化是处理器相关的,最后讲到profiling(程序剖析)指导优化,可以说平时能够用到的最高技巧(毕竟我还不是编译器开发人员……)和流程走了一边,现实意义相当之高。
这章把能够用到的所有技巧的原理全部讲解得清清楚楚,不做不必要的挖深,结合代码,让人丝毫不觉枯燥,真是佩服得五体投地。虽然章节后对编译器优化还提供了参考文献以及加深的内容,不过我觉得这章的内容已经足够我受用很久了。

“存储器层次结构”实际上可以看作是“优化程序性能”一章的延伸,以及为之后的“虚拟存储器”做铺垫。这章主要详细解释了高速缓存(cache)的工作方式,以及利用局部性使得cache达到最好效果的方法。
“虚拟存储器”(Virtual Memory)则上升到了操作系统层面,详细解析了VM的实现以及Linux系统上VM组织方式。自己觉得最受用的是malloc/free实现的动态存储器分配的具体方法以及对进程中具体存储结构的了解,还有GC的策略。这些让我感觉自己能够做到的事情似乎又多了一点,一直无法理解的valgrind之类软件的原理似乎也有了点眉目。
这两章讲得比较细致,以至于稍微显得有点枯燥。其实我自己喜欢这两章的主要原因是解了我多年来关于存储器的困惑。不过存储器方面的内容实在博大精深,自己这完全是得了点皮毛就沾沾自喜。

其实在学计算机方面我还是挺实用主义的,一直抱着碰到了再去仔细研究好了的态度,所以看书普遍不认真,只是求到时候能够找得到参考。不过这本书我觉得格外有趣,所以也看得格外认真,把每节后的习题都做了,家庭作业则等着过两天复习(计划是这样的……)的时候加深印象。
不过一直没找到csapp的实习手册。其中有个“二进制炸弹”实验非常吸引人,典型的反汇编作业,有点点实现我小时候破解愿望的感觉——希望找到以后不要让我太失望,呵呵。

不过这本书还是有些不足之处。让人感到最大的遗憾是最后三章“系统级I/O”“网络编程”“并发编程”讲得比较简略——自己正好是在这方面稍微熟悉点,觉得少了很多东西,有点遗憾。不过“并发编程”教给我了一个以前我根本不知道的东西——进度图,用来解释为什么会出现死锁以及如何解决实在是好极了(自己也是太孤陋寡闻……)。
另外还有个仔细读了apue2以后还让我非常困惑以至于还得上网查才弄明白的一件事,csapp当头一句话就解决了,那就是csapp写到pthread_detach函数时,说“为了避免存储器泄露,每个可结合的线程都应该要么被其他线程显式地回收,要么通过调用pthread_detach函数被分离”。而apue2关于detach的那段话硬是让我云里雾里,仅仅解释了thread的行为和怎么用,不讲为什么,害得我还得去查……不过apue2的thread部分不是W.Richard Stevens写的,是Rago后加的,的确有质量差别……

想来书也是有轻重之分,csapp的重点还是再讲硬件和软件的结合部,后面系统偏应用级的东西只是做抛砖引玉之用,也是难怪。尽管是这样,csapp有时还是会让人眼前一亮。
这本书另外的问题就是虽然中文翻译还算不错——也是过了个修订版的缘故,但是排版经常出错,尤其是排汇编代码和注释的时候。而且这个书名翻译得特别没劲,愣像是混杂在一堆国产计算机结构书里的东西……
不过还是那句,瑕不掩瑜,csapp的确是我看过的最好的计算机书之一了(本来想不加之一的,不过不加至少有点对不起apue^_^)。

说回来,csapp的致谢里面有这样一句话:

最后,我们衷心感谢伟大的技术作家Brian Kernigam以及后来的W.Richard Stevens,他们向我们证明了技术书籍也能写得如此优美。

UPDATE: 感谢Alan提供CSAPP的实验资料。由于需要的人实在很多,而且我又很懒,所以请这里下载,请善用。不要给我来信索取资料,我会删除所有索取留言,谢谢。

也许是捷径

星期一, 九月 18th, 2006
Tags:


上个星期,集中火力,把这本著名的书读完了。

先说些无关的。
现在每隔一段时间,总能看到一些新的技术书籍或者是老书的新版被chinapub/dearbook/csdn大炒,自己总是懒得去关心,不过被漫天的广告的推荐等等,砸下来也算有了点印象。
然后,总是能碰到些机会,和这些名书相见。见鬼的是,发现这些被狂炒的书竟然都不错——当然,包括这本《Code Complete》。大概是技术书籍比较独有的优势吧——已经习惯了忽略那些狂炒作的电影电视流行小说之类了,没想到放到技术书籍上倒还真算是某种程度上的经典。呵呵。

这本书,自然也是很早之间就耳闻了。碰巧公司事业部的书库(就是个n层书架)有这本书,就拿着看了。大概花了一个星期(周六整天加上几个晚上),全部看完了一遍。
总体感觉,的确是本难得的好书。不过可惜的是,对我帮助没有想象中的那么大。它讲的很多编程技巧和禁忌,自己基本都知道了,算是整个复习一遍。当然,自己摸索的没有它讲得系统和全面,不过大概是由于这原因吧,看得挺快。全部梳理了一遍,还是很喜欢的。
书难得。讲得范围实在是太广了,看完一遍后,完全可以当参考手册用——书中附带的核对表,可以很清楚的查出你的一个类或者函数或者设计写得是否漂亮。碰到有地方举棋不定,还能够查查。
这本书的根本主题,在于如何提高质量。很多其中的小地方,比如变量的命名,看起来在小处很繁琐,其实真的是极有必要——我想应该不止我一个人曾经被变量命名搞头疼过吧……
推荐想以此为职业的家伙买本或者借本看看。的确名不虚传。也许是条提升的捷径。

考虑是否自己是买本备用还是等电子版呢……
最近买了太多数书了(好贵啊……),然后以疯狂的速度一本本消灭。进度参看右边我的豆瓣,呵呵。

中国能否赶超日本

星期一, 九月 18th, 2006
Tags:

哦,不,这不是我的题目,而是这本书的题目。
一个前松下高管、现某大学名誉教授写的,写的是他眼中的日本经济和中国经济的比较。
说实话,我虽然有了一点心理准备,但是仍然被狠狠螫了一下。
有三点让我印象深刻:
1、日本的制造业是全球的最强大的,并不是在于它生产产品的多少,而在于它掌握了巨量的核心技术,以及在过去十年(被称为日本“丧失的十年”)里,年均3%GDP的科研投入——欧美是2%,而”中国2020年科研经费将达GDP的2.5%”。再算算,日本以几倍于中国的GDP(2000年是4.4倍),放下这样的投入,让它有了每年全球第一的专利申请量,有了无数超越其他国家的技术,有了它大量技术密集型的“全球唯一”的中小技术企业群,以及一个无比健康的产业链。这其实都在预料之中,只不过看起来,有点过于刺激了。
2、日本并不是出口导向型经济。这点书里给了不少数据加以说明,抄起来太麻烦了,麻烦各位看书去吧。
3、作者毫不吝啬的大力称赞中国人的经商能力,倒是让我看到了我一直没有能够看到的一个方面。想想也是,中国人太精明了,没有那种精明,怎么能造得出龙芯和麒麟,能够拿走国家几千万的科研资金……

这本书本来是给日本人打气的,要日本人不要恐惧中国制造业的发展,不要让中国威胁论吓到自己。不过任何一个读过这本书的中国人,应该都会有一个想法:有危机感的是,应该是我们。
译者在每篇后面都做了个评论。我看译者也比较可怜,生怕被愤青当作攻击对象,每次说话前都一定要先在某种程度上否定作者的观点,然后才敢慢慢开始说话,结果一开说,却又是把作者的数据再强调一边——难道是怕有人看作者的文章太过激愤以至于跳过去看译者的后记了么……

其实我不太想谈这个,因为现在中国属于民族情绪激愤状态,尤其是网上愤青奇多。而这个问题,却又是一两句话说不清楚的,没时间慢慢扯。反正,希望各位如果目前有愤青倾向,最好从其他方面看看,比如,看看中国目前的劳动密集型产业都是在生产啥,看看龙芯和麒麟,或者看看新语丝。
整个国家的研究体系,尤其是大学,特别的浮躁,特别的冒进,特别喜欢做面子文章。这是相当长时间内无法改变的。
日本用10年时间,每年3%GDP的科研投入,低调的政策,重新占领了制高点。
我们要用多少年才能学会更谦虚一点,更有自危感一点,更脚踏实地一点?
继续靠压低农民工工资提升GDP?或者靠提高房价提升GDP?
或者我们都去买空卖空?