文:@yuguo
//08年9月26日更新
终于决定为这本心目中五星的书籍写一篇评论,因为目前的普遍舆论对这本书有一些误读,这些误读可能会误导初学者。我只想尽量客观的提出自己的观点,也许这不太可能,因为我认为这本书是五星的,那么多少我会作者持有偏好。那么请花一些时间阅读本书,也许你也会喜欢上Bruce Eckle。
一.误读
误读1:本书的翻译质量不太好,最好是阅读原版。
Bruce知识渊博,诙谐幽默,原版当然有过人的地方。但是我想说,此书的翻译质量绝对非常不错,我还没有发现可能会引起误读的地方,也没有其它原版书籍译本常出现的语法错误,可以看出译者很用心。不妨做一下恶意的揣测,一些人宣称此书译版不好是以此炫耀自己的见识或者英文能力(我也有很多阅读译版书籍让人痛恨的经历,比如《洛丽塔》《现代操作系统》)。
误读2:本书不适合初学者
我不知道有人认为本书不适合初学者是不是因为本书有将近900页的可能让人沮丧的篇幅。
如果是这样,我想说这种忧虑完全是想当然,Bruce没有对读者已有的知识经验作过多的假设,他在前言里表明读者需要知道基本的程序语句(比如C里面的if和for),并且本书虽然假设读者已经熟悉C语法,还是用了单独一章讲述简单的语法,非常贴心。我读完全书之后的感觉就是他成功地由浅入深地让一个 Java新手明白了Java编程思想。当然,这得是一个用心用时的新手。
或者另一种指控是本书讲述的内容太繁多,事无巨细不适合新手。
我想说这也是想当然。想当然地假设初学者是没有耐心和时间的,就难度和章节设置的合理程度来说,本书完全适合任何肯付出时间的人。
二.面向读者
本书适合那些有简单程序编写经验的人:你已经知道程序是一些语句的集合,知道子程序/函数/宏的概念,知道像if这样的控制语句和像while这样的循环语句,等等。那么你就能顺利阅读本书。
本书篇幅教长,较一般的程序书籍深入了不少,不适合想在一个星期“速成”的人阅读。
三.阅读指南
1.多花时间阅读本书,根据本人经验,一个了解C++的读者每天阅读2小时,应该可以在2个月内读完本书。
2.下载完整的中文JDK文档到本地计算机中,并在浏览器的书签栏添加几个常用组件的链接方便随时查找。
3.顺序阅读本书,后面的例子可能会用到前面定义的包、类,或者设计模式。
4.第一遍阅读的时候,可能会有不明白的地方,在书页两侧的留白处标记上“??”以便下次看的时候明白。相信我,你会需要看很多遍,并且每次都会有“Aha”的感觉。
5.如果你觉得第1章晦涩难懂,跳过它。阅读到泛型的时候再回头看看。
四.后续学习
强烈建议sun官方的学习文档:http://java.sun.com/doc/books/tutorial
五.本书的缺憾
1.命名太合乎规范,而且用的是标准的“驼峰命名法”,有几次我跳跃式阅读的时候,发现奇怪的方法还试图查阅JDK文档,结果竟然是他自己命名的方法……
2. 图形化界面这一章,没有出现任何图片,很难让人直观地理解Swing,不过作者也说了“如果读者觉得自己必须掌握它的复杂细节,我推荐读者参考专门的 Swing书作为起点”。我推荐sun官方的uiswing教程(http://java.sun.com/docs/books/tutorial/uiswing)。
3.Bruce喜欢创建一些小程序放在net.mindview包里面,比如生成器。有时候这些程序很实用,但是有时候花费大量篇幅做一个生成器显得不太有性价比,甚至有可能造成读者的懒惰和理解上的误区(例如图形界面那一章的在一个新建的线程里面放置组件的方法,就容易让读者忽略他们已经新建了一个线程)。
At compile-time, this is enforced only by your own self-imposed
rules, but at run-time the cast ensures it (P410)
在编译期间,我们肯定的依据是我们自己的规则;而在编译期间,却是通过造型来肯定这一点。(P335)
run-time ,这翻译没问题?
为了你的这篇文章,专门注册了来说一下:翻译不是不好,是和其他人都不一样。会导致很多人看不懂。当然第一本书就是这个的就没问题了。
比如第10页写:以及涉及造型、升迁以及优先次序的问题。
真心不懂什么叫:造型,什么叫升迁。
他用的语言完全是自己思考出来的,不顾及业界已有的惯例说法。当然可能是因为他很牛,不愿意使用别人用过的词。
七年前的书评啊,太经典了,新学java,看了第一章就深深爱上了,有python,ruby等动态语言经验,冲着java的强制异常处理和单元测试而来,不过现在看来完全可以期望更多的惊喜~
我就稍举两个例子证明翻译的是不是有问题,说翻译有问题的人是不是在炫耀自己的英文水平。
Java编程思想第四版中文版228页"addFirst()与add()和addLast()相同,它们都将某个元素插入到列表的尾部“,英文版441页"addFirst() inserts an element at the beginning of of the list. offer() is the same as add() and addLast(). They all add an element to the tail of a list"。
随后下一段,中文版"它重复地执行ListFeatures.java中所示的行为“,英文版“It doesn't repeat the behavior that was shown in ListFeatures.java"。
今年3月份刚上班那会儿,经同事介绍买了这本书 ,不过一直没有去看,现在项目忙完了 感觉没啥事 所以就想阅读一下 但是又不知道从哪里开始看起 不管怎样还是觉得这本书高上大 应该能学到不少东西 我去看书咯
一次在MySQL课上,老师看见我在看thinking in java,然后就对我说就对我说,这本书出名是出在第一版和第二版上,到了第四版内容明显偏难,而且到了本书的后半部分作者甚至有点走火入魔,但偏向对象的部分确实是不错的,他还说这本书他看了两遍,不推荐我看。
蛮不错的 我觉得外国的书 讲的都比较好懂 当初学c++ 花了10来天看国内教材 后来就看c++primer 不觉得难 关键是这个过程不要被还剩那么多页的心里吓倒 要积极地 我学会了什么的心态 估计就好些了 现在在看java编程思想第四版的GUI这个章节 谢谢楼主建议
我干打赌这本书的翻译有问题,,有个地方把“但是”翻译成“尽管”,句子完全读不通。而把632页(英文版页码,对应中文版513页17.11)的“Note that min( ) and max( ) work with Collection objects, not with Lists,“这句翻译成”注意,min()方法和max()方法只能作用于Collection对象,而不能作用于List“,根本就是错的。这还不叫错叫什么?
额。。之前也看到很多说译版翻译不好所以硬着头皮看原版,结果速度奇慢。不过坚持看完必定有所提高,这是一本好书,我光是读完了introduction就觉得作者语言很诙谐,我很喜欢。
我这本书买了也快2年了,最开始没有静下心来看,只是草草的看了看自己需要了解的地方。现在重新看的时候,看到了好多令自己惊讶叫好的地方,例如对继承和多态的分析,确实非常的到位。
这篇写于4年前的文章今天读起来依旧很棒,也不知道作者现在怎么样了,很有见地,应该很棒了吧。至于这本书是不适合初学者,我觉得这种评论是无所谓的。因为就算是初学者水平也不一样。我的建议是:如果想学就买,看不懂搁着,等水平高了再看。。。。不过话说回来这本书真是不错,思想这种东西本身就是只可意会不可言传的东西,比较难写,而且作者见多识广,综合各路人的看法,见解很成熟。
@Yuguo js的确是有提供面向对象机制,不过js的面向对象是基于原型的,而常见的cpp 和 java之类的是基于模板的。而且现在js简直全能了= =
翻译在某些地方确实有点恼火。比如,全书本来应该翻译成“继承”或者“子类”最为合适的地方,全部翻译成“导出”;这要遇到一个初学者,他不发疯才怪。实在搞不懂,它要“导出”什么? 呵呵。
一.误读
误读1:本书的翻译质量不太好,最好是阅读原版。
Bruce知识渊博,诙谐幽默,原版当然有过人的地方。但是我想说,此书的翻译质量绝对非常不错,我还没有发现可能会引起误读的地方,也没有其它原版书籍译本常出现的语法错误,可以看出译者很用心。不妨做一下恶意的揣测,一些人宣称此书译版不好是以此炫耀自己的见识或者英文能力(我也有很多阅读译版书籍让人痛恨的经历,比如《洛丽塔》《现代操作系统》)。
============================
我想说的是,这书有些地方的翻译还是很影响阅读的(也许你所处的水平阶段不影响你的理解)。。。
当然,英文水平不好的人,此书也只能是最好的选择了。
09年1月22日买的此书,到现在(2010.3.14)还没看完!
是本很好的书。要用心看,否则,跟没看一样。每看一遍都会有不同的体会吧!绝对的经典才具有的魅力!
@menie JS语言特性并没有提供面向对象的机制,我觉得还是从C++或者Java这种面向对象的入手,然后学习JS,能写出更好的代码。
而且,程序员学JS,难道是想做前端?
这书其实很适合初学者,我就是读这个了解JAVA的,最初是读的第三版,读了两遍,几乎所有程序都有自己实践,现在买了第四版,决定,好好再继续的研究!
读这书需要的绝对是耐心和毅力。