Java人生规划:一份简单的学习路线指导
备注:本文更新日期为2020年7月31日
前言
本文仅限于徒弟使用,其目的是对Java整个生态和相关技术进行多维度的介绍。因为我个人对“3”这个数字有特殊的研究和认识,所以本文的论述将会处处贯穿“3”这个量化思想,例如划分了三个成长步骤,推荐了三本书,推荐了三篇技术论文,推荐了三本个人专著,介绍了三种学习态度,强调了三种数据结构等等。
正文
对于Java开发者的成长之路,我划分为三个步骤:
第一步:编码手法的学习和养成;
第二步:数据存储知识的学习;
第三步:网络知识的学习。
看似三大步骤,实则是三大格局,选择比努力更重要,格局比加班更重要,下面我将逐个介绍一下。
第一步:编码手法的学习和养成。
在学习编码手法的过程中,我推荐《Java编程思想》。在本文内容里,我将推荐三本书,这是第一本。不过很多人给我反馈,“《Java编程思想》看完了,但是还是糊里糊涂的,感觉这本书的难度挺大的”。甚至部分人,对《Java编程思想》意见很大,觉得是本烂书,空有其名。其实,我个人觉得,并不是这本书难,而是Java基础知识本身是有一定的难度和门槛的。之前我们很多人觉得Java简单,实际上,Java基础知识并不简单,反而包罗万象,内涵丰富,有很大的学习难度。另外,关于《Java编程思想》这本书,我推荐三个部分的内容:异常部分,泛型部分,内部类部分。我知道不一定人人能看懂,参透其书的内涵,所以我对《Java编程思想》进行了补充和升华,但仅限徒弟们学习使用。
《Java编程思想》的作者能跟JDK的人坐到一块儿进行技术沟通,放在国内,有谁能做到这点呢?所以,《Java编程思想》的权威性非常高。虽然《Java编程思想》不是完美的,但是有些地方的确做到了“前无古人,后无来者”。
另外,我不推荐《Effective Java》,田忌赛马的教训告诉我们---做事的顺序很重要。先好好学习《Java编程思想》形成系统化知识体系之后,再去阅读《Effective Java》,这样的效果才好。《Effective Java》侧重于招式,而《Java编程思想》侧重于内功。另外,《Effective Java》有点零散,没有形成系统化知识体系,往往学到的知识都是一盘散沙。
第二步:数据存储知识的学习。
计算机分为两大功能:计算和存储,所以说数据存储领域的知识非常重要,其上承数据结构下接Paxos算法。对于数据存储领域的认识,是要把数据结构归入的,空谈数据结构往往并不能有好的学习效果,而将其落地到存储领域,结合实践生活,这样才能事半功倍,举一反三。关于数据结构的学习,我个人感觉需要掌握三大数据结构即可:数组,队列,树。这三大数据结构变化莫测,我个人总结的“内部联系”如下所示:
(1)数组->哈希->布隆过滤器
(2)队列->并发连接数->事务的嵌套
(3)树->索引->红黑树->B+树->链表
关于以上三种数据结构的学习,推荐我写的专著《站长谈数据结构》。通观全文,与上类似,我也会推荐三本自己写的专著。关于“内部联系”的体会和感知,这是一个悟性问题,与人的经验有关,说白了是与人的神经元相关的,之前有过介绍,可以移步这里:http://www.mybatis.cn/archives/976.html
回到数据存储知识,我推荐读的书是《数据库系统设计》,这是我推荐的第二本书,此书是斯坦福大学的教程,不得不说斯坦福大学的课程的确非常厉害。
补充:如果数据结构学的不好,推荐读一下《算法神探》,这是一本小说,谷歌技术专家编写的。这么厉害的大牛,为什么写这么“低俗”的故事?可以想一想这个问题。我个人感觉,一个数据结构大牛的养成,可不是看几本书死记住几个知识点,而是在生活中处处思考数据结构。读这本书,学的是思维方式和人生态度,如果抱着学习知识点的心思看这本书,那就别看了。
第三步:网络知识的学习。
在这里推荐《TCP/IP详解 卷1:协议》,这是我推荐的第三本书,到此三本书已经推荐完毕。这三本书,都属于巨著,一下子看完,根本不现实,最起码匆匆忙忙的翻上一遍,也比没有看过强得多。正如人参果一样,鼻子嗅一嗅能活三百六,把这三本书走马观花的看一遍,也能超越绝大多数人。再细心研读其中的重点章节,真是得道升仙之境界。
画龙点睛
走完这三步,内功已经十分了得了,但是画龙还需点睛,点睛即是为了培养架构思想,在这里推荐三篇技术论文:
(1)《Paxos Made Simple》
(2)Raft论文
(3)一致性哈希论文
所谓架构设计,无非就是第二步的升华,从单机数据存储升华到分布式数据存储。
学习方法介绍
(1)动态发展的眼光看问题。
(2)系统化学习。
(3)非线性思维方式。要想体会非线性思维方式,这里推荐我写的《趣谈shell》,这是我推荐的第二本自己写的专注。
结束语
纵观全文,我只字并未提到Spring以及Spring生态,因为我明白,即便我不提它,周围的环境也会无时不刻的提醒你要学习spring,而我希望说一些别人看不到的地方,所以我刻意忽略了Spring。Spring这个东西,应用十分广泛,甚至到了“无spring不Java”,可以把它当做Java的第三方框架(街坊邻居),也可以把它当做是Java本尊的开枝散叶(儿孙辈),但不同的认识会导致不同的境界,可以参考我的第三本专著《Spring 杂谈》。