《Thinking in Java》读后总结与感想

作为Java界的四大名著之一《Thinking in Java》一直备受推崇,我很早就知道了这本书,当时只是初涉Java,粗略的翻了翻之后觉得看起来这本书讲的比较深就没有再去碰它,后来Java基础学完之后又忙着学Android开发的知识,就一直没把这本书当一回事。重新将它拿起是去年的事,当时朱凯大神向我推荐了这本书,我当时决定把它找出来认真仔细的读一读。对,就是下面这本(用的是百度百科的图):




详细说说书的本身以及作者,作者的写书风格延续了一系列经典的美式计算机技术类书籍的风格,这个风格是什么?用我的话来说可能叫做“坦诚”。书的作者通过写书来获取报酬是理所应当的,但有些人将这一点看得过重,以至于在国内市场上我们甚至能见到通篇都是通过搜索引擎搜索来的资料然后复制粘贴胡乱堆砌出来的垃圾,并且还十分不知廉耻的冠以“高级进阶”之名。而本书的作者,以及所有我们能称之为“经典”的书的作者,能做到只要他们开始写书,就沉浸在书中,就尽可能知无不言,言无不尽,将自己的毕生所学公诸于世。他们会在前言或者章前明确告诉你,你需要什么程度的前置知识,如果你没有这样的知识,建议你通过什么样的方式来补充,除此之外,他们对自己写的书的局限性毫不避讳,他们会书中介绍某一个细分领域的知识而又无法详尽解释清楚时非常坦诚,例如在第21章—并发的开头,作者明确说明,并发是一个编程的全新境界,哪怕你将本章的内容全部融汇贯通,也无法成为一个并发编程的高手,并在章末推荐了专门介绍并发知识的进阶类书籍。但实际上这120页的第21章如果要全部理解透彻,也至少需要两至三周甚至更久,以及需要大量的编程实践,而且哪怕只学过了这一章内容,读者仍然能有对并发知识较为深刻的理解。


我开头说了,这本书光看目录,给我的感觉就是它并不适合初学者,不仅是编程的初学者,甚至可能也不适合Java的初学者(经验非常老道的程序员除外)。整本书接近900页,但是大多数人也许只需要读将近800页左右,因为最后一章图形用户界面是针对PC客户端开发的,无论是对Android开发者还是Web开发者,用处都不大,所以可以跳过。这本书我读了数月之久,中间无数次的拿起又放下,为什么拿起?因为这本书着实精彩,作者试图将每一个知识点都讲的尽可能的清楚,以至于很多时候他综合了各路大神的意见(书中有很多地方都标明本节收到了某位行业同道的帮助),将近乎所有可能出现的编程中遇到的情况都详尽列出并加以解释,甚至是那些及其不常见的细枝末节,这让我感受到作者想穷尽Java的雄心。那又为什么放下?同样是这个原因,这本书的知识密度过高,实际上按照我所读过的绝大多数的技术书籍的知识密度来看,这本书真正的知识含量可能达到1500页(粗略估计),而且作为一本了解Java一切原理的进阶之书,晦涩难懂是肯定的,虽然在字里行间我看出了作者竭尽全力想把很多知识点讲的通俗易懂,但是知识的深度毕竟摆在那里。如果你拥有一个初步的Java基础,那阅读这本书是再合适不过了,它能让你把Java的语法学习到融会贯通的地步,无论你做什么样的用Java编写的项目,都能充分找出和利用最适合的知识点,不仅如此,你还能初步认识到如何在编写程序时考虑效率的问题(如果要深入了解,肯能需要阅读Effective Java这本书),既在实现相同效果的情况下,不同的写法之间有何优劣,并且为何会产生优劣,是因为写法本身带来了更多的计算步骤还是JVM虚拟机在对这些写法的处理上在原理上有何不同,这在本书中都会见到,以及作者经常会在某些语言特性上将Java和诸如C++以及Python这些其它较为主流的语言做为比较,让读者从编程语言设计的本身上去思考Java语法的高明以及拙劣之处,从而使读者初步拥有一个编程语言创造者的思维。

大家都知道,成为一个优秀的软件工程师或者说是开发者,只知道如何编写代码是不够的,而需要对计算机整个知识体系的本身都有一定程度的了解。本书在有限的篇幅里同样做到了,它作为一本Java学习的书,却仍然普及了很多与语言无关的知识,例如对计算机存储器,处理器有一个初步的介绍,当然,都穿插在各章节的字里行间,这对读者来说,在学习如何更有效率的创建变量,以及I/O读写,多线程编程都有一个很好的辅助理解的作用。其次,本书在各章节之间穿插讲解了绝大部分设计模式,在示例代码中,各类主流的设计模式基本都有应用,当然,由于不是一本专门介绍设计模式的书,读者可能会感到对设计模式的讲解深度不够,但至少读者可以对设计模式是什么,以及大致在什么时候应该使用,都能有一个基本的了解。还有就是,本书专门花了两章来讲解Java提供的各个集合类(也就是容器),第11章是讲解如何使用它们,第17章则是讲解它们的原理以及效率问题,在如何选择上给了一个指南,这些部分,让读者对数据结构有了一个基本的认识,我记得我当时在大二刚开始学数据结构这门课程的时候,最开始纠结的最大的问题就是,数据结构究竟是什么,在编程中应该如何使用,而本书这两章给了我们答案,将我们引上了学习数据结构的路。


本书专注于语言本身的思想,正如它的中文译名《Java编程思想》,这是一本专注于编程思想上提升的书,并不是一本照着书上的代码在电脑上敲击,就可以实现某些看似高大上效果的书。因此,本书没有对网络,以及数据库操作的讲解,这也许是一点小遗憾,但是也可能是作者有意为之,让读者专注于他想讲述的知识本身。刚才这句话,我说了本书是什么,如果要再下一个定义,那就是:本书不是一本介绍Java API的书,本书不会像例如国内李刚写的《疯狂Java讲义》一样详细的罗列知识点,例如某一个类,它有哪些方法,哪些内部类,哪些接口......说起来《疯狂Java讲义》的前言似乎还有一段貌似对这类提升思想的书的嘲讽,有兴趣的可以前去一阅。编程是一件理论和实践并行的事,工程师和科学家,这之间的区别就在于,工程师的首要目的,是尽可能利用有限的知识来达到最大化的实际经济产出,而科学家则是更注重理论本身,科学家要做的就是尽可能多的掌握理论,从而突破现有的理论瓶颈,为工程学的发展铺平理论基础。但这不意味着工程师就不需要理论支撑,在实践中没有理论基础,任何尝试都是瞎猫碰上死耗子,并且,写一个程序和写一个高效有用的程序实际上水平可能差了十万八千里,这其中不仅有实践经验,更有理论差距。说了这么多,我想表达的是,我十分不认同李刚的观点,认为只有看完能立刻教人做出东西的书才是好书,也许李刚作为一个培训机构的创办者,这对他来说是天经地义的吧。


最后来说说一点点本书的小遗憾。我认为这本书唯一的遗憾,就是知识没有随着时代而更迭,这本书第四版中文版的出版时间是2007年,因此写书的时间可能会更早,所以本书中介绍的知识是基于Java 5的,而近乎10年后的今天,Java的版本已经迭代到了Java 8。Java这门语言本身已经有了非常大的进化,例如,switch语句在Java 7之后已经可以支持字符串的分支判断,以及出现的新I/O,泛型类的初始化也在调用构造方法时已经不需要再写一遍类型参数(这与反射机制中判断的,类型参数与泛型类的类型无关已经达成了一致),以及Java 8新增的lambda表达式,以及其他新增的API等等。不过这是任何书籍都会遇到的情况,因为技术总在迭代,而书每次写成就会不再变动,除非作者随着时间的推进不停的再版。不过,这作为我所认为的本书的唯一遗憾已经非常幸运了,哪怕是10年后的今天,本书依然屹立在Java技术书的巅峰。成为了一种里程碑式的存在。如果是在10年前看到本书,我也许会觉得它完美无缺(然而那时候我才11岁,都不知道Java是什么)。


总之,如果你是一位使用Java,热爱Java的程序员,《Thinking in Java》绝对是值得读好几遍的经典之书,它所蕴含的价值,远超它单本的售价。就像在书开头中读者评论中有一位来自Scylax公司的读者Jose Suriol所写:“您打破了‘天下没有白吃的午餐’这句谚语。不是那种施舍性质的午餐,而是连美食家都会觉得美味的午餐。他们都会为此感激您。”

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
《Thinking in Java》是一本经典的Java编程入门教材,通过阅读该书可以系统地学习Java编程的基础知识和高级概念。阅读过程中,我结合自己的学习体验和实践,进行了详细的学习笔记。 首先,该书从基础语法开始介绍,包括数据类型、控制语句、数组等。对于初学者来说,这些基础知识是最基本的,通过书中的示例代码和解析,我能够更好地理解这些概念和语法规则。 其次,书中对面向对象编程进行了深入的讲解。通过学习面向对象的思想,我明白了类、对象、继承、多态等概念的含义和使用方法。同时,书中还讲解了接口、内部类、异常处理等较为高级的概念,极大地拓宽了我的Java知识面。 另外,该书还介绍了Java的常见类库和工具,如字符串操作、集合框架、输入输出、线程等。这些内容对于实际开发非常有用,而且书中的示例代码也能帮助我更好地理解和应用这些类库和工具。 此外,该书通过大量的实例和案例,生动地展示了Java编程的实战应用。这些实例涵盖了各种不同的应用场景,从简单的程序到复杂的项目,都有所涉及。通过分析这些实例,我不仅可以学习到实际编程的技巧,还能提高自己的解决问题的能力。 总的来说,读完《Thinking in Java》后,我对Java编程有了更深入的理解和掌握。通过学习笔记的整理,我不仅复习了各个知识点,还加深了对这些概念的理解。希望这份学习笔记能够帮助到其他想要学习Java的同学,让他们能够更快地入门和掌握这门编程语言

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值