据说这是程序员解决问题最省力的途径,学习一下[吐舌]
最近也在学习源码,感觉作者说的很有道理~
小郑搞码事
IT企业Web开发工程师 优质科技领域创作者
如何阅读源代码?读源码确实是大多数程序员进阶的重要途径,使自己变成技术强的最快路径。道理都懂,但大家阅读源码的方法不一定高效,我今天结合自身经验和一些公认有效的方法,从为什么要阅读源码到如何阅读源码两个方面来谈谈看法,分享点经验。如果大家觉得对自己有用,写的可能会有点长,建议收藏。

一、为什么要阅读源码?第一,好奇心我阅读源码的动机主要是好奇心,比如,我很好奇babel究竟是如何转化JS的,vue-loader内部究竟做了什么,再深入点,webpack的架构是什么,webpack和rollup打包原理是不是一样的,有什么不同。阅读别人的文章终究不深刻,另外咱也不知道他说的对不对,虽然一套套的,但很有可能别人的文章已经过时了。第二,涨知识阅读源码一个很重要的好处是可以拓宽技术视野,即知识的广度和深度,有意思的是,阅读源码可以兼得广度和深度。阅读源码相当于在学习原理了,这就是深度,广度指的是阅读过程中遇到的其他知识点,比如gensync,广度的根本原因是很多框架都是站在巨人的肩膀上的。拓宽技术视野之后,工作中遇到类似的问题,你会有更多的思路和想法。二、如何阅读源码?第一,重视文档你阅读源码的框架,如果有介绍使用文档,一定要看一遍,一般文档中也有对其核心功能,核心API的详细说明,在读源码的时候可以重点看一下这些对外的接口是怎么实现的。

第二,基础知识有些源码的阅读可能需要一点门槛,比如@babel/core中广泛用的generator和gensync,对这些前置知识不熟悉的话需要补齐,才能阅读更顺利。第三,阅读过程,抓住主流程分支可能比想象中的要多,如果一开始就把精力放在每一个分支上,估计很快就放弃了。当你对主流程掌握后,然后再阅读感兴趣的细节部分,应该是一个更好的选择。第四,多思考,多对比多问自己几个为什么,想一下为什么这样实现,有什么好处,为什么不那样实现,是不是有更好的实现方式。还可以对比一下与它类似的框架有什么不同。如果存在不同,那它们各自的优势是什么,解决什么问题。方法上,可以自己把项目克隆下来,跑一下,写几个demo,使用console调试一些重要信息,甚至可以把主流程画出来理解都是有效方案。第五,求源求新所谓求源就是看它第一次提交(commit)是怎样的,它最开始是为了解决什么问题而出现的。所谓求新就是看它最新的版本是怎样的,架构有什么改动,加入了什么新的特性。

第六,写感悟对某个框架有自己的感悟时,可以尝试写一篇文章,自己会和写出来是不一样的。在写的过程中,极有可能发现自己对某些知识掌握得并不深刻,你需要说服自己,然后才能说服别人。快速总结一下,读源码,读什么?一,读目的:该框架构是为了解决什么问题?类似框架对比优劣是什么?二,读注释:优秀的开源项目,通常某个类,某个函数的目的,核心逻辑,核心参数解释,异常的发生场景等都会写到注释中,对我们学习源码有极大的帮助。三,读逻辑:逻辑指的是语句或者子函数的顺序问题,要重视作者编码的顺序,了解为什么先写A再写B,背后的原因是什么。四,读思想:所谓思想指源码背后体现出了哪些设计原则,比如是不是和设计模式的六大原则相符?是不是符合高内聚低耦合?是不是体现某种性能优化思想?五,读原理:就是前面讲的读主流程。而不是记忆每行代码。六,读编码风格:一般来来说优秀的源码的代码风格都比较优雅。可以通过源码来学习编码规范。七,读编程技巧:作者是否采用了某种设计模式,某种编程技巧实现了意料之外的效果。八,读设计方案:读源码不仅包含具体的代码,更重要的是设计方案。掌握一些解决问题的设计方案之后对提升我们自己的工作经验非常有帮助,我们工作中做技术方案时可以参考这些优秀项目的方案。以上是所有,希望大家都进步。