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

问题:

学计算机的学生,空闲时间很多,又不方便出去实习,朋友说让我看看开源代码,可是漫漫开源社区,而且感觉项目都很庞大且复杂,不知道大家对这个有什么看法。

回答1:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:姜宁
链接:http://www.zhihu.com/question/19637879/answer/13545260
来源:知乎

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

1. 需要从 代码管理库下载完整的源代码,而不是简单的源代码文件包或者source.jar.
这样做有很多好处,一个是你可以获取 代码的修改记录,还有你可以 获取到完整的测试代码,当你要提交patch的时候,你可以借助版本管理工具生成 针对不同版本的patch。

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

其实读单元测试的好处太多了,这里简单给大家列一下:
  • 由于一个单元测试一般也就是几个小时的开发工作量,你很容易就能读懂相关的代码
  • 每个单元测试都是可以独立运行的,这样节省你跟踪调试的时间
  • 单元测试在很大程度定义了软件的功能,可以帮助你快速掌握项目的相关API
  • 如果你修改的开源项目的代码,你可以通过修改单元测试来验证你的修改是否正确

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

回答2:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:小白
链接:http://www.zhihu.com/question/19637879/answer/13532090
来源:知乎

如果你空闲时间很多,我建议你多参加一些比赛。我在大学期间就频繁参加各种比赛,收获很大。一个完整的项目, 不管再小,只要做完了,就会有收获。

大三的时候就是因为参加比赛,才开始看一些比较大的开源项目源代码,大概几万行的样子,看完了感觉受益匪浅,从网上成熟的开源代码里,可以学到 很多的设计思想。之后因为其他的项目,又陆续看了几个开源项目的代码,每一个代码量都不算太大,大概几千行到几万行不等。虽然我很热爱编程,但是,我看开源代码也全部是因为项目需要,是 项目驱动的,感觉很突兀的拿来一个项目的代码来看,找不到那么强大的斗志。

所以,我还是建议你 从项目入手,以项目为驱动,激励自己进步,是否一定要看开源代码,就看你个人的兴趣和需要了。
回答3:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:张西家
链接:http://www.zhihu.com/question/19637879/answer/13643269
来源:知乎

我来补充几条和 参与开发相关的。当然参与不是学习开源代码必要的条件,但是实际的参与, 和作者们直接的交流会更有效地帮助你理解和提高。
  • 选择什么项目很重要,如果重在参与和实践,那么最好选一个自己用得到,非常感兴趣的项目。这样可以有很强的动力支持自己做一些代码,否则只是阅读代码很枯燥,效果也不好。
  • 项目的类型,名气,成熟度以及社区开放性,都会对你的参与有影响。
  • 一般都会有一个 How to Contribute 的文档,可以从那里看起来,运气好的话可以发现有 code walkthrough guide,或者是架构类文档
  • 一定要去订阅项目的开发邮件列表。IRC 一直挂着,每天至少一次用十几分钟扫描一下 IRC 上的讨论。很多项目会有为新人准备好的入门 bug 列表,挑一个没有人在做而你又特别有兴趣的开始做起来,有问题一般都可以在 IRC 或邮件列表上问
  • 建议「脑中」有一个大概的流程图就可以,从高层去把握,不要花很多时间去画细节的流程图。一个是不必记忆太多细节,还有就是绝大多数不可以自动生成的图形随着代码的演进都会过时。
  • 对一些文档注释极少的项目,有时可以利用版本控制工具回退到比较早期较简单的版本,更容易整体把握。不过这个方法不是很通用,最好先问问作者们。
  • Coders At Work 这本书中有多次聊到如何阅读代码,有兴趣可以找到读读

你可能感兴趣的:(数据结构及算法)