分类: Java
2011-05-11 16:00:56
在学界,海外的大专院校几乎都已经清一色地以Java为默认教学语言,数据结构、操作系统乃至编译、图形学等等科目通通采用Java实现。连美 国院校委员会(CollegeBoard)针对高中生的AP考试也用Java替换了原来的C 。也难怪高德纳(Knuth)的徒孙同时也是该委员开发主席的Mark Weiss(就是多本数据结构教材的那位作者)居然要写一本《C++ for Java Programmer》了。
Java的热门,也集中体现在出书上。与Java相关的图书所占比例,可能早已大过了技术本身的市场份额。近年来尤其如此。而且,从国内图书销售数据来看,Java图书的销售也早已经与VB、C/C++ 相较而有过之无不及了。
需要指出的是,Java本身与其他语言最大的不同,在于它既是一门语言,更是一个平台,相当于C#,C++ /CLI,VB.NET…… 加上.NET平台。而且Java平台又分为Java SE(即所谓Core/Destop Java)、Java EE(Enterprise/Server Java)和 Java ME(Mobile/Wireless)三层,其实此外还有Jini,JXTA,Java Web Services等无法因此归入以上类别的平台技术。 加上Apache、JBoss等大旗下的开源Java技术和轻量企业级Java技术已成燎原之势,许多互相竞争的框架、产品、技术层出不穷,已经屡屡击败 Sun公司的官方方案,一直保持着长江后浪推前浪的势头。总而言之,笼统意义上的Java实际上已经成为一个大迷宫,发展方向也非常不确定,即使是许多专 业Java开发人员也无法了解全豹了。
在这样的大背景下评价Java图书,其实是并不讨好的差事。因此,我们将内容分为两部分,本部分讨论Java语言层次的综合类、入门和中高级图书。
在国内,Stroustrup的《C++ 程序设计语言(特别版)》和《C++ Primer中文版》经常被人并称为C++两大巨著,记得当时出版社宣传中有“倚天屠龙”语,确为妙喻。其实,《C++ 编程思想》也处在同一等级别,尤其是加上后来出版的第二卷之后。
无独有偶,在Java世界里,同样也有并驾齐驱的巨著双璧。
《Java编程思想》(第三版)
Bruce Eckel著 侯捷译机械工业出版社定价:99元
本书似乎毋需多言了,它在国内名气之大我早有耳闻:以99元的高价销售已经超过了50000册(侯捷网站数据),远远甩开了竞争对手, 其盛势甚至超过了海外———其实在国外,本书与《Java核心技术》、Horton、Deitel的《Java程序设计教程》、van Linden的 《Java2教程》(英文名Just Java)都在伯仲之间,仅仅是略占优势而已。除Deitel的面向教材市场,售价超过90美元之外,其余的连定价都 咬得很紧,无论篇幅多大,均在35美元上下,可见竞争之激烈。
本书的优点是对象优先,强调概念的理解,开放的模式带来了类似开源软件的群聚效果,有更多人帮助提高图书质量。第三版中对当代软件工 程实践和工具(Ant、XP、Design by contract)的融入,便于读者进入职业角色,也是大大高出一般编程书的地方,体现了Eckel仍身处 开发社区中央的优势。当然,这些特点同时也带来了一些负面影响,那就是有些初学者尤其是缺乏基本编程知识的人由此入门可能会有困难。我的建议是,可以先选 择一本纯粹的入门书,比如《Java语言导学》,再回头来通过本书打通任督二脉,增进功力。
《Java2核心技术卷I:基础知识》(第6版)
Cay S.Horstmann, Gary Cornell著 程峰等译
机械工业出版社定价:75元
这本书渐渐有了追赶前书的势头。其实这一点并不奇怪。本书的作者均是从业界转入教职、有着丰富经验的大学教 授,而且除本书外,均另有多部技术名著面世,写作经验也非常老辣:Horstmann写有直接与Deitel竞争的Java教材以及其他多部畅销的计算机 科学教材,在Wiley出版;而Cornell是著名的VB、C 技术作家,同时还是近年来发展飞速并且收购了大量Wrox版权的技术图书出版社Apress的创始人。图书的技术审校有包括Java传奇人物 Joshua Bloch等数十人,这样的阵容,威力可想而知。
由于叙述详细,编排方式近似于国内教材,本书已经逐渐成为许多读者受挫于《Java编程思想》之后的替代方案,而且颇有成效。但是作 者的原意却是面向“有坚实编程语言基础的程序员”的,所以我建议完全不具备编程知识的读者还是需要另找一块敲门砖比较理想。本书更准确的定位Eckel自 己在《Java编程思想》后面的资源清单中已经为我们说明了:“篇幅巨大,内容全面,我在寻找答案的时候第一个就会想到它。”当然,Eckel指的是本书 的上下两卷。说到原书的卷II,作者和出版社显然有所失误,因为卷II的第6版从来就没有出版过。如今,两卷已经统一更新到了第七版。
《Java程序设计 教程》(第5版)
H.M.Deitel著,施平安等译 清华大学出版社
国内图书中能够与前两巨著相提并论的,恐怕应该还是这两本了。Deitel的程序设计语言教材影响极大,类似于国内的谭浩强,综合而言至今仍然无人能敌。 当然Deitel技术上绝无问题,业界实践也并不缺,只不过他完全用一个模板方便地不断重用于各个语言,多年不变,显得有些不思进取,而且套路性文字在正 文中越来越多,有一厢情愿之嫌。这些与前两本书相比,都是有差距的。不过,如果忽略篇幅和定价因素外,Deitel倒是很好的入门 书。我当年就是用他的C真正入门的,相比一些同事采用国内教材的痛苦回忆和后患无穷,高下立见。
《Java程序设计语言》(第4版)
Ken Arnold, JamesGosling著 陈昊鹏等译 人民邮电出版社
Gosling的这本书篇幅是四本中最小的,它容易让我们 联想到Kernighan&Ritchie的《C程序设计语言》和Stroustrup的《C 程序设计语言(特别版)》。令人奇怪的是,此书的销售远远不如前二者。但是,语言之父的凝练文字、严谨定义和书中不经意流露出来的原创思想,弥足珍贵,对 于理清概念绝对是最佳读物。建议所有Java程序员都读一读,从书中找到别处没有的营养。
入 门
入门书似乎是技术含量低的代名词,实则不然。要写一本好的入门书其实是非常难的,否则,当年Dryden出版社何以给哈佛的 Mankiw(就是当今美国总统的经济顾问)彻头彻尾的一本入门书《经济学原理》拍出100万美元预付金?写入门书,你不仅需要具有高出所写内容层次许多 的技术深度(这样才能在选择、把握材料时游刃有余),还要研究对象的学习心理,通常这意味着一定的教学经验。此外,对语言和叙述方式的要求也是最高的 ———高端技术书的读者大多能够宽容你文笔的干涩,而对于初学者,只要他读得费劲,你的其他优点将荡然无存。最后,你还将面临激烈的竞争,市场上可能有几 十个形形色色的对手已经严阵以待。
同样,推荐入门书其实也是最难的。原因之一还是同类书太多,几乎每个参与竞争的相关出版社都不会轻易放过这一角逐,市场上此类书占总 品种比例大概接近了40%。原因之二则是涉及面太广:初学者是金字塔之根基,而且今日之高手同样有初学记忆,你要是推荐得不中意,他们也会发表意见的,众 口既然难调,难免不会众口铄金。
以上原因,促使得我们不得不谨慎从事。我们的解决办法,是设立如下评判标准:
1.内容选取须反映当前实际。这里并没有严格限定必须遵守最新标准。实际上也没有必要,至今尚没有见到国内有哪本书反映J2SE5.0 (请读者注意,Ja鄄va平台的新版本已经从原来的1.5统一到5.0)的———本人正在翻译中的《Java核心技术》(第7版)可能会是比较早遵循 5.0标准的作品。
2.内容选取应该基本符合J2SE范畴。记得Tim O'Reilly(出技术书非常出名的O Reilly公司的老板)曾经讥讽当时流行的Java傻瓜书和“21天/24小时/10分钟自学Java”一类的图书说,Java本身并不是那么简单的编 程语言,纯粹为了炒作而做出多快好省的美妙承诺,这样的书、作者和出版商都是极不负责任的。的确,Java技术本身的复杂(虽然简单是Sun公司为其下的 第一个修饰词),想用一本书讲清楚基本的入门内容:语言要素、面向对象概念、图形界面开发、事件处理、I/O、applet、异常与调试等等,控制篇幅都 已经非常困难,哪里还能再奢谈其他?
3.翻译书的译校质量应该达到起码的要求。
4.市场上容易买到。这条标准其实很难完全量化,一个指标是调查公司所统计的实际销售数据(由出版界朋友提供),一个指标是国内主要技术图书网上书店的销售排名以及点击次数。综合起来,只要缺货并不严重即可。
有趣的是,这几条简单而明显的标准,衡量起当下的图书时,却成了巍巍其阿的分水岭:几乎所有国内的入门图书都被毫无借口好讲地直接淘汰 出局了。第1条标准最具杀伤力,我惊奇地发现,国内的作者居然近乎完全口口相传、人云亦云似地还在大讲特讲AWT图形组件,而对Swing要么根本不提, 要么介绍非常简略,最后完全弄成喧宾夺主,对于这样的书,则是坚决枪毙之。毕竟,Swing在图形界面方面替代AWT,已经是1998年1.2发布时的陈 年旧事了,7年过去了,我们的作者、老师还在教授读者使用实际项目中根本不可能使用的AWT图形组件,简直是可怕而又可悲的事情。要知道,国外讲AWT的 书早已绝版多日了。
第2条上出现的问题有的非常可笑,有几本书(销售成绩好像还很不错)居然在煞有其事地讨论JavaScript!而不少书本来篇幅就少得可怜,许多该讲到的远未讲透,却乐滋滋地干起了副业,在最后用几页篇幅讲JSP、Servlet或者EJB,让人哭笑不得。
而第3条上折损的也颇有不少,Ivor Horton极富盛名的《Beginning Java2》先后几个版本《Java2入门经典》 (1.2)(中国电力出版社)、《Java2编程指南》(1.3,1.4)(电子工业出版社)就都毁在翻译上。奇怪的是,最早的版本前几章还流畅可读,此 外就完全有些乱来了。后面的版本居然将nativeAPI翻译成“自然API”,真不知道译者学的是什么专业。
那么,最后的幸存者有哪些呢?
《Java教程》
Mary Campione等著,人民邮电出版社
Sun公司官方推荐的Java语言初学教程,作者都是Sun公司内部的文档写作人员,所以文字和技术是绝对有保障的,中文翻译通顺可 读。编排上,将ap鄄plet和集合等内容放入附录,也是避重就轻的合理之举,其实applet在实际项目中很少有使用的机会。常见问题也是一个很有特色 的环节。不足的地方是图形组件部分太省,当然,这正好可以用《Java核心技术》等书进行弥补。
《Java就业培训教程》
张孝祥著 清华大学出版社
张孝祥此书颇有国人特色(比如字符乱码问题)、局部也很见功力(比如一些穿插在正文中的小经验、小难点解疑),能够看出作者下了不少 功夫,有所积累。国内读者由此应该比较容易入门。问题出在图形组件部分,先讲述AWT事件处理模型本来很好,但是继而用两节篇幅讲述AWT,Swing却 只有一节,就有些令人遗憾了。
《21天学通Java2》 第三版
Rogers Cadenhead等著,袁国忠译,人民邮电出版社
本书属于许多人痛批的“21天学通系列”,其实内容不错,翻译也算中规中矩。所不足的地方,是作为敲门砖篇幅稍大,定价较高。如果删 去RMI、联网、Servlet和JSP内容,也许更加合理。
《Java2实用教程》
Herbert Schildt著,马海军等译,清华大学出版社
实不相瞒,此书原版在国外是一本入门畅销书,作者名气很大,写书多年了,是Osborne的王牌作者。原文讲Swing很少,而且例子比较小儿科。中文译本还没有读过,不知如何,需要读者自己判断。
在综合和入门层次图书之后,我们已经更上一层楼,可以看到更广阔的Java世界图景。首先进入我们视野的是语言编程经验和深入层次图书,面向中 级读者。正 如著名程序设计专家Sun公司杰出工程师GuySteele所说:“对于一门程序设计语言,你需要了解三样东西:一是语言核心,即语法结构;二是语言的词 汇,包括所提供的数据结构和功能设施;三是语言的习惯用法。”一般的程序设计图书只会涉及到前面两点,而要讨论第三点,往往需要作者有大量的代码开发和阅 读经验,难度极大,所以,这一层次目前国内市场上所见图书,基本上都是国外翻译作品。
谈起汇集经验的编程图书,大家都会想到Scott Meyers的《Effective C++》。虽然有传言说Stroustrup曾私下表示此书其实是将自己和其他人的许多想法收集起来而成,颇不以为然。但是对于我们读者,Meyers的 确是开 创了一代风气之先。此后,各个领域都出现了不少以“条目(item)”组织的优秀图书。有评论说,“Effective”风格作品的出现,往往是某种技术 成熟的一种体现。果不其然,在Java日渐成为主流之后,先后出现了多部“Effective”风格的作品。
Effective Java 中文版
Joshua Bloch著, 潘爱民译
机械工业出版社
本书在Java界的地位相较于Scott Meyers之于C ,可以说是有过之而无不及。作者是James Gosling之后Java语言的主要实现者(负责设计了Col鄄lection框架和Java.math 包),在Java界处于绝对核心地位,这一点甚至超过了Meyers。书中许多例子来自Java平台库本身的实际设计,非常贴近实践,许多段落都显然是作 者5年(1996—2001)中在Sun核心开发团队中博观约取、深思熟虑之后的经验结晶,自然弥足珍贵。当然,潘爱民先生的翻译为中文版增色不少。
值得一提的是,作者已经在Java5开发工作完成之后,于2004年7月离开了Sun公司,加盟了如日中天的Google公司。像许 多读者期望的那样,他有了更多时间奉献给Java社区——最近我得到美国朋友的消息,说Bloch今年将出版一本新作,暂定名为 《JavaPuzzlers Traps,Pitfalls,andCornerCases》(Java疑难杂症),在Amazon上已经开始预订。真是令人期待!
Practical Java 中文版
Peter Haggar著 侯捷 刘永丹译
中国电力出版社
本书的作者是IBM公司的研究人员,有丰富的Java开发、教学和推广经验。由于格式均仿照EffectiveC ,本书和晚一年出版的《EffectiveJava》的比较是不可能回避的。从作者的名气而言,本书自然差了一个档次。从内容上说,本书与后者的选材也存 在一些重复,比如equals、多线程、接口、异常处理,但直接的撞车为数并不多。我的阅读经验表明,本书与后者更多地是一种相辅相成的关系。本书作者重 于教学,所以浅出为主,叙述通俗,“可以在短暂的闲暇中阅读”,许多内容讨论更细(书中共68条,篇幅更大于后者),正好可以作为入门到《Ef鄄 fectiveJava》之间的桥梁。此外,“性能”一章基本上是本书独有,而且许多地方给出了字节码,使读者得以窥探内部机理,非常有价值。
总而言之,作为普通读者的我们,为了提高功力,同时得两位大师相助,自然是求之不得的事情。反正总共也不过100余条至理名言,是不是?
本书如果说有问题的话,应该是出在翻译上,虽然出自名家之手,但是大量台湾术语以及“data”、“object”、“ar鄄ray”的保留,对于内地读者来说,确实反而造成了阅读障碍。
Java Pitfalls中文版
Michael C. Daconta等著徐波译
人民邮电出版社
More Java Pitfalls中文版
Michael C. Daconta等著
Java研究室译人民邮电出版社 定价52元
这个系列也是Effective系列书籍,而且准确地说是第一本此类图书(前一本的出版时间更在《PracticalJava》之前),作者也 是业界有名的技术作家。然而生不逢时,有道是“既生瑜,何生亮”,如果没有上面两本书的存在,本系列应该能够得到更多读者的青睐。
首卷与上面两本书取材基本相同,特别是与Haggar一书重复较多,但是功力上的差距比较明显,尤其是有15条讲述GUI,占据了较多篇幅,而该深入讲述的主题反而过于泛泛,甚至有若干不太正确的表述(比如不加限制地说“抽象方法必须改写”)。
次卷将选材大大拓展,涵盖了客户层、Web层和企业层,已经不能以《Effective Java》和《Practical Java》不起眼的小兄弟视之。但是和国外其他同类图书(国内尚无译本)比如《Effective Enterprise Java》等相比,此书又显得不够系统,失于琐碎。当然目前而言,J2EE方面的经验类书籍,国内恐怕也只有这一种选择了。
深入Java虚拟机
BillVenners著 曹晓钢 蒋靖译
机械工业出版社 定价58元
Java与C/C 的重要差异之一,就是中间形式的字节码的存在,这一点与.NET语言中的MSIL相同。许多人认为,Java设计的本意就是高度抽象,使程序员无需关心底 层,但是实际上这是做不到的。看看前面几本书中讨论性能等主题的部分,要真正知其所以然,分析字节码是必不可少的。微软公司的朋友也告诉我,他们开发中查 看代码生成的MSIL是家常便饭,须臾离不开的。因此,如果你只能呆在语言层面之上,就无法真正成为专业程序员。了解平台,至少能够阅读字节码,应该是一 种基本功。
本书正是为此目的而编写的。好像也是国内仅见的一本讲述Java平台运行机理的书。作者是如今已经得享大名的Artima.com网 站的创始人,在程序设计界影响颇大。此书出版以前,我们能够找到的虚拟机和字节码方面的资料,只有枯燥的Sun公司虚拟机规范(O Reilly曾经出版过一本,但是限于Java1.1)。与其他偏重底层的图书不同,身为程序员的作者完全为程序员设想,材料的选取和组织都非常体贴。配 套光盘和网站内容丰富,更有生动的Applet解释抽象的过程。如果其他比较难啃的技术领域都能有Venners这样的优秀作者,我们就有福了。
Java编码规范(英文版)
Allan Vermeulen,Scot tW.Ambler等著
人民邮电出版社定价11.8元
本书有一句极好的宣传语:“七个人写的书才140页?那肯定不错!”可不要作“臭皮匠”和“诸葛亮”的联想。七个作者中 ScottAmbler是有名的技术专家和作者,相信不少读者都从他的其他著作和专栏文章中得到不少教益。其他几位则是著名的平台软件供应商 RogueWave公司的核心开发人员,本书其实正是从该公司使用的编程规范发展而来的。我也确实见过许多开发公司使用本书作为编程规范的蓝本。它不仅薄 而且是小开本,计算机图书中难得的精干,但这么小的篇幅里却实实在在地汇集了许多宝贵经验,总共108条规则,对程序编写中的命名、版式、文档、包的规范 都有很好的总结,讲编程的一章只有30页,但涵盖了类型安全、同步、异常处理、断言、效率等高级主题。
此书应该是《EffectiveJava》和《PracticalJava》的很好补充,虽然深度无法相比,但是范围更大。须知,只 懂语法、技术而不知编程规范的Java程序员在大多数公司都是不受欢迎的。当然,Sun公司发布的Java编程规范也非常值得参考。关键是在公司内部要在 这些基础上因地制宜,制定自己的规范,并一以贯之地遵循。
要说明的是,本书有些建议是不正确的,有的对照《EffectiveJava》和《Practical Java》即知。对此网上有不少评论,大家可以参考。