为什么阅读源码
一切都是从模仿开始的
每个人都不是天生会写代码的。
为了写出好的代码,我们应该学会阅读代码、
源码中我们能学到什么
看完一本《百年孤独》,并不会让我们写出类似的代码。
同理看完经典的代码,我们的收益也没有想象中的那么高。
那,我们能获得什么呢?
(1)经典的套路,设计模式,设计思想等。
(2)变量的命名,优秀的 api 设计。
还有一些有趣的东西:
(1)如何设计项目的 roadmap
(2)团队协作
当然这些东西,在代码中可能是无法直接体现的。这些是动态的过程。
源码怎么选择
自己的代码
阅读自己写的代码,想着如何改进。
把自己当做批评家,提出更加严厉的需求。
同事的代码
经常做 code review,让自己参与到对于同事的代码评审中去。
思考如果是自己会怎么做?
能做的更好吗?
经典的代码
之所以把经典放在最后,是考虑到我们的持久力和动力。
前两者相对容易做到。
一开始就看经典代码,几万行,估计看着看着就晕了。
如何阅读
少而精
确切的说,个人认为 spring 的源码并不算多好,知道思想即可。
netty 的接口设计,redis 的源码,就可以读一读。
因为源码如果是一个人写,就比较不容易乱,经典的作品是值得一读的。
最好读的代码源码行数不超过 5w 行。
循序渐进
准备知识一定要准备充足。
比如 netty,说白了多路复用+线程并发。如果不知道,看了也是白看。
Redis 也是同样的道理。
所以可以先看使用文档,然后看思想,最后理解源码。
可调试
最好的阅读,是让代码运行起来。
可以自己加一些日志,便于跟踪和验证我们的理解。
学以致用
看完了源码之后,要学会学以致用。
个人觉得,理解代码最好的方式,就是按照自己的理解,实现相同的功能,自己去写一份代码。
比如,你可以写一个 mq 中间件。
看一些经典的设计如 kafka,rocketmq 有哪些特性,然后自己实现这些特性。
遇到了哪些问题?自己怎么解决的。经典框架怎么解决的?
直接看代码得到答案,反而失去了这个有趣的思考过程。