《程序员》推荐定位自己 有的放矢——一位技术作家眼中的Java图书选购技巧

作者以Java图书做范例,总结自已多年购书的经验,并全面剖析了当前Java图书市场的现状,读来很有深意。希望在阅读本文后,读者能真正购买到适合自己且“不太差”的图书。
选购电脑书的原则是什么?可能的答案有:好懂、全面、深入、实用等,本人以为,最重要的是选购一本自己能看懂的书,然后才能考虑其它方面。
进过书店的读者都知道,电脑书的选购非常令人头疼,你肯定是因为不懂书中的内容才会购买,但是电脑技术的实践性很强且越来越复杂。就编程技术来说,多数情况下需要上机编写程序才能知道自己是否学会了。不过书店不会提供机器让你编程序,甚至连小硬板凳都不提供,你只能站着或者蹲着看书,即便腰酸背疼腿抽筋地看到书店下班,也不一定能知道哪本书自己能看懂。那么,有没有一些简单的方法利于判断呢?本文将以Java图书为例,告诉读者一些技巧。
关于电脑书的现状,本人认为基本的事实是好书不多、坏书不少,凡是看过几本的读者应该或多或少有所体会,问题有多严重不便在此描述,就用下面的图示作为支持本人观点的一个证据吧:
这是新闻组上的一篇文章,这位叫落花吹雪的网友是计算机专业的毕业生,显然不笨,可是居然“看书越看越糊涂”,以至于连“对象”一类最基本的OO(面向对象)术语都不明白。
分析造成如此局面的原因同样不是本文的目的,那是需要很多长篇大论才能彻底曝光的,本文只想告诉读者,如果我们不得不在垃圾箱中找食物充饥,那怎样才能找到比较卫生的?
下面,本文将模拟读者进入书店选书的过程,看看读者在该过程的各个阶段,应该注意哪些事项。中心思想是怎样根据能看懂的内容,对书的质量和是否选购做出决定。当然,通常情况下,书中的技术内容在书店中很难看懂(因为不能在机器上测试),但是有些非技术内容可以看懂,例如书名、作者名等等。

选书的顺序:外文原版/翻译版/本国作者版
看到这个标题,不会有人骂我是汉奸吧?这是本人选书的No.1原则,很多专家也都建议尽力阅读外文原著(如果外文过关的话),例如侯捷先生。
走进任何一家书店,可以把书店里的电脑书分成外文原版/翻译版/本国作者版3类。首选外文原版的原因很多,作者以为最重要的原因是外文书原装、原汁、原味的,谁让电脑技术基本上都是洋人发明的呢。可是当这些原装货被翻译过来或者由国内作者再阐述一遍时,味道可能就变了,或者说有“中国特色”了,不幸的是很多情况下是变差了而不是变好了,下面就举落花吹雪网友不明白的“对象”一词为例。
本人刚开始接触面向对象技术时,也象落花吹雪一样,看书越看越糊涂,很久都不知道什么是对象。“对象”是面向对象技术的最基本概念,一般也是需要解释的第一个概念,本人至今还记得看的第一本书(还是译著)是这样讲解的(大意):
按照面向对象理论,世界是由对象组成的。例如人是对象,电脑是对象,猪是对象,泥巴也是对象……
我是头一次听说世界是由对象组成的,而我学的马克思主义哲学告诉我,世界是由物质组成的,除了物质什么都没有,我对他老人家的观点一直坚信不疑。那么“对象”又是什么东西?记得自己后来又翻了别的书,结果发现也是满篇“对象”,难道世界真变成对象了?这种说法动摇了我坚如磐石的世界观,可又没有因此建立新的世界观,所以感到极大的困惑,以后的内容自然就无法看懂了。
终于有一天,看到了一本英文资料,才知道“对象”是Object的译文。Object的含义是“物体”,这是中学生都认识的简单词汇,如果你阅读的是英文书而不是二手的译著,即便第一次学习面向对象技术,也不会不明白什么是Object,所以我就把上面的中文又翻译回了英文:
Everything in the world is an object. A man is an object. A PC is an object.A pig is an object……
这段英文很简单,没有被歪曲的中文意思为:
世界上的一切都是物体。人是物体,电脑是物体,猪是物体……
看,“一切都是物体”的含义和我的世界观基本一致了。从此,本人才慢慢学会了面向对象技术。顺便说一句,《Think in Java》有一章的标题就是Everything is an object.
原装的英文通常很容易理解,但是当它变成译文或者中国作者再用自己的话讲解时,常常变得莫名其妙,特别是专业术语,可能与英文原意差距极大,差距之大甚至可以写笑话了,例如可以用中文“对象”证明一个人的太太是他养的猪和他养的猪就是他太太,推理如下:
因为按照面向对象理论,万事万物都是对象。
所以,猪是对象—他养的猪是对象—他养的猪是他的对象。
又因为他的对象就是他的太太,他的太太就是他的对象。
所以,他养的猪是他的太太,他的太太就是他养的猪。
但是,你无法用英文证明Pig和Wife是同一个Object。这里本人对读者有个请求,如果你知道“对象”的原创者是谁,请千万不要把上面笑话中的“他”改成“你”,然后寄给原创者。
对英文术语的拙劣翻译是翻译版和国内作者版图书的通病(其它毛病在后面讲述),除了“对象”,闻名遐尔的还有“套接字”(Socket插座)、“句柄”(Handle把手/手柄)等等一堆垃圾名词,这是本人首选原版书的一个重要原因。但是,书店里的原版书太少,从国外买又太贵,补救方法是通过网络寻找一些免费学习资料。例如Sun网站上就有大量的教程,《Think in Java》也有免费的电子版,目前该书的英文版也在书店里出现了。
书店里,有深度的Java书,大部分为国外作者所著(其它电脑技术图书可能也是这样),而国内作者的书主要集中在Java入门知识和JSP领域。

封面/封底/内容摘要/前言等

这些内容是很容易看懂的,读者应该注意下面这些信息:
作者的资历
国外作者的著作(英文书或者译著)通常都有作者简介,如非名家,多半也是专家,例如《Think in Java》的作者Bruce Eckel,Sun公司的著作等,否则就不好意思暴露身份了。
然而,国内作者的著作多半没有。所以,本人的建议是,选择那些有资历作者的著作,当然,十有八九又得选国外作者的书了。
作者的联系地址
同样,国外作者的著作(英文书或者译著)一般都有联系地址。有地址意味着作者对自己的著作比较有信心,质量有相当的保证,否则不是招骂吗?以前,国内图书没有作者的联系地址,现在少数图书也列上了作者地址,也许这是国内作者质量改善的信号。所以,本人的建议是,选择那些有作者地址的图书。
印刷次数和册数
多数电脑书会印上自己的印刷次数和册数。电脑书第一次印刷量一般为5000册,如果重印了,说明图书的质量较高,例如《Think in Java》的中文版《 JAVA编程思想 》就印刷了数次。但是指定教材不能这样判断,质量再差读者也是不得不买。另外应该注意的是,如果图书涉及的技术较深,质量再高可能也不会重印。
图书的厚度
就Java而言,本人以为页数少于200的Java书可能讲不了什么东西。目前,书店里有Sun公司的一些比较薄的书,作者翻过一本有关EJB的,发现主要内容是讲体系、结构、层次等等,不是教你编码的,好象属于研究方面的。
前言和内容摘要
一本书的前言和内容摘要主要有下面这些信息:
n本书的层次/主要内容/读者对象
关于这一点见下一节的说明。
n本书的特色
几乎所有的书都自称“通俗易懂”、“循序渐进”或者有XX“特色”、“优点”等,反正就是说自己是本好书。想想也可以理解,有哪个作者会说自己的书很差?本人的观点是,大部分书的这些自吹自擂都不可信,只是广告词而已,除非它能说明自己是如何做到“通俗易懂”、“循序渐进”的。
本人也写了几本Java书,甚至自称“Bestbook”,为了说明自己不是空口无凭,花了不少篇幅来列举证据,包括印上读者来信,也包括本人的联系地址和网站。侯捷先生的书上也有不少读者来信。然而,印上读者来信的电脑书很少,包括国外作者的书。

确定图书的类型

常见的Java书可分为下面几种类型:
n 有关语法和API的
n 集成开发环境的
n 工程方面的
这是本人自己的分类,和读者的理解可能不完全相同,下面就解释一下。
《Think in Java》就属于第一类,适合于入门者,无论是基础知识的入门还是高级知识的入门。例如如果你不知道Servlet和EJB,尽管这些知识比较高级,仍然要选择第一类的图书。
集成开发环境通常描述菜单、按钮之类的作用,很少涉及具体的语法和API,例如Jbuilder方面的书。如果你不会EJB,通过集成环境也帮不了你多少。选择集成环境的图书要在自己有语法和API基础之后。
工程方面图书的特点是综合性较强、内容较深,判断的标准之一是例子的代码是否很长。这类书容易和第一类图书混淆,实际上,很多书自身就是混淆的,或者说得好听点:兼具两类书的特点。
本人翻过一本Wrox的书《 Wrox程序员参考系列:Java服务器高级编程 》,感觉就是这样。它讲了EJB、Servlet等,但是如果想学会,可能有相当难度。目前Wrox的书(特点是封面上有很多人头像)在国内不少,本人更愿意把它们归入工程类,即当你先学会了EJB、Servlet等内容后,再看这些书会比较容易,同时也有很大的收获。
书店里还有一些以例子为主的书,例如怎样做一个功能完整的网站等,这类书也应该属于工程类,它们对语法和API的讲解通常很简略。
有一些手册之类的书,例如列出所有API含义的那种书,像字典一样,显然,你肯定不会把这些书当课本用。
还有一些书猛一看有点像“夸夸其谈”之作,特点是代码很少,例如前面提到的Sun公司的一些薄书。本人感觉这些书的层次更高,必须有很高的水平才会觉得有用,例如《J2EE核心模式》,坦率地说,本人还没到这种层次。

确定图书的技术层次

从前言、内容摘要甚至书名上可以了解到图书的层次或者起点,如“入门”或者“初级”、“中级”、“高级”等等。这些描述多半是诚实的,但是太笼统并且不一定完全正确,例如“初级”、“高级”究竟具体到什么程度?
《Think in Java》在Introduction一章专门有Prerequisites(预备知识)一节,很详细地描述了《Think in Java》需要读者具备的技术基础,部分原文如下:
This book assumes that you have some programming familiarity: you understand that a program is a collection of statements, the idea of a subroutine/function/macro, control statements such as“if” and looping constructs such as “while,” etc.
本人所写的Java书也比较详细地描述了读者需要具备的预备知识。
手里有一本John Zukowski所著《Mastering Java 2》的中文版《 Java 2从入门到精通(J2SE 1.4版) 》,书作者也是位专家,该书出版较早,目前书店里很难找到了。其前言和内容摘要称其适合各级开发人员,所以本人曾经想把它当入门书,但是发现很难看懂,原因是作者设定的入门门槛,比本人实际的门槛高,可那是本人把书买回来以后才发现的。
本人以为,在书店里确定图书的技术门槛是否和自己的门槛高度一致非常困难,前言和内容摘要的说法不可靠。

阅读正文

前面说过,因为不能测试,在书店里通常无法看懂想学习的技术内容,但是仍然有方法帮助你在一定程度上判断该书的质量:
n 阅读已知的内容
如果了解书中的部分内容,先看看书中是怎样讲解的。
n 如果买书是为了解决某些问题
那就看看所选的书是否提供了答案,当然你不一定能够看懂。
n 作者的文笔
作者的文笔当然影响图书的质量,本人以为文笔的底限是简洁通顺。就本人认为,国内作者和译者的文笔通常很一般,老外的句子就活泼一些。本文前面谈过英文术语的翻译问题,这是译著和国内作者版共同的问题。然而,译著的一个特有问题是语句不通顺的情况很多,侯捷先生的文章列举了不少例子。如果是国内作者版,那语句不通的问题就比较少。判断文笔的简单方法之一是数数句子是否太长,例如一句话超过30个字可能读起来就比较费劲了。
某些书的前言和内容摘要的文笔相当好,不能以此判断全书,你还是需要阅读正文。
我的建议是,如果发现文笔不错,书的质量可能比较好,这起码说明作者的写作比较认真。如果文笔一般,就不好说了,因为可能作者的文笔就是如此。文笔差的书最好不买,不管文笔差的原因是什么,不好懂是肯定的。但是如果买译著,可能就得忍着点了。

选书时的其它注意事项

n 不要被书名迷惑
现在的电脑书名非常诱人,例如“傻瓜书”、“轻松入门”、“快速精通”、“X日通”等等,这些很可能只是广告词而已。
n 不要只看前言和内容摘要
如果把书名比喻成广告标题,那么前言和内容摘要就是广告内容了。到书店随便翻翻,没有一本书的前言和内容摘要写得不引人入胜的,难道都可以买?
n 不要迷信出版社
某些出版社的名气可能比其他出版社大,但是图书的质量主要取决于作者而不是出版社。
n 不要为装璜漂亮的书所吸引
猩猩也能穿上名牌服装,可它仍然是头畜生。
n 书店里同类书非常多,可以对照比较。

介绍几本Java书

前面的内容是模拟读者在书店里的选书过程,告诉读者怎样根据能看懂的内容,对书的质量和是否选购做出决定。坦率地说,这些讲述不一定保证你能够买到可看懂的图书,只是希望减少买错书的机会。现在,我想根据自己所见,介绍几本书给读者,同样,本人的介绍仅供参考,这些书同样不一定适合你。
开书单之前,先谈一下本人在电脑学习中的一个观点:入门难而深入不难,“万事开头难”嘛。当你入门后,再研究任何深入的知识都比较容易,所以下面主要介绍入门图书。
在Java方面,最难入门的就是面向对象技术,这是入门知识,如果没有学会,Java的其它知识根本就无法理解。遗憾的是,把面向对象知识讲解得很详细并且又好懂的书并不多,例如叫落花吹雪的那位网友,他的问题可能就是没有找到一本介绍OO技术的好书。还有个正面的例子,曾经有个读者给我来信,告诉我一个“曲线救国”的事:他想学C#未果,转而看我写的Java书,明白了OO后,C#也懂了。
出于对中文书的“偏见”,本人主要通过阅读英文资料学习,尽量对译著和国内作者版图书敬而远之,因此这类书看得较少,即便看了也不仔细,就不好详细说这些书如何如何了(其实前面已经说了很多了)。

《Think in Java》
《Think in Java》的中文版名为《 JAVA编程思想 》,中文版为第一版,书店里的英文版为第二版。很多人推荐该书作为Java的入门书,这也是本人的观点。作为入门书,该书有点难,但比很多其它译著和国内作者版的图书都好懂,特别是面向对象技术讲解得很全面,甚至有点过头了。

网站教程
Sun网站上的教程(http://java.sun.com)是英文的,内容很多,涉及很多基础和深入的的主题,也比较好懂。本人以为,作为入门教程,特别是想学习全面的面向对象技术,不是很合适,面向对象技术还是《Think in Java》讲解得全。这些教程更适合对高级主题的学习。
老外都是活雷锋,喜欢把自己的作品让别人免费分享,所以网上的资料不少,本人对它们的总体评价是比较好懂,这是否是网络教程的特点呢?至于中文教程,读者应该能猜到,本人连书店里现成的书都不愿翻,还会花钱在网上找?

本人著作
毛遂自荐,本人目前共出版了下面3本书:
n 《 Java程序设计百事通 》:这是入门书,没有《Think in Java》讲得多,但是同样的内容也许更好懂,对面向对象技术的讲解也很详细,并且不要求读者具备OO的任何基础,入门门槛更低。以作者所见,对OO技术讲解得很详细的著作就是《Think in Java》、本书和下面介绍的本人另外一本书。
n 《 Java 2高级程序设计百事通 》:该书的技术基础严格基于前一本,如果你学会了前一本,不会看不懂此书。
n 《 成功通过Sun认证Java2程序员考试 》:本书针对SCJP认证而写,对OO技术的讲解比第一本书还要多(考试的需要)。本书的竞争对手是两本英文的认证书,不过它们都是复习性质的,不适合没有学过Java的读者阅读。而此书则既可作入门书,又可作复习书。
想了解详细情况,可参考本人网站http://bestbooks.top263.net。

书店Java图书
为了写作本段内容,本人特地前往书店,腰酸背疼腿抽筋地在书店里呆了很久,总算了解到一些最新信息,不过,也是大概的印象而已。
Java的入门书比较多,有国内作者也有国外作者的。特别留意了一下有关OO技术的章节,发现除了上面提到的几本,讲解得比较详细的几乎没有。国内作者的书仍然集中在入门书和JSP方面。还看到几本用于学校的教材,当然也是入门的。Java成为大学课程应该是Java影响力增长的表现,这是很可喜的现象。
较深入的书主要是国外的,最多的是Wrox出版社的书,一水的印有作者大头像的红色封面,很容易识别。其它国外出版社的高级书就比较少。
除了Wrox的书,Sun公司写的书也很多,记得有网友推荐过《Java 2核心技术》(两大册)可作基础书阅读,这次在书店里看到,方才想起来,但是没有仔细看过。还有比《Java 2核心技术》薄一些的书,前面提到过一本,这次在书店又草草翻了几本,感觉层次很高,很可能比Wrox的书还深。

说了很多,只想告诉大家选书的技巧,以上虽为个人观点,实际上也是自己多年经验教训的总结。还是那句话,买电脑书如同瞎子摸象。总之,本文不能保证你能买到好书,但也许能保证你买到一本不太差的书。

浅谈如何学习加密与解密技术–段钢

很多人都想学习解密,这东西刚入门时会让人沉迷进去,可以饭不吃、觉不睡。出现这种现像,也许是解密满足了人们的猎奇心里吧。但掌握这方面技术,对自身的提高确实有好处。可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序。研究解密技术有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。许多程序发展,都经历了这一锻炼过程的。 而大多数人可能认为解密是一门高深的学问。造成这种原因是以前这方面的技术资料缺乏,从而将“解密”这一技能“神”化了。初学者一般不知从何下手,由于没方向,花费了大量时间和精力,走了不少弯路。这里就给对这方面感兴趣的读者指明一个方向。

讨论前,先了解一下计算机中的程序。高级语言编写的程序,会编译成机器语言在CPU中执行,如Visual C++等。由于机器语言与汇编语言是一一对应的,因此就可将机器语言转化成汇编语言,这个过程称之为反汇编。而汇编语言可能读性是比较好的,这样就可分析程序流程,解析其功能了,这个过程就是解密(俗称破解)。也就是说,解密的基础是建立在汇编语言级别上的,因此想涉足这一领域的朋友,汇编语言一定得学好。汇编语言是大学计算机的必修课,这方面的书籍品种很多,虽然大多书本是以DOS汇编为讲解平台,但对理解汇编指令功能是没影响的。等汇编学好了,建议再掌握Win32编程。Win32程序设计就是API方式的Windows编程,学习Windows API将使您更深入地了解Windows工作方式。此类书籍有Charles Petzold著的《Windows程序设计》(以VC来讲解)。另一本是罗云彬著的《Windows环境下32位汇编语言程序设计》,它以MASM汇编为讲解平台。有了上面这些基础,你就可以参考《 加密与解密(第二版) 》这本书入门了。

学习解密其实很累的,需花费大量的时间,而且经常会碰壁,三五天毫无进展是极为平常的事情。这时你可能有点想退却,其实你不要着急,只要你认真学习,成功就在眼前。没有人是生来就什么都会的,如果你有问题,就大胆的去问你周围的人。学解密的秘诀就是勤奋+执着!记住并能做到这两点,你会变得很优秀的。

等你解密入门后,建议再看看Matt Pietrek、Jeffrey Ritcher等大师的专著,这些书是每个程序员都应该阅读的:《Windows 95 System Programming Secrets》(中文译名《Windows 95 系統程式设计大奧秘》),《windows高级编程指南》,《Windows2000编程技术内幕》,《Win32系统编程—Windows 2000应用程序开发指南》等。这样,你就对系统底层有一定的了解了。到了这个水平后,就可朝软件加密这块发展了,例如编写自己的加壳软件等。这时,可以阅读本站推出的《 软件加密技术内幕 》这本新书了,这本书可以让你了解PE的格式,教你如何编写PE分析工作,如何编写加壳工具等。

软件的加密与解密是一个迷人的研究领域,它几乎可以与任意一种计算机技术紧密结合——密码学、程序设计语言、操作系统、数据结构。而由于这样或者那样的原因,对于这一领域的关注程度一直还处于低温状态。而这两本书相信会为更多对知识怀有渴望的朋友多开辟一条走向这个领域的道路,并且进而推动这个领域的不断发展。

介绍了一些操作系统学习的经典书籍,包括理论上的、具体操作系统的。
Abraham Silberschatz的两本书:
1. 实用操作系统概念(影印版)
2. 操作系统概念(第六版 影印版)
这个作者绝对是顶尖级的,来自贝尔实验室,是目前世界上操作系统方面的领军人物。这两本书第二本和第一本很多地方相似,区别在于第二本理论偏重一些,第一本实例讨论的更多一些。这两本书别看很厚,但是写的非常流畅,属于比较易读的一类。

3. 现代操作系统(英文版·第2版)
Andrew S. Tanenbuam(坦尼伯姆, AST)是第4本书的升级版,里面添加了一些新的操作系统方面的讨论,原理部分比第四本稍有增强。个人认为,是除了前面两本之外的最好的书。

4. 操作系统: 设计及实现(第二版)(英文影印版)
这个比较有名了,主要是分析minix源代码的书,顺带着讲了下原理,应该说是偏于实践的,可能当年的linus的教材就是这本,影响较大,可以帮助你了解一个文件系统或系统调用之类是如何实现的。当然,和目前的操作系统来讲,稍简单了一些。想做linux kernel hacker的同学此书可以一读。

5. 操作系统:现代观点(第二版 实验更新版)(英文版)
Operating Systems: A design-Oriented Approach 这两本一般,但是还是比国内抄袭的教材强很多,可以作为补充阅读的书籍。

6. LINUX内核源代码情景分析(上册) LINUX内核源代码情景分析(下册)
Understanding Linux Kernel
Linux internal
这三本是最nb的linux内核分析书籍,后两本讲2.2内核,第一本讲2.4。

7. 4.4BSD操作系统设计与实现(英文影印版)
不说少了,原来berkeley那帮写bsd的其中几个人写的,经典就是它了。

8. UNIX操作系统设计(英文版)
:古老的unix设计方面的书籍,应该说这本书在unix世界里面的影
响是十分巨大的,很多后来的unix分枝,思想都是缘于此书。里面主要讲解unix各个部分
实现时所用的算法,其中一些目前还在使用中。想了解一下unix实现但又没什么时间扣
minix或linux内核的朋友可以看看,在这本书上花费几十个小时,绝对超值:)

9.Linux内核完全注释
这一本书我觉得也很棒。它以Linux 0.11内核源码为基础进行详细的分析,解释细致到位。虽然不是“经典”,但仍推荐!凭借简洁明了的源码分析,你可以管窥Linux操作系统的奥秘。
可惜现在还没有印刷版。相关网址:http://www.oldlinux.org

“这本书(《敏捷软件开发:原则、模式与实践》)不但肯定是2002年度最好的设计类技术图书,而且在今后的几年中,很难出现比它更好的作品。”
Robert C. Martin的经典著作Agile Software Development中文版(《 敏捷软件开发:原则、模式与实践 》)面世,这是计算机技术出版领域的一件大喜事。即使在今天技术图书市场非常繁荣的局面下,这本书的问世也仍然是值得广大开发者格外留意和关注的事件。这不仅是因为它刚刚荣获(2003年6月评选的)2002年度Jolt震撼大奖,更因为这本书本身的价值和独特魅力。

Robert Cecil Martin是软件开发领域里响当当的名字。1970年代,他还是个年轻小伙子的时候就是一位有名的UNIX黑客。经过长期的开发实践后,他成了软件开发领域中的知名专家。在Rational公司期间,Martin丰富的实践经验与Booch深厚的理论功底形成了完美的组合,把面向对象设计的理论与实践推向了高峰。1994年,Grady Booch的经典著作《Object-Oriented Analysis and Design with Applications》(中译本:《 面向对象分析与设计(原书第2版) 》)问世,与此几乎同时,Martin的第一本著作Designing Object-Oriented C++ Application Using the Booch Method也由Prentice Hall出品。这两本书彼此相互辉映,当时引起了很大的反响。这本书不单为Martin确立了软件设计领域顶尖专家的地位,而且奠定了他独一无二的写作风格。

阅读这本书(《 敏捷软件开发:原则、模式与实践 》)的过程,是一个充满了发现、领悟和兴奋的过程。我只读了其中几个章节,就已经知道这本书大大超过了事前的预期,是当代软件开发领域最杰出的著作之一。这个时候,Software Development Magazine每年一度的Jolt评奖工作正式开始,我冲到投票网站,毫不犹豫地给这本ASD投了一票。事后我愉快地得知,此书果然如我所愿地夺得了去年技术图书类最高奖项–Jolt震撼大奖。在阅读全书大约三分之一之后,我对于该书的主要特点和内容架构已经有了把握,于是跑到Amazon网站上,给该书写下了一篇评论,题目是:本年度的最佳设计类图书,在书评中我简单介绍了书的特点,并且做出结论:这本书不但肯定是2002年度最好的设计类技术图书,而且在今后的几年中,很难出现比它更好的作品。

当然,这并不是说我”慧眼独具”,业内经验丰富、感官敏锐的高手大有人在。我听说在台湾,三位资深工程师联名上书某出版公司要求引进此书,并且自告奋勇去翻译。这些资深工程师收入丰厚,根本不是为了那点微薄的翻译酬劳而折腰,完全是希望能够把这本极有价值的好书介绍给更多的业内人士,造福大众。一本书能够引起这么大的热诚,可见它本身的魅力了。

那么究竟这本书好在哪里呢?

首先,该书延续了Bob大叔著作的一贯特色,以实例为本,不尚空谈,因此格外真实,摄人心魄。Martin从多年的写作中提炼出一种独特的风格,就是”引领式传授”。与别的作者不同,面对问题,Martin不是把最后那个完美的答案一下子放在你面前,让你拜倒在他脚下,被他的睿智折服。他很清楚,当读者在大师面前拜倒时,内心充满了挫折感,同时会丧失自信。而自信是一个设计者由成功走向成功的最关键因素。因此,Martin还原了一个真实的设计过程–带领着读者一起设计。读者在书中能够看到,他也会犯错误,也要面临痛苦的选择,也会做一些愚蠢的决定,也会被一些”激动人心”的想法诱惑,但是,最后他能够跨越重重荆棘,看透重重迷雾,得到优秀的设计。他跟我们一样,是一个有血有肉的设计者,而不是什么天赋异禀的天才。正因为如此,他能达到的,我们也能达到。这样的风格,使我们从阅读中能够逐渐体会到软件设计最精髓的东西:张力与平衡。如何选择,如何思考,如何面对困境,这些才是最宝贵的财富。这些财富,就在我们自己的大脑里,而Martin的书,就是打开这个财富宝库的钥匙。此外,读者在阅读这本书的时候会发现,Martin在教授具体技术的时候,始终以实例教学为主。比如附录中教授UML,就是通过两个实例来教授UML基础知识。诸位不妨从这两个附录开始阅读此书,体会一下作者的风格,看一看在UML学习方面,究竟是传统的罗列式教材给你的印象更深,还是以实例为依托的Martin式风格更有效率。

其次,详略得当。Martin很清楚哪些东西应该讲的细致一些,哪那些东西可以讲的抽象一些。这一点也是大师风范。软件设计这个领域,有很多东西是应该讲清楚,却很少有人能讲清楚的,比如设计中的权衡,实例的综合运用。还有很多东西,是没有必要长篇大论的,却被很多人拿来喋喋不休,比如说一些基本的设计原则或模式,一些开发过程思想,一些技术理念等等。这些东西讲得简明扼要能够给人以智慧的启迪,讲得冗长拖沓,定下几十上百条规则方法,则必然脱离实际,堵塞和束缚读者的思想。可惜很多作者不明白这个道理,或者是虽然明白但是假装不明白,把很多简明睿智的概念变成了又臭又长的裹脚布。Martin的书则决无此弊。这也应当归功与他多年的实践经验。从这本书中我们可以看到,他对于思想和原则一般是言简意赅,意到为止。而对于有助于提高读者实际设计能力的实例,则不惜笔墨,详加阐述,可谓煞费苦心。

最后一点,也是相当重要的一点,是本书选材匠心读到,精彩绝伦,特别是还有大量独创性和创新性的技术,来自Martin多年来的研发实践,十分珍贵。这比之当下流行的抄袭之风,已经不可同日而语。比如本书的Acyclic Visitor,Extension Object,Monostate,Taskmaster等模式,并不属于经典的23模式,很多都是来自Martin自己的创造,配合实例解析,有助于大幅度提高读者的设计实践能力。

总之,这本书是近年来难得的佳作,希望大家都来好好阅读和体会这本书,它将为你的设计能力带来一个质的提升,同时,也有助我们对”怎样算是一本好的技术图书”有更进一步的认识。
(本文节选自《敏捷软件开发:原则、模式与实践》的序言,作者孟岩)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注