三读《Java编程思想》
又一次,或者准确地说,第三次读完了《Java编程思想》,合上书,我陷入沉思之中,这本书为什么值得我一而再,再而三地去读它呢?而且,似乎每遍重读,似乎总有些新的收获。我尽我所能来阐述其原因,希望在本文结束之时,我们共同拥有一个满意的答案。
为什么此书值得读?
为什么是这本书,而不是其他书呢?先卖个关子,中学的时候有一个奇怪的现象,有的老师,再听他讲课的时候,没觉得难,但是,听完之后,却发现已经把一个很难的问题在不知不觉之中搞明白了。现在想想,这其实就是大师的能力,他可以化繁为简,把复杂的问题用简单的语言解释清楚。而此书的作者Bruce Eckel就是当之无愧的大师,他拥有丰富的Java教学经验,又对Java有独到的见解,而且对Java的很多设计提出了问题和建议。此书独特的地方可以归结为以下几个方面:
- 每次一小步。每次只介绍一个知识点,在确保读者能够掌握之后,再介绍新的知识点。如此,读者理解起来更加容易,也更有成就感,同时也不会因为众多纠缠不清的知识点而迷惑,这就是此书中文版厚达880页的原因。
- 每个知识点都有对应的可编译执行的代码例子。读者可以自己运行,加深理解。当有疑问时,也可以通过修改代码,自我验证,在不知不觉中得到提高。
- 采用测试框架展示程序输出。有以下优点:
- 培养读者对测试的重视,在实际工作中,很多初学者容易忽视测试的重要性。
- 培养读者去写出可测试的代码,比如紧密耦合等,都会导致程序很难测试。
- 培养读者如何写测试框架,这对工作中写单元测试和其他测试都很有帮助。
- 要修改程序时,比如重构,可以通过测试框架来确保程序的正确性。
- 示例中运用众多设计模式。关于设计模式的重要性,相信大家都知道,只是面向对象设计的基本功,结合实际的例子来学习,可以说是一举两得。
- 有些功能,有很深入的探讨。比如泛型,通过与C++的对比,介绍了设计思路和优缺点。
为什么值得读3遍?
先介绍以下我读此书的经历:
- 2010年初,购入此书第四版中文版。此前,在Stackoverflow,见多人推荐此书。
- 半年时间,读第一遍,当然很多问题浅尝辄止,没有搞明白,总算是翻完了以便。最大的感受是,原来Java还有这么多我不知道的功能。
- 2011年,工作之后,发现真正写代码的时候,很多都是一知半解。比如,容器和泛型应该怎么用,并发该怎么写,异常该如何处理,IO的框架是怎么回事。不过,总算知道这些东西的存在。又花了半年的时间,第二遍。这次,带着问题有目的性地把相应的章节仔细地重读了一遍。工作中的问题得到顺利解决了,但是好奇心没有得到充分的满足,很多东西不知道为什么要这么用。
- 2012年初,购入此书第四版英文版。因为我认为翻译不可能没有信息损失,这些损失很可能使我不能正确理解作者要表达的意思。
- 开始阅读第三遍,花了1年左右。这次可是说是咬文嚼字,很多不认识的单词还查了词典。读完第一章对象导论,我就大有收获。之前竟然没有发现这章如此之好,从哲学的对象到编程中的对象,对面向对象做了全面而准确的解释,读完之后,豁然开朗。之后,更是惊喜不断,尤其是异常那一章,对检查型异常的优缺点做了详细的论述,并提出了解决方案来克服检查型异常的缺点,让了理解了为什么这个功能只在Java中存在(在Python, C#中都没有检查型异常)
学习的过程
在Java Performance的开头,作者认为,要想成功地调优Java性能,你需要经历三个阶段:
- 我不知道我要知道什么。也就是说,在解决一个问题是,你不知道你需要知道什么知识和方法才能解决问题。
- 我知道我要知道什么。你知道你要了解哪些重要的东西才能解决问题,但是你还没有研究过那些重要内容的细节。
- 我已经知道了我需要知道的。简而言之,你了解并理解了所有的细节。
我认为,还要加上一个阶段:
- 我质疑并改进我已经知道的。对于我所掌握的知识和细节,我会持怀疑的态度问自己,为什么要怎么做才能解决问题?怎么做有什么优缺点?有没有其他的方法,更好的方法?
你会发现,我读《Java编程思想》的经历完整得重现这四个阶段:
- 未读之前,我不知道要知道什么才能用好Java。
- 一遍之后,我知道我要理解面向对象,异常,并发,泛型,IO等才能用好Java。
- 两遍之后,我理解了所有的技术细节。
- 三遍时,我开始评价并反思所有的技术细节,以及它们从何而来,为什么成为现在这样,以后又会去向何方。
结论
相信读者读到这里,应该已经能够理解我为什么读三遍《Java编程思想》。如果您读完此文,决定读一下《Java编程思想》;如果您读完此文,决定好书以后要读三遍,我知足矣。
发表评论 取消回复