如何更有效地学习开源项目的代码?

如何更有效地学习开源项目的代码?

我很认同庄表伟总结的 “学习开源,就尽可能在代码里找答案,而不是在代码之外找答案,那些都是二手的,而且很可能是不准确的。” 但是如何读好,读懂代码,我这边还是有不同的认识。

1. 需要从代码管理库下载完整的源代码,而不是简单的源代码文件包或者source.jar.

这样做有很多好处,一个是你可以获取代码的修改记录,还有你可以获取到完整的测试代码,当你要提交patch的时候,你可以借助版本管理工具生成针对不同版本的patch。

2. 示例代码与单元测试

示例代码可以帮助你学会使用相关开源项目的API。很多朋友在使用开源项目的时候遇到一个小问题就发信给开发者要这样或者那样的示例代码,其实他们没有发现大部分的开源项目在开发的过程中,为了验证其实现的功能,都会写很多单元测试代码。这些代码其实非常好的示例代码。可能是下源码,建工程会花费你几个小时的时间,但是如果你想深入了解开源项目的话,这点投资还是很有价值的。

其实读单元测试的好处太多了,这里简单给大家列一下:

3. 架构文档

其实大部分的开源项目都会对其架构有一定的描述,这些描述可能会有点过时,但是通读一下会让你项目有一个比较深入的认识。这样做好比是让你对北京的二环,三环,四环,五环有个大体的认识。这样在你要对代码的某块内容进行详细研究的时候(例如找中关村的位置的时候,知道西北四环)就能很快定位了。

4. 在开源社群中寻求帮助

(这一点是新补充的内容。) 最近几年我在公司内部做了一些开源项目维护培训相关的工作,我发现大家如果遇到开源项目代码的问题的时候往往只是想着通过读代码的方式解决, 大家很少想到向开源项目社群寻求帮助这一快速途径。 直接向写代码的人问与代码相关的问题,往往可以获得最快速的回答。项目的维护者往往会关注那些有挑战的提问。在这里建议大家在提问之前需要做好功课,例如搜索一下github issue中是否有类似的问题讨论, 并且把自己的分析以及相关的尝试也都列举出来,这样可以进一步提升问题的解决晓丽。