跟你们聊聊咱们为何要学习源码?学习源码对咱们有用吗?(源码感悟)

1 前言

因为如今微服务很流行,愈来愈多企业采用了SpringCloud微服务架构,而SpringBoot则是快速构建微服务项目的利器。因而源码笔记以此为切入点,将SpringBoot做为咱们源码分析的第一个开源项目,以后还会对更多开源项目进行源码分析。要进行源码分析,笔者结合自身经从来跟你们聊聊咱们为何要学习源码这个话题,你们一块儿探讨学习。程序员

咱们程序员在开发代码时天天都在使用别人写好的框架,不管你是在使用Spring生态的Spring核心,SpringMVC,SpringBoot和SpringCloud等框架,仍是在使用阿里系的Dubbo,RocketMQ,Seata,Druid等中间件框架,亦或你是搞大数据的,在使用Apache组织的Zookeeper,Hadoop,Hive,Spark等大数据组件框架,这些开源框架都给咱们的项目编码带来了极大的方便,促进了咱们的开发效率。是的,这些都是开源大神们帮咱们造好的轮子,咱们直接使用便可,并且用起来不多出bug,由于这些框架通常都是通过考验的才能流行起来。面试

可能大部分人会认为,这些轮子都已经造好了,咱们直接用便可。是的,这些开源框架对咱们使用来讲是透明的,它们就像一个个黑盒子。至于这些黑盒里面装的是什么东西,里面是怎样构造的,若是没有去探究这些黑盒的话,咱们无从得知。可是,咱们作开发的每天跟这些黑盒打交道,难道你就没有一种强烈的欲望想知道这些黑盒里面装的是什么东西,黑盒里面是怎样构造的么?难道你就不想知道咱们每天使用的黑盒子里面的原理么?编程

那么今天就跟小伙伴们聊聊“咱们为何要学习开源框架源码?学习开源框架源码对咱们有用吗?”这个话题。设计模式

2 咱们为何要学习源码?花那么多时间去学习源码值得么?

可能有些同窗会问:咱们为何要去学习源码?花那么多时间去学习源码值得么?架构

对于这个问题,应该不少小伙伴在没读源码前深有感触。当时应该就是这种观念,反正开源框架一些外面的大牛帮咱们封装好了,本身开箱即用便可,管它里面黑盒机制是啥。应该不少小伙伴也是这种观念,致使本身在开发项目时若遇到bug时束手无策,百度了不少解决方案都无效,故而浪费了不少时间。因而才会决心钻研一些经常使用框架的源码。可见,不必学习源码的观念是多是最错误的观念吧,我的观点(仅供参考)。负载均衡

咱们学习源码无非有如下几个缘由:框架

1)开发项目需求须要微服务

一方面,一般咱们在开发项目的时候,遇到Bug是再正常不过的事情。好比某个工做项目采用了Spring生态系列的框架好比SpringBoot,SpringCloud等,当出现问题时本身要会解决,若是咱们不懂框架里面的黑盒机制,当出现问题咱们确定会一头雾水,不知如何着手解决开源框架出现的问题,此时咱们确定会去百度,但百度的文章质量良莠不齐,最坏的结果可能就是咱们根据百度的解决方案,一个一个去试了,但仍然没有解决问题。这就是对框架黑盒机制不熟悉的缘由致使的。oop

另外一方面,咱们在开发项目的时候,有时候开源框架不能彻底符合咱们的业务需求,此时咱们须要对开源框架进行扩展甚至是改造,好比咱们正在使用dubbo框架,若dubbo自带负载均衡策略不能知足咱们的业务需求,此时咱们是否是得要对dubbo的负载均衡策略进行替换或扩展。幸亏,dubbo提供了SPI接口给咱们即插即用,此时咱们不用研究dubbo里面的黑盒也能够作到替换现有的负载均衡策略。那假若有一天,咱们要对某个开源项目进行改造呢?此时是否是也须要咱们知道开源框架的黑盒机制,若不懂框架黑盒原理,此时咱们是没法下手的。源码分析

因为项目开发须要的以上缘由,因此咱们平时有空时就要多学习源码,多探究里面的黑盒机制,磨刀不误砍柴工

这个就是典型的项目开发需求驱动咱们不得不去研究开源框架的源码机制的缘由吧。

2)对技术饱含热爱,不断深刻学习黑盒机制

是的,除了项目需求开发须要去研究源码外,应该不少小伙伴都是出于对技术的追求去研究开源框架源码。他们为了避免断提升本身的编码能力,去不断学习外面大牛们的优秀做品。是的,你们都知道,闭门造车能够说是造不出名车的,此时,咱们必须去学习大牛们优秀的开源做品,学习他们是怎么面向对象编程的,学习他们是如何熟练运用设计模式的,学习他们是怎样设计接口的等等,真的有太多须要咱们学习了。若是咱们走的是技术路线,对技术还有更高的追求,学习源码能够说是咱们绕不过去的路。所以,行动起来吧,源码搞起来,咱们只有不断学习源码,之后再阅读其余项目的源码时才会游刃有余。

3)有些人学习源码,多是为了面试

固然,有些人学习源码,多是为了面试。由于如今不少面试若面试官稍微问难一点的问题都会涉及源码,每每不少人就是对源码不熟悉而挂掉。由于一部分小伙伴每每就是为了面试才去学习源码,可是每每这种为了面试才去学习源码的方式效果没有前面的项目驱动方式和技术追求方式的效果那么好(我的观点,不喜勿喷)。由于,有些同窗为了面试,一般都是短时间突击源码,为了某个面试问题而背诵一些答案,由于死记硬背的居多,因此这种方式每每深刻不了源码的精髓。固然,无论出于什么目的学习源码都理应鼓励,由于毕竟去学习源码了确定就会有提升,就踏出了不同凡响的一步。

3 学习源码,咱们能获得什么?

是的,既然咱们花费了那么多时间去学习源码,去研究源码?咱们的收益有多少,咱们究竟能获得多少回到回报呢?能够先确定的回答,固然有很大的回报。前面也说过,学习开源框架源码能帮助咱们解决项目遇到的bug,扩展咱们的项目需求;经过学习源码,学习开源大牛们是如何运用设计模式的,而后运用到咱们开发的项目中,使咱们的项目的模块更易于扩展;经过学习源码,咱们能编码更高效。为何呢?若是咱们对某个开源项目源码很熟悉,那么咱们就能够对这个项目的源码信手拈来应用到本身项目中,不是么?总之学习源码好处多多,这也是成为大牛们的必经之路吧,只有学习和借鉴别人优秀的做品,本身才能造出更优秀的做品。说到这点,不得不说下RocketMQ,RocketMQ是阿里的一款优秀的开源中间件,RocketMQ之因此性能高吞吐,抗得住阿里双十一的考验,其正是不少方面借鉴了Kafka的设计;此外,记得Dubbo的一个缓冲类也是借鉴了Netty的ByteBuf类。

是吧,要造出一些优秀的做品,必须去学习借鉴别人的优秀做品。

4 要想不被淘汰,必须学习源码

最后要说的是,要想不被淘汰,咱们必须学习源码。

如今程序员愈来愈多,能够说竞争尤为激烈。若是咱们想不被淘汰,则咱们时刻要保持竞争力,那么必然要时刻学习,终生学习,生而有涯而学无涯。由于CRUD你们都会,要提升本身的技术能力,此时学习开源项目的源码就尤其关键了。若是咱们不想成为CRUD工程师,还有更高的技术追求,那么咱们就要有更高的要求。固然,学习开源项目源码的目的是借鉴大牛们的优秀做品,最终要学以至用。另外,我的观点:学习源码是提升本身编码能力的最好方式

若是咱们走的是技术路线而非管理路线,若还有更高的技术追求,那么学习源码是咱们绕不过去的砍。 真的,学习源码实在是过重要了。

只要咱们还有更高的技术追求,或许你想成为技术大牛,可是学习源码是成为大牛的必经之路。不是每一个人都能成为大牛,但不学源码就确定成为不了大牛,由于学习源码是提升本身的最好方式,不论什么时候,学习源码都不会晚,共勉!

Are u ready?

若以为不错,帮忙点个赞呗。

-------------------------我是分隔线----------------------------

你们好,我是爱编码的码农,能够说是一枚源码爱好者。上周开始写源码分析文章,跟你们一块儿分享本身的学习心得体会,欢迎关注我,一块儿学习交流。

有兴趣的小伙伴们能够关注下SpringBoot源码分析这个初始大纲,一块儿从零开始学习源码,一块儿加油,共勉!