background image

从每一次研讨会收到的反馈都帮助我修改及重新制订学习材料的重心,直到我最后认为

——

它成为一个完善的教学载体为止。但本书并非仅仅是一本教科书

我尝试在其中装入尽

可能多的信息,并按照主题进行了有序的分类。无论如何,这本书的主要宗旨是为那些独
立学习的人士服务,他们正准备深入一门新的程序设计语言,而没有太大的可能参加此
类专业研讨会。

3. 目标
就象我的前一本书《Thinking in C++》一样,这本书面向语言的教授进行了良好的结构与组
织。特别地,我的目标是建立一套有序的机制,可帮助我在自己的研讨会上更好地进行语
言教学。在我思考书中的一章时,实际上是在想如何教好一堂课。我的目标是得到一系列
规模适中的教学模块,可以在合理的时间内教完。随后是一些精心挑选的练习,可以在课
堂上当即完成。
在这本书中,我想达到的目标总结如下:
(1) 每一次都将教学内容向前推进一小步,便于读者在继续后面的学习前消化前面的内容。
(2) 

采用的示例尽可能简短。当然,这样做有时会妨碍我解决 现实世界 的问题。但我同时

也发现对那些新手来说,如果他们能理解每一个细节,那么一般会产生更大的学习兴趣。
而假如他们一开始就被要解决的问题的深度和广度所震惊,那么一般都不会收到很好的
学习效果。另外在实际教学过程中,对能够摘录的代码数量是有严重限制的。另一方面,

这样做无疑会有些人会批评我采用了 不真实的例子 ,但只要能起到良好的效果,我宁
愿接受这一指责。
(3) 要揭示的特性按照我精心挑选的顺序依次出场,而且尽可能符合读者的思想历程。当
然,我不可能永远都做到这一点;在那些情况下,会给出一段简要的声明,指出这个问
题。
(4) 只把我认为有助于理解语言的东西介绍给读者,而不是把我知道的一切东西都抖出来,
这并非藏私。我认为信息的重要程度是存在一个合理的层次的。有些情况是 95%的程序员
都永远不必了解的。如强行学习,只会干扰他们的正常思维,从而加深语言在他们面前表
现出来的难度。以 C 语言为例,假如你能记住运算符优先次序表(我从来记不住),那么

就可以写出更 聪明 的代码。但再深入想一层,那也会使代码的读者/维护者感到困扰。
所以忘了那些次序吧,在拿不准的时候加上括号即可。
(5) 每一节都有明确的学习重点,所以教学时间(以及练习的间隔时间)非常短。这样做
不仅能保持读者思想的活跃,也能使问题更容易理解,对自己的学习产生更大的信心。
(6) 提供一个坚实的基础,使读者能充分理解问题,以便更容易转向一些更加困难的课程
和书籍。

4. 联机文档
由 Sun 微系统公司提供的 Java 语言和库(可免费下载)配套提供了电子版的用户帮助手
册,可用 Web 浏览器阅读。此外,由其他厂商开发的几乎所有类似产品都有一套等价的
文档系统。而目前出版的与 Java 有关的几乎所有书籍都重复了这份文档。所以你要么已经
拥有了它,要么需要下载。所以除非特别必要,否则本书不会重复那份文档的内容。因为
一般地说,用 Web 浏览器查找与类有关的资料比在书中查找方便得多(电子版的东西更
新也快)。只有在需要对文档进行补充,以便你能理解一个特定的例子时,本书才会提供
有关类的一些附加说明。

5. 章节