从0开始:如何看懂源码
为什么要看开源项目
在我看来,看开源项目的原因有二。
第一是工作中总会碰到一些问题,无论是 Google 还是百度,无论是 StackOverFlow 还是个人博客,总是找不到解决问题的思路。
这个时候只能去翻源码。
而这些源码大多托管在 GitHub 上,就是所谓的开源项目。
在这个方面我不是什么开源达人,也还是个小菜鸟,摸着石头过河,但经过这几年的磨练,大体上知道咋看,后面会分享一些看源码的技巧。
第二就是惨兮兮的自学党需要开源项目来丰富自己的经历,来开拓自己的眼界。
在个人的学习方面,开源项目也可以帮你破开学了无用的瓶颈,还可以从中吸取大佬们的经验和用法,一石二鸟。
至于用用 GitHub 上一些开源的黑科技可不适用这,除非你对某个项目特别特别感兴趣,想要更进一步了解,甚至参与其中。
无论为什么要看开源项目,有一点是值得肯定的,多看一定对自己是有益的。
看开源项目有哪些难
说实话,开源项目可不是你说看就能看的懂的。
想我当初第一次接触成系统的项目代码,愁的我头发都掉了好多。
现在反过头去看当初的我,还能坚持在这一行,真的是付出了不少努力。
我总结了一下为啥那时候我看源码会这么难,这里分享给大家。
先不论你所看代码的好坏,就说一个写的很好项目代码,依旧很难阅读。
一个成系统的项目代码,不是你刚开始学习时接触的那些几十、几百行代码。
它代码量之大,代码结构之复杂,根本不是新手可以搞定的。
知乎上有个大佬(wsivoky)之前是这么说看源码的。
搞项目,看源码要面对的是下面这乱糟糟的一坨。
有些时候你要问,为什么程序猿们喜欢自己造轮子,不是自己的轮子好用,而是别人的轮子不是太难看,就是看不懂。
开源项目尤其是这样。
一个稍大一点的开源项目,除非是那种文档极其良心,代码极其规范的优质品,都不适用于新手学习。
当然,这也源于开源的弊端。
首先开源项目本身是免费的,作者没有义务为你详细解释某某实现过程,而项目文档本身又相当乏味枯燥。
其次就是开源本身倾向于更新一些的技术,可能都是大牛们私下里的尝试。这可不是你在学习时接触到的那些朴实又稳定的旧技术.
看源码的思路和方法
我自己给看源码的过程分成了三个阶段,但必须要说的是,每个阶段都一定要将程序跑起来。
程序员这行毕竟算是工科,理论必须得和实践结合。
第一阶段
这一阶段是刚接触项目的阶段,你首先要做的,就是让你的代码跑起来。
只有跑起来的程序,你才能知道这个项目是干嘛的,这个项目提供了什么功能。
同时这一阶段也需要我们了解整个项目大致用了哪些技术点。
这是最困难的地方,也是你查漏补缺,提升技术的好时机。
靠谱点的开源项目都会在 README 中写上如何部署,这个看源码的小伙伴一定要多加留意。
如果你对所需的技术点都有了大概的了解,借助开源项目的文档,摸清楚开源项目的整体框架。
比如哪部分是负责网络通信,哪部分是实现逻辑认证,哪部分是与前端交互,把大的模块先分出来。
第二阶段
第二阶段就是我们之前说的带着目的去读代码,去跑代码,去改代码。
你就可以从一个模块入手,借助IDE,学会下断点,并尝试修改代码。
我们不光是参与其中,通过程序的直观变化了解所看代码职责,甚至主动的创造 Bug。
比如我们可以注释掉一些代码,再试着跑跑,看看程序有什么反应。
是崩溃了,还是某些功能不能用了。
如果是程序崩溃了,那就看看程序是在哪里死掉了,如果是某些功能不能用了,那就可以判断这部分代码和这个功能间的关系。
第三阶段
重复上个阶段,让你把源码的伪装一层一层拆开,你就能理解整个框架了。
而第三阶段的读代码就是为了研究在解决问题时,别人的项目中用到的某一技术,或是一些巧妙的构思。
为什么用这个技术,又是如何实现的,都是我们该思考学习的。
当然你也可以了解到作者的代码风格、命名习惯等等,想参与这个项目开发的小伙伴们就可以更进一步的探索。
看源码是一个痛苦而又有收益的事,对此你一定要有耐心,很多地方比较难想,不妨多看几遍。
把握好读代码时的颗粒度,每行都去细读是不现实的,这样只会让你见木不见森,而粗读可能会漏掉许多关键点。
了解常用的设计模式是必要的,因为很多开源大佬写代码时都默认了这些,如果你听都没听说过,你组织代码时就会变得很乱。
好记性不如烂笔头,一定要学会注释,跑程序中出现的问题和想法,记得要及时记录。当然在理解整个框架的过程,流程图也要画起来,这些收益远比你想象的多。
推荐几个开源项目
我推荐几个我之前就看过的 Python 开源项目,不适合老鸟,倒是很多刚入门的小伙伴可以多了解一下。
总结
后来我自己看这篇文章,发现不单单适用于接触开源项目,入职以后你熟悉公司老的项目都是这般流程。
困难总是有,办法总比困难多,读源码对个人提升是毋庸置疑的,这种耐下性子就能有收获的好事,干嘛让它白白溜走。
还是那句,学路慢慢,咱一起进步呗~