# Bruce 来京东分享技术啦,小傅哥给这个巨佬的新书《On Java》写了份书评!好书!

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

# 一、前言:石头杯子

一个杯子可以被石头装满,也可以被沙子填充,但始终都会留下空隙,只有用水浇灌才能不留缝隙。而这本来自 Bruce Eckel 所编写的《On Java》 就像足够填满杯子的知识,因为书中的内容就像源源不断的泉水,内容又全、又密、又细。这样的优秀编程资料,非常适合初学编程学生和从事编程开发希望把自己以往所学 Java 编程中,那些遗漏的细节,不足之处补全的工程师人员。

为什么本书的编写有如此厚实的根基和让人研发人员喜欢阅读呢,因为这本书的作者也是《Java编程思想》的作者,Bruce Eckel 所编写的书籍以成就从事研发的人员以匠人精神为准,多一些思考、多一些细节、多一些探索。这对一些正在打地基学习编程的人员来说,是非常有好处的,不至于让将来的自己即使可能已经从事5到10年,仍旧是那杯装满了石头的杯子。

所以在小傅哥阅读本书后,感觉像是一种站在巨人的臂膀上,俯瞰这个Java编程的地图、地貌,同时也是一个编程的匠人,来思考整个全局的设计。本书所能带给你的不仅仅是对各项功能API的讲解,也包括了很多设计原则、设计思想以及Java编程中所涉及的众多重点概念的标准定义。接下来小傅哥就分别举例介绍一下这些内容。

# 二、全面:搭建地基

相对于作者 Bruce Eckel 2007年基于 Java 5、6 出版的《Java编程思想》,本书基于 Java 8 的特性进行该语言的编程教学,同时也根据 Java 11、17 等版本的新特性做了关键的更新,并且本书也继承了《Java编程思想》书籍,细腻、清晰、全面的特点,便于读者学习。也正是因为对这些细节内容的把控,所以作者 Bruce Eckel 花费了两年的时间来编写这本新书。

也正是因为这样的,所以更适合正在初学编程的人员进行学习。一般对于一个刚开始接触编程并逐步展开学习的人员来说,会遇到各种各样的问题和错误,但这些问题可能有些过于细碎,又不是太多的逻辑复杂类问题,大多数都是因为不知道所以不会。

所以像本书籍在以编程教学为目的所编写下的资料中,会非常注重此类问题的发生和解决,如本书籍在介绍安装 JDK 时,会分别说明:Mac、Windows 7、Windows 8、Windows 10、以及 Linux 各类版本 Debian、Ubuntu、Redhat、Fedora 运行 Shell 的方式,快捷键的差异,都会标注清楚。这对新人来说是非常友好的。

而本书籍中所包括的章节内容;操作符、控制流、初始化和清理、实现隐藏、复用、接口、内部类、集合、流、异常、代码校验、文件、字符串、反射、泛型、数组、枚举、对象传递、注解、并发编程等内容,每一处知识点的讲解都是在以搭建技术地基为根本,让研发人员对这部分知识的学习,是全面的、夯实的、牢固的。

# 三、广度:斧钺钩叉

知识的学习就像是在学武术,先拳后腿次擒拿,之后开始上刀叉。每一个知识点的掌握,都是积攒一个零件,当不断的积累有了多维度、多类型的各种零件,才能在以后的编程中更加游刃有余的设计和实现出合理的程序。

而这本书就像一本武林秘籍,每一个章节中都不断的向你铺开广茂的技术知识,从一个点扩展到一个面,再形成一个体。

这类知识点的讲解,如我们常用的 new Integer() 在 Java 9 以及更新的版本中已经废弃。因为它的效率远远低于 Integer.valueOf()。因此,你应该避免使用 new Integer()、new Double() 之类的方法。

也包括像我们通常所使用的内部类,在我们编程开发或者阅读 Spring、Mybatis 等框架源码时,也会有所疑问于:“为什么需要内部类来实现某个接口呢?” 而像这类的能用但往往一知半解的技术点,在书中都给了令人信服的答案。书中给出的解释:“每个内部类都可以独立地继承自一个实现。因此,外部类是否已经继承了某个实现,对内部类并没有限制”。

在这个标准的解释下,我们再去思考🤔,如果没有内部类提供的这种事实上能继承多个具体类或抽象类的能力,有些设计或编程问题会非常棘手。所以从某种角度来讲,内部类完善了多重继承问题的解决方案。

那么这些都是内容的学习都来自于这本《On Java》书籍,所以它就像一杯水,可以把你以往对知识学习的空缺补全,以及当下正在学习 Java 编程知识夯实。

# 四、深度:透析原理

其实有一大部分研发人员,搞不懂什么是并发编程,甚至常把并发编程和分布式联系起来。但很多的分布式架构设计,并不是在压榨一台机器的性能做IO密集型运算,所以如;并发、并行、多任务、多进程、多线程、分布式系统等,很多术语在大量的编程资料中被滥用了。

而本书中我终于看到了关于此类内容的较合理的解释,而这个解释来自于在 Brian Goetz 于2016年“From Concurrent to Paralle“ 中首次指出该问题,并给了一个较为合理的区分(我个人认为这个区分很不错,能说明问题):

  • 并发:是指如何正确、高校地控制共享资源;
  • 并行:是指如何利用更多的资源来产生高快速的响应;

如果把这个问题点在细碎深入一些再分析,并发常用于同时处理多个任务,即不必等待一个任务完成就能开始处理其他任务。并发所解决的是阻塞问题,最常见的例子就是I/O,一个任务必须要等待输入才能执行(即被阻塞),类似的场景称为I/O密集型问题。

与之相反的并行,常用于处理同时在多处执行多个任务,所解决的问题即是所谓的计算密集型问题,通过把任务分成多个部分,并在多个处理器上执行,从而提高程序运行的速度。

所以对于这类知识的学习,不只是你对 API 的一个使用问题,而是提高到该如何把一个知识点拉高到对它的上层定义上,只有清楚了这些核心的概念,才能在以后的编程学习路上走的更远,或者是为你的架构师路线铺路过程。

类似这样需要大量技术功底和编程经验的知识点讲解,在本书的下册中有着非常丰富的内容覆盖面。此类内容的学习可以帮你建设技术深度,定义技术标准,避免在公开场合的表述和技术讲解时,一开口就是大白话的尴尬。PS:不是技术讲不出来,而深度积累不够。

# 五、指南:巨佬经验

看到最后的篇章,嘿嘿,我开心的乐了。因为我也如 Bruce Eckel 巨佬一样,在总结这些编程的心得体会,这就像小傅哥通常会在所有文章的前言中,记录一些经验、技巧、成长的例子。所以看到了 Bruce Eckel 的这些总结与我而是碰巧也在编写的内容,似乎碰撞出了火花和找到了共鸣!

就像 Bruce Eckel 第一条编程指南就提到了相关的解释:“如果程序能跑了,为什么评审&优化&重构”?

虽然优雅的设计会在初期花费一定的时间成本,但程序是每天运行的,且在这个过程需要检查、排错、迭代,而一个优雅的设计在这个阶段可以减少运营成本,这也是优化程序的价值所在。所以要克制赶工的冲动,欲速则不达。

小傅哥把关于此书中此类的编程指南和实现建议整理成了 XMIND 思维导图,给有需要的研发伙伴学习参考。PS:详细内容可以阅读《On Java》