首页 » Java程序员修炼之道 » Java程序员修炼之道全文在线阅读

《Java程序员修炼之道》序

关灯直达底部

“Kirk说加油站也卖啤酒。”这是Ben Evans跟我说的第一句话。他来克里特岛参加一个开放型Java会议。我说我通常到加油站就是加油,但那边拐角确实有个店卖啤酒。Ben看起来对我的回答有点儿失望。我在这个希腊小岛上生活了5年,还从来没在加油站买过啤酒。

当我在看这本书时,那种似曾相识的感觉又来了。我自认为是一名Java专家:用Java写了15年程序,发表了几百篇文章,在各种会议中演讲,还执教Java高级课程。可阅读Ben和Martijn的这本大作,经常能给我一些意料之外的启发。他们一开始先介绍了为改变Java生态系统所做的开发工作。类库的内部实现修改起来相对容易,一般也能见到成效。例如,Arrays.sort的内部实现在Java 7中不再用MergeSort算法,而是改用了TimSort。由于这个变化,你不用修改自己对偏序数组进行排序的代码就可能看到性能的提升。然而,修改类文件格式或添加新的VM特性则需要大量工作。Ben了解这些情况,因为他在JCP执行委员会任职。这本书也是关于Java 7的,所以你能接触到Java 7中的所有新特性,比如语法糖的完善、String上的switch、分支/合并,还有Java NIO.2。

并发就是线程和同步,对吗?如果这就是你对多线程的认识,那么你需要学习新知识了。就像作者在书中指出的,“并发领域的研究工作正开展得热火朝天”。与并发相关的邮件列表上每天都有讨论,新点子层出不穷。本书会告诉你如何看待分而治之策略以及如何规避某些安全陷阱。

在我看到类加载那一章时,我觉得他们说得有点儿过了。那都是我和朋友们过去用来炫耀的技巧,居然也给摆出来供大家研习了!他们讲解了javap(这个小工具用于透视Java编译器生成的字节码)的工作方式,还谈到了新的invokedynamic指令,并解释了它跟普通反射的区别。

我特别喜欢讲性能调优的第6章。除了Jack Shirazi的Java Performance Tuning,这还是第一本能够抓住“如何使系统运行更快”这个本质问题的书。我可以用四个字来总结这一章的内容:“测量,别猜。”这是做好性能调优的本质,因为人们不可能猜到运行慢的是哪段代码。这一章从硬件的角度解读了性能方面的问题,而不是只提供编码技巧。作者还向你展示了如何测量性能。有一个挺有意思的基础测试小工具——CacheTester类,可用于查看缓存未命中时的开销。

本书第三部分介绍了JVM上的多语言编程。Java不仅仅是Java编程语言,它还是一个可以运行其他语言的平台。我们已经见过不同类型语言的爆炸式增长了。有些是函数式的,有些是声明式的,还有一些是平台的接口(Jython和JRuby),让其他语言可以在JVM上运行。语言分为动态的(如Groovy)和静态的(如Java和Scala)。在JVM上我们可能因为多种原因而使用非Java的语言。如果正好要开始一个新项目,在做决定之前先看看都有什么可用吧。你可能不用再写那么多套路化的代码了。

Ben和Martijn向我们介绍了三种备选语言:Groovy、Scala和Clojure。在我看来,它们是当下最切实可行的选择。作者描述了这些语言之间的差异、与Java的差异以及它们的特性。不需要太多的技术细节,介绍每种语言的各章足以帮你弄清楚应该用哪一种。别指望能在书中看到Groovy的参考手册,但你会了解哪种语言更适合你。

之后,你将深入了解如何进行测试驱动开发以及如何持续集成系统。我发现一件很有意思的事,忠实的“老管家”Hudson这么快就被Jenkins取代了。无论如何,这些工具跟Checkstyle和FindBugs一样都是项目管理的基本工具。

你有望通过研读本书成为一名优秀的Java开发人员。不仅如此,你还能了解如何保持优秀。Java一直在变。下一版中我们将见到lambda表达式和模块化。1人们也在不断设计新语言,不断更新并发结构。你现在了解的很多真相将来可能不再是真相。因此,我们必须活到老学到老!

1 实现Java模块化的Jigsaw项目被延后到Java 9了,至少要到2015年。——译者注

一天,我又开车路过Ben想买啤酒的那个加油站。在经济状况如此低迷的希腊,它也像很多公司一样关张了。我再也不可能知道他们卖不卖啤酒了。

Heinz Kabutz博士知名Java技术教育家、The Java Specialists' Newsletter创始人