国外计算机图书月旦评

 

新年一季度,也是各种评奖热闹登场的时候。虽然去年许多技术类杂志关张大吉,但是又有更多勇敢者前仆后继,所以评奖的繁多仍然不减当年。最引人瞩目的还要算《Software Development》杂志的Jolt大奖,已经到了第15届。各奖项将在3月上旬的SDWest大会揭晓,我们先来看看最后入围名单吧。此外,英国《VSJ》杂志等还评选了读者选择奖。

新年一季度,更是王者归来的季节。我们看到一批名著新版开始上市。其中声势最为浩大的应该是Java类图书。

                                      主持人  刘江

新年一季度,是市场定基调的时候。在国外计算机书界,虽然没有谁还会指望市场会恢复到网络泡沫之前的好光景,但是的确有越来越多的人开始有了一些谨慎乐观的情绪。根据最近《出版商周刊(Publisher Weekly)》的报道,书店反映说“一些读者买书开始增加”,整个生意已经改善。当然,这一切都是在收缩了计算机图书所占店面、减少了品种之后出现的。不同的书店逐渐特色分明,有些主要经营面向大众消费者、技术性不强的图书,Photoshop和数码摄影,网页设计、Mac OS以及AccessExcel等等主题是销售支柱;而主要面向程序员、大学生和专业人士的传统书店似乎困难更大,他们的消费者买书更加吝啬,而且多是Amazon的忠实用户。美国统计署公布的数据也表明,美国总的图书销售保持平稳,稍有增长。排行榜格局虽然没有太多变化,软件新版本推出也在放缓,而且不再有太多人关注,但是新书出版仍然有条不紊,从选题来看,策划功夫都比较到位,大家撞车的情况越来越少。也许一位书店总经理的话能够概括大家的共识:“如果你足够细致,并且有效把握住市场,计算机图书还是能够继续干下去的。”

第15届Jolt大奖

 

新年一季度,也是各种评奖热闹登场的时候。虽然去年许多技术类杂志关张大吉,但是又有更多勇敢者前仆后继,所以评奖的繁多仍然不减当年。最引人瞩目的还要算《Software Development》杂志的Jolt大奖,已经到了第15届。各奖项将在3月上旬的SDWest大会揭晓,我们先来看看最后入围名单好了:

                            通用类

Agile Project Management:Creating Innovative Products》(敏捷项目管理:创造创新性产品)Jim Highsmith                

Pearson/Addison-Wesley

本书我们在去年6月的专栏中介绍过,属于杂志编辑和评委们所偏爱的敏捷方法题材,得奖希望较大。Highsmith2000年大奖得主。

 

Crystal Clear:A Human-Powered Methodology for Small Teams》(Crystal Clear方法:以人为本的小团队方法学)Alistair Cockburn      

Pearson/Addison-Wesley

与上本同一类型,我们在去年11月的专栏中介绍过。如果能够获奖(我个人对此不太看好),则Alistair Cockburn将成为名副其实的得奖专业户(2001年和2002年两次生产效率奖)。

 

Exploiting Software:How to Break Code》(发掘软件漏洞:如何破解代码)

Greg Hoglund Gary McGraw

Peason/Addison-Wesley

本书在去年5月的专栏中介绍过。最近发现有技术网站的书评把expoit翻译成“开拓”,真是太离谱了。此书在安全性编程方面是集大成之作,至少应该有所斩获才算合理。

 

Head First Design Patterns》(设计模式捷径教程)

Elisabeth Freeman,Eric Freeman,Bert BatesKathy Sierra

O’Reilly

本书在去年11月的专栏中介绍过。在我看来,应该是大奖最有力的争夺者之一。主要的特点是内容和形式都极具新意,是技术图书的一大突破。考虑到《Head First Java》去年未能获奖,今年应该会有很好的机会。

Hiring the Best Knowledge Workers,Teching & Nerds:The Secrets & Science of Hiring Technical People》(聘用最佳技术人员的诀窍)

Johanna RothmanGerald M. Weinberg

Dorset House

Dorset House最近很受评委青睐,而且第一作者Rothman女士又是杂志编委,希望不小。

 

Joel on Software》(Joel谈软件)

Joel Spolsky

Apress

本书在去年9月的专栏中介绍过。很有特色的作品,但是也比较异类,历史上似乎还不太有类似图书获奖,该考验评委们是否有开放的心态了。

 

Refactoring to Patterns》(从重构到模式)

Joshua Kerievsky

Addison-Wesley Professional

本书在去年4月的专栏中介绍过。我个人意见,此书应该是大奖最有力的争夺者之一。技术上是1994年获奖的《设计模式》和居然没有获奖的《重构》之间的桥梁,如果不是作者资历稍微浅了一些,此书与前二者取得同样的地位,也是令人信服的。

 

Software Factories:Assembling Applications with Patterns,Models,Frameworks and Tools》(软件工厂:使用模式、模型、框架和工具装配应用程序)

Jack Greenfield,Keith Short,Steve Cook,Stuart Kent,John Crupi

Wiley

软件工厂(Software Factories)是微软软件工程工具组的最新成果,在最近的微软技术大会上有专题,已经引起了软件工程界的广泛关注。但是它本质上是AOPMDA一个层次上的东西,所以离实际运用恐怕还会有一段距离。有意思的是,本书的推荐序却是《Core J2EE Patterns》的作者Sun公司John Crupi写的,大概是微软和Sun握手言欢大背景下的产物。我对此书得奖并不看好。

 

                          技术类

Better,Faster,Lighter Java》(更好、更快、更轻的Java

Bruce A. TateJustin Gehtland

O’Reilly

本书在去年9月的专栏中介绍过。此书的入选有些出人意料,其实去年出版的J2EE方面好书不少,论深入和全面,它不如《Effective Enterprise Java》,论轻量级方案的阐述,它不如《Expert One –on –One J2EE Development without EJB》。

 

C++ Coding Standards:101 Rules,Guidelines,and Best Practices》(C++编程规范:101条规则、指导和最佳实践)

Herb SutterAndrei Alexandrescu

Person/Addison-Wesley

本书在去年11月的专栏中介绍过。由于此书适用面极广,而且可以作为C++文献的按图索骥之书,所以即使拿到所有C++图书中比较,其地位也能排在前3位而无疑。我个人认为属于本届入围技术图书中鹤立鸡群者,夺魁应该在情理之中。

 

Head First Serviets & JSP》(Servlets & JSP捷径教程)

Bert Bates,Kathy Sierra a Bryan Basham

O’Reilly

本书由于与大热门同属一个系列,如不出意料,应该归入陪太子读书一类。当然从Servlet & JSP这一门类来说,它还是佼佼者,只有《Core Servlet & JSP》可以与之匹敌。

 

Hibernate:A Developer’s Notebook》(Hiternate:开发人员手记)

James Elliott

O’ Reilly

此书入选有些蹊跷,如果要选一本Hibernate,也应该是Manning的《Hibernate in Action》才对,原创而且好评如潮。

 

Java Developer’s Guide to Eclipse,Second Edition》(Eclipse Java开发人员指南,第二版)

Jim D’Anjou,Scott Fairbrother,Dan Kehn,John Kellerman,Pat McCarthy

Pearson/Addison-Wesley

Eclipse已经成为最热门的Java开发平台。本书口碑极佳,入选自然顺理成章。

 

Mono:A Developer’s Notebook》(Mono:开发人员手记)

Edd Dumbill and Niel M. Bornstein

O’Reilly

NET技术的唯一代表,还是开源的旁支,评委们的口味很有意思。

 

Pert Medic: Transforming Legacy Code》(Perl诊室:转换旧代码)

Peter J. Scott

Pearson/Addison-Wesley

这是一匹黑马,Perl语言方面的经验性著作。

 

Physically Based Rendering:Theory to Implementation》(基于实体的渲染:从理论到实现)

Matt Pharr Greg Humphreys

Morgan Kaufmann

专业性很强、颇有深度的一本计算机图形学专著。作者分别来自NVIDIA公司和弗吉尼亚大学。

总的来看,名单有比较严重的缺憾,不能反映全貌。技术类尤其值得推敲。除了前面分别提到的明显偏差之外,像《Code Complete 2》这样的著作没有入选,就不清楚是什么原因了。难道有同一作品不同版次不能重复入选的前提?

 

                          
王者归来

新年一季度,更是王者归来的季节。我们看到一批名著新版开始上市。其中声势最为浩大的应该是
Java类图书。我们已经介绍了《Java核心技术》两卷均更新到了第7版。实际上,Java教程名著中除了《Java编程思想》(据说将在6月有新版)之外,其他的几乎全部于近日更新,以反映Java 5 的新变化:

Ivor Horton’s Beginning Java JDK 5th Edition

Java 5 入门经典

Ivor Horton

Wiley/Wrox

本书是优秀的Java入门书,作者Horton以善于教学而著称,他的CC++等书都拥有大量忠实读者。与有些人称之为Java双璧的《Java核心技术》和《Java编程思想》相比,本书的最大特点是通俗易懂,讲解细致,而且章节安排与国内传统教学方式类似,所以很适合国内的初学者,可惜的是前几版国内引进时翻译都没有过关,影响了书的知名度。本书的另一个问题是篇幅很大,新版超过1400页。

 

Professional Java,JDK 5 Edition

Java 5 高级编程

WClay Richardson,Donald Avondolio

Wiley/Wrox

这是Ivor Horton的配套书,属于从初级到中高级的教程,涉及许多语言本身之外的技术,包括各种开源软件工具的使用(Ant,Junit等),设计模式等等,内容全面但是又不驳杂,是非常难得的第二本书。从本书能够看出,Wrox的团队在Wiley公司文化熏陶下,变得更加持重了。

Head First Java,2nd Edition

Java捷径教程,第二版

Kathy Sierra,Bert Bates

新版中泛型、变长参数等等内容的增加,当然不会改变原来的创新形式。

 

Java:A Beginner’s Guide,Third Edition

Java初学者指南,第三版

Herbert Schildt

McGraw-Hill Osborne Media

畅销入门书,知名作者,篇幅最为短小。

 

Java In A Nutshell,5th edition

Java技术手册,第5

David Flanagan

O’ Reilly

这本书曾经有很大的名气,但是时代发展,原来赖以傲视群雄的简明教程+参考的模式,似乎已经落伍,书太厚,远不如在线文档方便。加之上一版索引等查找工具不够完善,失去了大量人气。不知道新版本能否扭转颓势?

 

Murach’s Beginning Java 2,JDK 5

Java 5入门

Doug Lowe,Joel Murach,Andrea Steelman

Mike Murach

书名似乎不够规范,既是Java 5,又怎么写Java 2呢?是一个小公司的出品,能够得到越来越多人的注意,显然有其独到之处。

 

书·人·事专栏

                 Java 的盛宴(中)

刘基诚  雷厉风

本文的上半部分发表以后,引起了一些读者的兴趣。有读者对我所说的“许多普通读者面对书海,仍然无所适从”大有同感,并且询问到具体如何选书买书的问题。其实,同样的问题在各种场合包括论坛、技术讲座上,我曾经无数次被问到,所以在继续介绍Java好书之前,我先花一点篇幅说明一下。

                    关于选书的经验之谈

以我个人的经验来看,选中适用图书的关键,在于“知己知彼”。知己,当然就是对自己有正确的定位。拿Java来说,你在购买第一本Java图书之前,需要确定自己处于什么层次。如果编程经验较少,对基本的程序设计语言概念都知之甚少的话,《Java核心技术》或者《Java编程思想》就不太合适了,这一层次的巨著都在书的最前面明确说明读者需要“一定的编程经验”,而《Java语言导学》、《21天学通Java2》可能是你的正确选择。如果你学习过其他程序设计语言,了解“关键字”、“函数”、“数据类型”等等基本概念,但是对面向对象完全是门外汉,那么《Java编程思想》是一个很好的起点,它是典型的对象优先(Object First)教学法的代表。如果你已经是有一定经验的C/C++程序员,《Java核心技术》显然最适合你,因为书中有许多专门针对C/C++程序员的提示,而且循着“环境·语言结构·面向对象”顺序讲解。其余类别的图书也可以按照这种思路选择。

此外,我有一个特别的建议:如果你的英文不错,建议入门的时候以英文版为主,辅以一本中文基础教材,尤其是面向对象的概念方面,英文直接阅读理解,往往比中文更加容易。因为面向对象概念其实涉及语言和知识表示中较深层次,恰恰是不同语言区别较大,不容易转译的地方。加之国内早期翻译不够审慎,而且统一性不足,使用中文术语体系理解,有时候反而事倍功半。就以“面向对象”一词来说,新手对此是很难望文生义的,这是典型的不良翻译范例。曾经有一个比较夸张的笑话,说有人将《面向对象方法》当成谈恋爱技巧书买了回去,其实正说中了此译的弊病。相对而言,海外译为“物体导向”,要更接近原意。这里的对象=object,就是中文的物体、事物乃至事情,所以《Java编程思想》有“万事万物皆对象”(everthing is an object)的说法。而这里的面向=orented,其实是“以……为重点/中心”、“(此方法/领域中)……很重要”的意思。所以面向对象=object-oriented的英文原意,其实是“以事物表示为中心”之义。时至今日,专业人士当然不再可能有出上述笑话的可能,大家反而已经习惯这一术语体系,并且母语化了。但是学习面向对象技术的新手呢,他们仍然免不了在“类”、“类型”、“接口”、“实例”、“成员”、“方法”、“实现”、“协定”、“字段”、“属性”、“服务”、“消息”……构成的语词森林中筚路蓝缕。从这一点来说,国内高等院校开始双语教学,是有其益处的。

正确选书的第二个重要环节就是知彼了,也即尽量多地了解相关图书信息。遗憾的是,目前国内客观而且有内容的书评类资料非常缺乏,出版社提供的信息又往往公信力不够。本专栏的目的之一,就是尝试对此情况有所补益。当然,普通读者的获知手段并非没有。第一手的信息,包括出版社、作译者的情况,出版前言、作译序、图书外装帧的介绍文字和设计水平都是透露制作者在此书上花费的功夫几何。前言和序纯属八股文字的图书,作译者用心程度就非常值得怀疑。此外,国内各主要专业网上书店(china-pub.com,第二书店,华储等等)都有类似Amazon的自由书评以及各种销售排行榜(不少实体书店也会提供销售排行榜),虽然成色远较Amazon为逊色,但还是很值得参考的,毕竟这些都反映着客观因素。尤其是china-pub上外版书有直接到Amazon该书原文版的链接,可以很方便地了解原版的评价,然后考虑翻译质量,即可八九不离十了。本报定期刊登的各出版社“销售热点”、“书店经理荐书榜”等等栏目也是图书情况的重要参考。至少,你可以了解到某种、某类书市场上哪些销售良好,哪些是出版社的重点产品。

老实说,目前选书买书的确不是易事。撰写本文过程中,我所查询到的Java图书不下六七百种,但是真正值得评论的却在30种以内。看来,国内出版界离正确的方向还有不小的差距。

继续我们的Java图书盛宴。在综合和入门层次图书之后,我们已经更上一层楼,可以看到更广阔的Java世界图景。首先进入我们视野的是语言编程经验和深入层次图书,面向中级读者。正如著名程序设计专家Sun公司杰出工程师Guy Steele所说:“对于一门程序设计语言,你需要了解三样东西:一是语言核心,即语法结构;二是语言的词汇,包括所提供的数据结构和功能设施;三是语言的习惯用法。”一般的程序设计图书只会涉及到前面两点,而要讨论第三点,往往需要作者有大量的代码开发和阅读经验,难度极大,所以,这一层次目前国内市场上所见图书,基本上都是国外翻译作品。

 

             JAVA盛宴之——“经验/深入”

谈起汇集经验的编程图书,大家都会想到Scott Meyers的《Effective C++》。虽然有传言说Stroustrup曾私下表示此书其实是将自己和其他人的许多想法收集起来而成,颇不以为然。但是对于我们读者,Meyers的确是开创了一代风气之先。此后,各个领域都出现了不少以“条目(item)”组织的优秀图书。有评论说,“Effective”风格作品的出现,往往是某种技术成熟的一种体现。果不其然,在Java日渐成为主流之后,先后出现了多部“Effective”风格的作品。

 

Effective Java中文版

Joshua Bloch著,潘爱民译

机械工业出版社  定价39

本书在Java界的地位相较于Scott Meyers之于C++,可以说是有过之而无不及。作者是James Gosling之后Java语言的主要实现者(负责设计了Collection框架和Java.math包),在Java界处于绝对核心地位,这一点甚至超过了Meyers。书中许多例子来自Java平台库本身的实际设计,非常贴近实践,许多段落都显然是作者5年(19962001)中在Sun核心开发团队中博观约取、深思熟虑之后的经验结晶,自然弥足珍贵。当然,潘爱民先生的翻译为中文版增色不少。

值得一提的是,作者已经在Java 5开发工作完成之后,于20047月离开了Sun公司,加盟了如日中天的Google公司。像许多读者期望的那样,他有了更多时间奉献Java社区—最近我得到美国朋友的消息,说Bloch今年将出版一本新书,暂定名为《Java Puzzlers:Traps,Pitfalls,and Corner Cases》(Java疑难杂志),在Amazon上已经开始预订。真是令人期待!

 

Practical Java中文版

Peter Haggar  侯捷  刘永丹译

中国电力出版社  定价 46

本书的作者是IBM公司的研究人员,有丰富的Java开发、教学和推广经验。由于格式均仿照Effective C++,本书和晚一年出版的《Effective Java》的比较是不可能回避的。从作者的名气而言,本书自然差了一个档次。从内容上说,本书与后者的选材也存在一些重复,比如equals、多线程、接口、异常处理,但直接的撞车为数并不多。我的阅读经验表明,本书与后者更多地是一种相辅相成的关系。本书作者重于教学,所以浅出为主,叙述通俗,“可以在短暂的闲暇中阅读”,许多内容讨论更细(书中共68条,篇幅更大于后者),正好可以作为入门到《Effective Java》之间的桥梁。此外,“性能”一章基本上是本书独有,而且许多地方给出了字节码,使读者得以窥探内部机理,非常有价值。

总而言之,作为普通读者的我们,为了提高功力,同时得两位大师相助,自然是求之不得的事情。反正总共也不过100余条至理名言,是不是?

本书如果说有问题的话,应该是出在翻译上,虽然出自名家之手,但是大量台湾述语以及“data”、“object”、“array”的保留,对于内地读者来说,确实反而造成了阅读障碍。

 

Java Pitfalls中文版

Michael C.Daconta等著  徐波译

人民邮电出版社  定价 45

More Java Pitfalls中文版

Michael C.Daconta等著

Java研究室译

人民邮电出版社  定价 52

这个系列也是Effective系列书籍,而且准确地说是第一本此类图书(前一本的出版时间更在《Practical Java》之前),作者也是业界有名的技术作家。然而生不逢时,有道是“既生渝,何生亮”,如果没有上面两本书的存在,本系列应该能够得到更多读者的青睐。

首卷与上面两本书取材基本相同,特别是与Haggar一书重复较多,但是功力的差距比较明显,尤其是有15条讲述GUI,占据了较多篇幅,而该深入讲述的主题反而过于泛泛,甚至有若干不太正确的表述(比如不加限制地说“抽象方法必须改写”)。

次卷将选材大大拓展,涵盖了客户层、Web层和企业层,已经不能以《Effective Java》和《Practical Java》不起眼的小兄弟视之。但是和国外其他同类图书(国内尚无译本)比如《Effective Enterprise Java》等相比,此书又显得不够系统,失于琐碎。当然目前而言,J2EE方面的经验类书籍,国内恐怕也只有这一种选择了。

 

深入Java虚拟机

Bill Venners 曹晓钢 蒋靖译

机械工业出版社 定价58

JavaC/C++的重要差异之一,就是中间形式的字节码的存在,这一点与NET语言中的MSIL相同。许多人认为,Java设计的本意就是高度抽象,使程序员无需关心底层,但是实际上这是做不到的。看看前面几本书中讨论性能等主题的部分,要真正知其所以然,分析字节码是必不可少的。微软公司的朋友也告诉我,他们开发中查看代码生成的MSIL是家常便饭,须臾离不开的。因此,如果你只能呆在语言层面之上,就无法真正成为专业程序员。了解平台,至少能够阅读字节码,应该是一种基本功。

本书正是为此目的而编写的。好像也是国内仅见的一本讲述Java平台运行机理的书。作者是如今已经得享大名的Artima.com网站的创始人,在程序设计界影响颇大。此书出版以前,我们能够找到的虚拟机和字节码方面的资料,只有枯燥的Sun公司虚拟机规范(O’Reilly曾经出版过一本,但是限于Java1.1)。与其他偏重底层的图书不同,身为程序员的作者完全为程序员设想,材料的选取和组织都非常体贴。配套光盘和网站内容丰富,更有生动的Applet解释抽象的过程。如果其他比较难啃的技术领域都能有Venners这样的优秀作者,我们就有福了。

 

Java编码规范(英文版)

Allan Vermeulen,Scott W.Ambler等著

人民邮电出版社  定价 11.8

本书有一句极好的宣传语:“七个人写的书才140页?那肯定不错!”可不要作“臭皮匠”和“诸葛亮”的联想。七个作者中Scott Ambler是有名的技术专家和作者,相信不少读者都从他的其他著作和专栏文章中得到不少教益。其他几位则是著名的平台软件供应商Rogue Wave公司的核心开发人员,本书其实正是从该公司使用的编程规范发展而来的。我也确实见过许多开发公司使用本书作为编程规范的蓝本。它不仅薄而且是小开本,计算机图书中难得的精干,但这么小的篇幅里却实实在在地汇集了许多宝贵经验,总共108条规则,对程序编写中的命名、版式、文档、包的规范都有很好的总结,讲编程的一章只有30页,但涵盖了类型安全、同步、异常处理、断言、效率等高级主题。

此书应该是《Effective Java》和《Practical Java》的很好补充,虽然深度无法相比,但是范围更大。须知,只懂语法、技术而不知编程规范的Java程序员在大多数公司都是不受欢迎的。当然,Sun公司发布的Java编程规范也非常值得参考。关键是在公司内部要在这些基础上因地制宜,制定自己的规范,并一以贯之地遵循。

要说明的是,本书有些建议是不正确的,有的对照《Effective Java》和《Practical Java》即知。对此网上有不少评论,大家可以参考。

 

下一次,将以各个专题方向上的图书结束我们的Java书山之旅。