java 学习书籍推荐之 O'Reilly'系列

Learning Java the O'Reilly's Way (Part I)
Java 技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话、个人数字助理(PDA)等电子产品,以及智能卡都可以透过 Java 的技术来为人们创造更便利的生活。许多人因此对 Java 感兴趣,想好好学习 Java。
因为讲授 Java 课程的关系,这几年来,不少人问我:怎样才能学好 Java,我给他们的建议很简单 ---『多读 Java 的好书,可以有系统又轻易地获得许多高手的经验』。其实,我说的也是我自己的经验。
『那么,要看什么书呢?』我知道你会这么问。毕竟书店里 Java 的书琳琅满目、怎样从其中选出一本最适合自己的好书,绝对不是一件容易的事。在建议您看什么 Java 书籍之前,让我先为大家做一些简单的分析比较。我认为,Java 原文书可以概略地分成两种:
「主题广泛」型:这类的书经常上千页,厚厚的一本,里面什么主题都有。
「主题专一」型:这类的书通常薄薄的一本,少于五百页,内容只专注在某特定主题。
「主题广泛」型的书,优点是可以让你一次学会很多名词和大概的观念,可是什么都只是浅谈即止,不够深入。 不都说「样样通、样样松」么!还真是有道理。
「主题专一」型的书就不一样了,内容只设定在一个主题,此主题不相关的内容一概不谈(或者只是概略地一提)。 这两类的书各有优缺点,选择哪一种端看您的需求而定。不过,我自己偏好「主题专一」的书,原因是这类的书有下面的好处:
内容深入:你真的相信「21 Days」就可以学通 Java?(我还看过一本书更夸张的,书名上有耸动的「24 Hours」字样。)如果这样的话,Java大师就满街跑了。多读一些 深入的内容,你才有可能超越别人。你可能认为:『我不过是刚入门的初学者,需要知道 Java 广泛的知识,而非深入的知识,所以看「主题广泛」型的 Java书有何不可?』 唔!话说得没错,但我认为这些简介性的知识在许多地方都可轻易取得(特别是在http://www.javasoft.com/),实在不需要去买一本 一千多页的原文书来 K, 现在的原文书也挺贵的,钱可要花在刀口上。
主题属性适合:如果只想学 Java 的网络设计,你当然不会去买一本大堆头的书,其中涉及网络的部分只有区区 50 页,看完之后依旧懵懵懂懂。你应该去买一本 500页,由浅而深,内容完全涵盖所有 Java 网络相关议题的书,看完这样的书,你差不多也可以算是 Java 网络专家了。有了「主题专一」的书,你就可以不必去买一本 95% 的内容对你没帮助的书。你可以想学什么,就挑什么。
新版本推出较快:Java 逐年在改版,书的内容也会跟着翻新,通常「主题专一」型的书比较能快速且完整地反应技术的改变。
许多出版社都有主题专一的 Java 系列,但其中规划最完整、内容最受肯定的就非 O'Reilly 的「 The Java Series」莫属了(可能和他们请了一个优秀的 Java 编辑有关)。 你可以到国外许多线上买书的网站上看看大家对于 O'Reilly「 The Java Series」的评价,就会知道我所言不假。
目前, O'Reilly Java 系列的书共有约二十(还在增加当中),我差不多全买齐了,虽然花了不少钱,但是值得。如果你认真的想学习 Java,我向您推荐 O'Reilly 的「 The Java Series」。套句傅培梅的广告词「教人 Java 三四年,这是我用过最理想的书」。
在后续的文章,我将陆续为大家介绍 O'Reilly Java 系列的每一本书。
《Java in a Nutshell : A Desktop Quick Reference》
O'Reilly 的「in a Nutshell」系列书籍向来以简洁、不拖泥带水著称,常常一两页的内容可以抵得过其它书籍十多页的篇幅,在计算机书籍内容灌水风气盛行的今 天,O'Reilly 的「in a Nutshell」系列可以算是个异数。「in a Nutshell」系列的每本书虽然薄,但该说的内容一件不少。除了简洁之外,「in a Nutshell」还有一个特色,就是同时具备 入门学习和参考查阅的双重功效。书的内容包含两部分,前面的部分是深入浅出的入门教学,后面的部分是参考资料。
《Java in a Nutshell》第一版是 O'Reilly「in a Nutshell」系列的第一本,目前本书最新的版本是第二版。《Java in a Nutshell》第二版厚度约共六百页,前面的223页是入门 教学,后面的部分是参考手册。如果,你能把本书前面薄薄的223页读懂,你的 Java 内功就会十分扎实。
C/C++ 和 Java 在语言上有许多相似性,所以 C/C++ 的程序员想跨入 Java 的领域比其它语言的使用者占了许多便宜。让我打个比方:C/C++ 的程序员只消翻过一道矮墙就可以从 C/C++ 的王国进入 Java 的领域。对于已经熟悉 C/C++ 的程序员来说,他们最希望能有 Java 书籍直接告诉他们 C/C++ 和 Java之间大大小小的差异,来让他们快速地将他们所惯用的 C/C++ 思维转成 Java 的思考方式,《Java in a Nutshell》正是这样的一本书。虽然后来有不少书籍也定位成 C/C++ 的程序员快速学习 Java 的书,但都没有《Java in a Nutshell》写得精彩完整而小巧。
在写 Java 程序的过程中,免不了要查一些资料,特别是API的用法,这时候,你会发现《Java in a Nutshell》后半部三百多页的参考资料超乎想象地好用,在良好的编排以及索引 的引导之下,你可以轻松地查到你需要的资料。
本书后半部的参考资料部分有两种查阅方式,方法一是透过 package 找 class,再透过 class 找 method或 field,这部分的参考资料在第十七章到第三十二章,通常使用这种方法 的人对于他所欲查询的 API已经有了大概的预期;方法二是完全没有概念时,直接透过第三十三章的字母排列方式找到他所欲查的资料,之后再透过方法一来找到详细的说明。
以前,《Java in a Nutshell》一书是许多人写 Java 程序时必备的速查手册,但现在因为许多 Java 开发工具都提供了方便的线上辅助工具,比方说:Borland JBuilder 可以透过 sensitive help(也就是F1按键)来找到你感兴趣的 API、或透过 Code Inside 之类的神奇功能来提示你某 API 的用法、或透过线上文件(支持hyper-link)来交互查阅,所以现在《Java in a Nutshell》的参考手册的地位已经不再像以前那般地重要了。
本书在Java 书籍中已经建立了权威的地位,一提起 Java 的好书,大家第一本想到的就是本书,在 Java书籍泛滥的今天,要写出一本这样令大家共同推崇的书实在不容易,而 这也是我对本书作者 David Flanagan 至感钦佩的地方。有读者说:『Flanagan 唯一的缺点是---写的书还不够多』。这真是对一个作家最极至的赞美。
为了达到精简的目的,内容就必须有所取舍,不能大小通吃。比方说,本书就只包含 core API,对于standard extension API(也就是javax package)则完全略去,而 core API 中也有少数的 package 被舍弃在外(作者打算另外写一本《Java Enterprise in a Nutshell》来容纳部分本书未包含的内容)。
同样为了精简的目的,本书相当缺乏完整的程序范例,作者另外写了一本《Java Examples in a Nutshell》来弥补这项不足。《Java Examples in a Nutshell》的程序范例之多, 媲美 The Waite Group 出版的《Java How-to》。我在后续的文章会介绍到《Java Examples in a Nutshell》。
尽管这是一本好书,不过我还是要提醒各位读者,如果你没有 C/C++ 的背景,就想透过本书来学习Java 的话,恐怕你会铩羽而归。在本系列后续的文章中,我会介绍一本不要求读者具备 C/C++ 背景的 Java 入门书。