如何以“正确的姿势”阅读开源软件代码

之前想过写这篇文章,但是没有想到一个好的内容、好的突破点。在《GitHub 漫游指南》指南里,我们提到过《如何在GitHub“寻找灵感(fork)”》,但是并不是关于阅读源码的好文章。

我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是:

clone某个项目的代码到本地

查看这个项目的release列表

找到一个看得懂的release版本,如1.0或者更早的版本

读懂上一个版本的代码

向后阅读大版本的源码

读最新的源码

最好的在这个过程中,可以自己造轮子来实现一遍。

阅读过程

在我阅读的前端库、Python后台库的过程中,我们都是以造轮子为目的展开的。所以在最开始的时候,我需要一个可以工作,并且拥有我想要的功能的版本。

紧接着,我就可以开始去实践这个版本中的一些功能,并理解他们是怎么工作的。再用git大法展开之前修改的内容,可以使用IDE自带的Diff工具:

或者类似于SourceTree这样的工具,来查看修改的内容。

在我们理解了基本的核心功能后,我们就可以向后查看大、中版本的更新内容了。

开始之前,我们希望大家对版本号管理有一些基本的认识。

版本号管理

我最早阅读的开始软件是Linux,而下面则是Linux的Release过程:

表格源自一本书叫《Linux内核0.11(0.95)完全注释》,简单地再介绍一下:

版本0.00是一个hello,world程序

版本0.01包含了可以工作的代码

版本0.11是基本可以正常的版本

这里就要扯到《GNU 风格的版本号管理策略》:

1.项目初版本时,版本号可以为 0.1 或 0.1.0, 也可以为 1.0 或 1.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式;
2.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;

  1. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
    4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1;

5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。

因此,我们可以得到几个简单的结论:

我们需要阅读最早的有核心代码的版本

我们需要阅读1.0版本的Release

往后每一次大的Release我们都需要了解一下

示例

以Flask为例:

一、先Clone它。

二、从Release页面找到它的早期版本:

三、 从上面拿到它的提交号8605cc3,然后checkout到这次提交,查看功能。在这个版本里,一共有六百多行代码

还是有点长

四、我们可以找到它的最早版本:

然后查看它的flask.py文件,只有简单的三百多行,并且还包含一系列注释:

五、接着,再回过头去阅读

0.1版本

...
最新的0.10.1版本

文章转载自 开源中国社区[http://www.oschina.net]

时间: 2024-09-22 21:39:50

如何以“正确的姿势”阅读开源软件代码的相关文章

Github重定义开源软件 代码将成下一种语言?

10年前,虽然开源软件尚未对科技行业造成翻天覆地的影响,但开源的Linux系统已经运行在华尔街及其他行业大量的计算机上,免费代码开始显露出巨大的威力--创造巨大的价值以及经济利益.但彼时开源社区规模尚小,如果有人想要开始一个新的开源项目,他们通常只能在有限的工作条件下进行,有时不得不借助 一个称之为SourceForge的网站的帮助. GITHUB:征服谷歌.微软及其他巨头的服务 克里斯·戴博纳(Chris DiBona)有着一头长发,是谷歌的开源大师,他对此感到忧心忡忡,认为开源软件在一个网站

开放源码是开源软件吗?

Open Source的来历 1997年,埃里克·雷蒙(Eric Raymond)出版其著作<大教堂和市集>,探讨黑客社区与自由软件原则.1998年初,该论文受到极大的关注,为促成网景通讯公司将其受欢迎的互联网套装软件<网景通讯家(Netscape Communicator)>释放成为自由软件的因素之一.这些代码即为今日大家熟悉的Mozilla Firefox与Thunderbird. 网景的行动激起雷蒙及其伙伴深入研究如何将自由软件基金会的自由软件概念及优点带入商业软件产业.他们

OpenDaylight技术指导委员会主席Colin Dixon:网络开源软件的发展

2016年6月1-2日,"2016全球SDNFV技术大会"在北京盛大召开.作为连续举办三届的SDN/NFV技术与产业盛会,本届大会着眼于SDN /NFV的实践应用与部署,从SDN/NFV在运营商网络.企业网.云数据中心.测试解决方案等多个场景的应用出发,深入解析产业部署现状及面临的挑战与发展趋势. OpenDaylight技术指导委员会主席 Colin Dixon 在主会场上,OpenDaylight技术指导委员会主席Colin Dixon先生做了主题为"网络开源软件的发展&

《开源思索集》一开放源码是开源软件吗? - 简书

开放源码是开源软件吗? - 简书 开源思索集开放源码和开源软件的不同是什么?开放源码不能叫做开源软件吗?所谓开源,仅仅是指符合OSI定义的Open Source吗?Open Source的来历1997年,埃里克·雷蒙(Eric Raymond)出版其著作<大教堂和市集>,探讨黑客社区与自由软件原则.1998年初,该论文受到极大的关注,成为促成网景通讯公司将其受欢迎的互联网套装软件<网景通讯家>(Netscape Communicator)释放成为自由软件的因素之一.这些代码即为今日

开源软件与专利产品之争正日益激烈

人们熟悉的开源软件与专有的IT产品之间的争论现在似乎正在云计算领域全面展开,主要厂商之间的相互攻击正在日益激烈.最近的一轮争论发生在几个星期前.当时,思杰宣布它将把它的CloudStack云构建平台引进到Apache软件基金会,创建一个与OpenStack竞争的模式. 在此之前,OpenStack在开源云计算领域一直在获得增长势头.虽然思杰的举措最初被看作是与OpenStack竞争,但是,这两家公司最近把目标都对准了共同的敌人:VMware. 一位VMware高管发表一篇博客,把竞争对手称作"丑

思科发布免费开源软件云管理平台OpenStack

为进一步显示对OpenStack项目的承诺,思科推出了这个开源软件http://www.aliyun.com/zixun/aggregation/14224.html">云管理平台的一个免费发布版.这个软件还包括虚拟网络和高可用性功能等其它服务. 思科已经成为OpenStack日益增多的已经发布开源软件代码的机构会员之一.这些会员与Red Hat.SUSE.Canonical和Ubuntu等Linux发布公司以及专营Rackspace和OpenStack的公司Piston Cloud Co

Facebook、微信团队、Twitter、微软开源软件列表一览

  编者按:本文来自微信公众号"InfoQ"(ID:infoqchina),编辑小智:36氪经授权发布. 对于为什么要发布开源项目,Facebook开源项目负责人曾经解释过:一是开源能够帮助他人更快地开发软件,促进世界创新,主要是社会价值层面的考虑.二是开源能够倒逼Facebook的工程师写出更好的代码.三是开源能够更有效利用社区的力量,帮助Facebook一起解决难题.开源,让世界更美好,不是吗? Facebook开源软件列表 从Facebook的GitHub账户中可以看到,Face

开源软件和 OpenSSL 的真实故事,到底谁才是真正的隐形战友

前几天,在朋友圈看到转来的原发于"界面"关于OpenSSL和开源项目的"隐形战友" 一文.开始觉得不过是炒冷饭,"心脏出血"这个OpenSSL严重漏洞,从去年(2014)4月初被公众知道,到现在已有将近一年了,这件事已经算告一段 落.尽管这篇文章充满了误解.硬伤和企业宣传,我也没太在意.结果,今天看到界面的网站上竟然还在用支付宝给OpenSSL募捐,这就荒唐了.之前有一些 朋友说,无论怎么样,多一些关注总是好的,从现在的结果看,界面的文章造成的坏

基于开源软件在Azure平台建立大规模系统的最佳实践

前言 Microsoft Azure 是微软公有云的唯一解决方案.借助这一平台,用户可以以多种方式部署和发布自己的应用. 这是一个开放的平台,除了对于Windows服务器和SQL Server的支持,Microsoft Azure也支持了大量主流开源软件和框架,包括Linux, Tomcat, Java等.如何将一个基于开源软件的系统迁移到Microsoft Azure平台,并充分发挥云在弹性.敏捷性等方面的优势? 本文和读者分享一些最佳实践经验,并在文末以中国网络电视台的系统迁移作为参考案例.