关于看源码的心得体会
前言
前段时间面试,经常遇到面试官在结束的时候问我看过什么开源源码?然后网上对于看源码这块的说法也有各种不同的意见,我进行了总结如下:
不看源码说法:
- 平常的工作需求、业务忙的一批,哪有时间空下来看源码
- 看源码只是为了面试,也就是应付那句话:面试造火箭、入职拧螺丝
- 浪费时间,又不是做框架组件研发的大牛,没必要,把公司产品+业务完善就好了
- 看不下去,好不容易看到了自己能了解的,结果再往里深入就出不来了
- 吃青春饭的职业,迟早要转行,没必要一条路走到黑,有多的时间不如研究其他的行业
看源码说法:
- 丰富自己的经验、扩宽思维,避免写烂代码
- 项目中和框架打交道比较多,熟悉源码能快速定位问题
- 设计更加复杂的系统的时候,能更加深入到底层去分析问题,从而减少事故
- 本身就很爱好这个行业,对代码有很高的追求
- 程序员到了一定的年限,要有自己的知识储备
自己的经历
笔者从事了5年的Java开发,当初从事Java那1-3年基本都是想着如何把需求实现,最简单的无非是一堆crud+各种if,在2年后会结合思考如何优化代码,比如看一些规范文档+设计模式并运用到项目上;那时候对源码还是没有概念,比如遇到报错问题直接百度解决(不可否认最笨但是是效率最快的)。随着年限的增长、经历跳槽、行业变动、新技术不断出新等等,慢慢的意识到自己的一个职业规划发展,比如瓶颈期如何突破、如何改变一直写crud、技术的广度深度如何抉择..... 在第三年的时候开始改变了原有的观念(不再做一些重复的劳动),也可能是受到周边同事的影响,一些做了比较久的开发,写的代码明显和自己的有区别,比如人家会抽象出接口、抽象类,各种分包、解耦等等;再比如应用一些组件,只需要一个注解就能搞定我们原来重复的工作,所以怀着这些因素不断去摸索,也慢慢的去了解了一些底层的原理和实现机制,在以后的开发过程中,也会更多地时间去思考和学习以及总结。
我看过的源码
我自己也尝试看过Spring、JDK集合、Dubbo、Mybatis框架的源码,但是都不是很深入那种,可能只是说某几个感兴趣的模块会去深入看看,不会细节到某方法的某个属性;之所以看源码也是因为自己平时工作中或多或少都接触到这些框架,然后也会去思考一些问题:比如我用了Spring为什么配置一个注解就能做到自动注入?Dubbo是如何做到一个注解就能把我的服务暴露到zk? Mybatis写一个Mapper接口就能执行Sql语句原理?也许会有人问,你看这些有什么作用,你的工作又用不到,这个我会在下面再去描述。
我是如何看源码
和大多数人一样,去github上下载源码到本地,打开idea导入后,大概看下有哪些包哪些模块,写一下每个模块的作用,结合网上的架构图+时序图找到自己想看的那块,再搭配文档(一般都是英文,本人英文比较差,所以都是看国人翻译的,虽然可能不是很全或者全对,但是这不是主要的,主要的是思想和流程是对的)进行debug,debug的时候肯定会遇到一些不太清楚为什么要这么做的点,这时候通过xmind记录,然后后期可以找这种源码社区去提问(如果你身边有牛逼的人也可以)
看了这些源码有哪些感想
- 摸清了本质,不再局限于表面,举个例子,ArrayList add一个元素,但是add之后里面做了什么操作?存储到哪里了?size满了之后怎么办?有线程安全和并发问题吗?然后自己在使用这些集合的时候会更加注意细节,不再是为了new一个ArrayList而去new
- 源码的作者一般对注释比较重视,我记得看过一个类,注释比代码还多,反而参照下我自己经历过的这段工作经历,注释基本可以说很随意。
- 源码的作者在设计的时候考虑到很多场景,所以站在巨人的肩膀上再去思考的话会有新的体会
看完源码我自己做了什么事情
- 参考源码作者的一些思想,自己沉淀出一些组件和工具,并根据不同的业务场景封装后提供给组内其他开发使用,解决一些重复的工作
- 某些框架的特性不符合我们项目需求,进行了二开,能快速响应我们项目需求
推荐看什么源码
最近的一段时间,我个人比较喜欢看一些偏向业务的框架源码,而非纯技术上的源码。因为经历了这几年工作会发现国内的公司都更加偏向业务型公司,这个也正常,因为公司没有业务就不能正常发展;所以我在对业务这块的一些场景下的解决方案会有一定的学习,比如数据批量处理如何快速高效、分布式事务如何实现等等,所以我个人是推荐多看一些业务上的解决方案和相关源码
看源码误区
- 不要为了看源码而看源码,而不做知识输出,最好能自己手动实现一个方案或者有自己的思想
- 能运用到项目上最好,否则一切都是自娱自乐,没有实际意义,给人就是纸上谈兵,夸夸其谈
- 大部分公司都是结果导向,不要为了看源码而耽误了项目进度,否则一切都没意义
最后
看源码是一个非常辛苦而且费时间脑力的过程,必须要不断坚持才能有很好的效果。本人这篇博客只是代表自己的观点,并不全对,大家看完参考下就可以。
作者:DDZ_YYDS 出处:https://www.cnblogs.com/zdd-java/ 本文版权归作者和博客园共有,欢迎转载!但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!