今天在微博上看到庄表伟在知呼上回答的如何更有效地学习开源项目的代码?
我很认同他总结的 “学习开源,就尽可能在代码里找答案,而不是在代码之外找答案,那些都是二手的,而且很可能是不准确的。” 但是如何读好,读懂代码,我这边还是有不同的认识。
1. 需要从代码管理库下载完整的源代码,而不是简单的源代码文件包或者source.jar.
这样做有很多好处,一个是你可以获取代码的修改记录,还有你可以获取到完整的测试代码,当你要提交patch的时候,你可以借助版本管理工具生成针对不同版本的patch。
2. 示例代码与单元测试
示例代码可以帮助你学会使用相关开源项目的API。很多朋友在使用开源项目的时候遇到一个小问题就发信给开发者要这样或者那样的示例代码,其实他们没有发现大部分的开源项目在开发的过程中,为了验证其实现的功能,都会写很多单元测试代码。这些代码其实非常好的示例代码。可能是下源码,建工程会花费你几个小时的时间,但是如果你想深入了解开源项目的话,这点投资还是很有价值的。
其实读单元测试的好处太多了,这里简单给大家列一下:
- 由于一个单元测试一般也就是几个小时的开发工作量,你很容易就能读懂相关的代码。
- 每个单元测试都是可以独立运行的,这样节省你跟踪调试的时间。
- 单元测试在很大程度定义了软件的功能,可以帮助你快速掌握项目的相关API。
- 如果你修改的开源项目的代码,你可以通过修改单元测试来验证你的修改是否正确。
3. 架构文档
其实大部分的开源项目都会对其架构有一定的描述,这些描述可能会有点过时,但是通读一下会让你项目有一个比较深入的认识。这样做好比是让你对北京的二环,三环,四环,五环有个大体的认识。这样在你要对代码的某块内容进行详细研究的时候(例如找中关村的位置的时候,知道西北四环)就能很快定位了。
分享到:
相关推荐
课程分享——深度学习经典论文与开源项目实战,完整版20章,提供全部数据,代码,PPT。 深度学习经典论文解读与项目实战课程旨在帮助同学们掌握当下深度学习领域最核心论文思想及其源码实现。所选论文均是计算机...
第1篇 了解开源软件 第1章 开源软件概述 ...11.2 开源项目托管网站 第12章 开源组织和社区 12.1 Apache软件基金会 12.1.1 Apache的历史 …… 第13章 商业模式与实例 第14章 参与开源社区 第15章 开创事业
由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。 4、正则表达式:boost::regex 正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个...
免去了研究那些专业的许可条款的麻烦 更方便的对开源项目贡献出自己的代码 能保护你作为作品的原创作者 确保你至少拥有由于贡献参与而带来的署名荣誉 阻止其他人企图声明对你的作品拥有所有权的行为
Liferay Themes[1].pdf Liferay+CMS系统培训.ppt Liferay+Portal+数据库介绍+.doc Liferay+权限管理.doc liferay-portal-5-2-systems-development-...Liferay代码研读.pdf Liferay环境搭建.doc
这是第二部分,两个部分需要一起下载后,放在同一级目录,解压即可。 ...15.3.1 sourceforge托管开源项目基础设施构建 249 15.3.2 google code托管开源项目基础设施构建 259 15.4 宣传与坚持 263
本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,...
免费、开源,在浏览器中创建标准兼容的网页,强大的内容管理,易学易用,包含博客,论坛,事件日历,Google地图,相册,电子商务,安全的文件共享,新闻组,调查,投票等子系统。 在mojoPortal的基础上,可以二次...
spydroid的是一款优秀的开源视频服务软件,其短小精悍,特别适合小型视频传输。对其代码的分析有利于我们掌握视频实时传输技术的主要流程和关键细节,作为初学者分析其代码非常有意义。为了帮助大家快速入门,将自己...
开源项目 ILSpy 源代码。 留下来备份,官网可以下载到最新代码
本篇为大家介绍一个优秀的开源小项目:WebViewJavascriptBridge。它优雅地实现了在使用UIWebView时JS与ios的ObjCnativecode之间的互调,支持消息发送、接收、消息处理器的注册与调用以及设置消息处理的回调。就像...
环境配置:选一款IDE即可,基于谷歌开源项目 提供所有数据与代码,追随热点持续更新 【自然语言处理通用解决方案】 需要熟悉word2vec,RNN网络模型,了解词向量如何建模 重点在于Transformer网络架构,BERT训练方法...
非常非常欢迎你能够参与本项目的建设,每人做出一点点贡献,对整个项目来说就是一个非常大的贡献,希望集合众人的力量,让项目走的更好,能够为更多的人服务。 ###贡献者列表 * [@chengn]...
本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,...
深度学习与Tensorflow2实战视频教程,2020最新...章节15 谷歌开源项目BERT源码解读与应用实例 章节16 对抗生成网络实战 章节17 基于CycleGan开源项目实战图像合成 章节18 经典网络架构Resnet实战 章节19 Tensorflow基础
计算机视觉-物体检测-通用解决框架Mask-Rcnn实战课程旨在帮助同学们快速掌握物体检测领域当下主流解决方案与网络框架构建原理,基于开源项目解读其应用领域与使用方法。通过debug方式,详细解读项目中每一模块核心...
本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,...
分享课程——深度学习-对抗生成网络实战(GAN);...第2章 基于CycleGan开源项目实战图像合成 第3章 stargan论文架构解析 第4章 stargan项目实战及其源码解读 。。。。。 第9章 基础补充-PyTorch卷积模型实例