Skip to content

Commit

Permalink
add how to read code
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Nov 21, 2016
1 parent 43a14fe commit 0fda63e
Show file tree
Hide file tree
Showing 11 changed files with 240 additions and 0 deletions.
86 changes: 86 additions & 0 deletions chapters/09-read-code.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
如何以“正确的姿势”阅读开源软件代码
===

> 所有让你直接看最新源码的文章都是在扯淡,你应该从“某个版本”开始阅读代码。
我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是:

- clone某个项目的代码到本地
- 查看这个项目的release列表
- 找到一个看得懂的release版本,如1.0或者更早的版本
- 读懂上一个版本的代码
- 向后阅读大版本的源码
- 读最新的源码

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

## 阅读过程

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

![it-works-cms.png](./img/it-works-cms.png)

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

![pycharm-diff.jpg](./img/pycharm-diff.jpg)

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

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

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

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

![linux-history.png](./img/linux-history.png)

表格源自一本书叫《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;
3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1;
5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。

因此,我们可以得到几个简单的结论:
- 我们需要阅读最早的有核心代码的版本
- 我们需要阅读1.0版本的Release
- 往后每一次大的Release我们都需要了解一下

## 示例

以Flask为例:

一、先Clone它。

![clone-flask.png](./img/clone-flask.png)

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

![flask.png](./img/flask.png)

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

![flask-0.1.png](./img/flask-0.1.png)

还是有点长

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

![flask-init.png](./img/flask-init.png)

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

![flask-init.png](./img/flask-init.png)

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

- 0.1版本
- 。。。
- 最新的0.10.1版本
File renamed without changes.
87 changes: 87 additions & 0 deletions github-roam.md
Original file line number Diff line number Diff line change
Expand Up @@ -2351,6 +2351,93 @@ def get_points(usernames):

真看不出来两者有什么相似的地方 。。。。

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

> 所有让你直接看最新源码的文章都是在扯淡,你应该从“某个版本”开始阅读代码。

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

- clone某个项目的代码到本地
- 查看这个项目的release列表
- 找到一个看得懂的release版本,如1.0或者更早的版本
- 读懂上一个版本的代码
- 向后阅读大版本的源码
- 读最新的源码

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

## 阅读过程

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

![it-works-cms.png](./img/it-works-cms.png)

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

![pycharm-diff.jpg](./img/pycharm-diff.jpg)

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

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

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

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

![linux-history.png](./img/linux-history.png)

表格源自一本书叫《Linux内核0.11(0.95)完全注释》,简单地再介绍一下:
- 版本0.00是一个hello,world程序
- 版本0.01包含了可以工作的代码
- 版本0.11是基本可以正常的版本

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

1.项目初版本时,版本号可以为 0.10.1.0, 也可以为 1.01.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式;
2.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1
3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1
5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。

因此,我们可以得到几个简单的结论:
- 我们需要阅读最早的有核心代码的版本
- 我们需要阅读1.0版本的Release
- 往后每一次大的Release我们都需要了解一下

## 示例

以Flask为例:

一、先Clone它。

![clone-flask.png](./img/clone-flask.png)

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

![flask.png](./img/flask.png)

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

![flask-0.1.png](./img/flask-0.1.png)

还是有点长

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

![flask-init.png](./img/flask-init.png)

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

![flask-init.png](./img/flask-init.png)

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

- 0.1版本
- 。。。
- 最新的0.10.1版本

#GitHub连击

##100
Expand Down
Binary file added img/clone-flask.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/flask-0.1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/flask-init.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/flask.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/it-works-cms.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/linux-history.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added img/pycharm-diff.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 67 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,10 @@ <h1>GitHub 漫游指南</h1>
</ul></li>
<li><a href="#邻近算法与相似用户">邻近算法与相似用户</a></li>
</ul></li>
<li><a href="#如何以正确的姿势阅读开源软件代码">如何以“正确的姿势”阅读开源软件代码</a><ul>
<li><a href="#阅读过程">阅读过程</a></li>
<li><a href="#示例">示例</a></li>
</ul></li>
<li><a href="#github连击">GitHub连击</a><ul>
<li><a href="#天">100天</a><ul>
<li><a href="#天的提升">40天的提升</a></li>
Expand Down Expand Up @@ -2133,6 +2137,69 @@ <h2 id="邻近算法与相似用户">邻近算法与相似用户</h2>
0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. ]</code></pre>
<p>真看不出来两者有什么相似的地方 。。。。</p>
<h1 id="如何以正确的姿势阅读开源软件代码">如何以“正确的姿势”阅读开源软件代码</h1>
<blockquote>
<p>所有让你直接看最新源码的文章都是在扯淡,你应该从“某个版本”开始阅读代码。</p>
</blockquote>
<p>我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是:</p>
<ul>
<li>clone某个项目的代码到本地</li>
<li>查看这个项目的release列表</li>
<li>找到一个看得懂的release版本,如1.0或者更早的版本</li>
<li>读懂上一个版本的代码</li>
<li>向后阅读大版本的源码</li>
<li>读最新的源码</li>
</ul>
<p>最好的在这个过程中,<strong>可以自己造轮子来实现一遍</strong></p>
<h2 id="阅读过程">阅读过程</h2>
<p>在我阅读的前端库、Python后台库的过程中,我们都是以造轮子为目的展开的。所以在最开始的时候,我需要一个可以工作,并且拥有我想要的功能的版本。</p>
<figure>
<img src="./img/it-works-cms.png" alt="it-works-cms.png" /><figcaption>it-works-cms.png</figcaption>
</figure>
<p>紧接着,我就可以开始去实践这个版本中的一些功能,并理解他们是怎么工作的。再用<code>git</code>大法展开之前修改的内容,可以使用IDE自带的Diff工具:</p>
<figure>
<img src="./img/pycharm-diff.jpg" alt="pycharm-diff.jpg" /><figcaption>pycharm-diff.jpg</figcaption>
</figure>
<p>或者类似于<code>SourceTree</code>这样的工具,来查看修改的内容。</p>
<p>在我们理解了基本的核心功能后,我们就可以向后查看大、中版本的更新内容了。</p>
<p>开始之前,我们希望大家对版本号管理有一些基本的认识。 ## 版本号管理</p>
<p>我最早阅读的开始软件是Linux,而下面则是Linux的Release过程:</p>
<figure>
<img src="./img/linux-history.png" alt="linux-history.png" /><figcaption>linux-history.png</figcaption>
</figure>
<p>表格源自一本书叫《Linux内核0.11(0.95)完全注释》,简单地再介绍一下: - 版本0.00是一个hello,world程序 - 版本0.01包含了可以工作的代码 - 版本0.11是基本可以正常的版本</p>
<p>这里就要扯到《GNU 风格的版本号管理策略》:</p>
<p>1.项目初版本时,版本号可以为 0.1 或 0.1.0, 也可以为 1.0 或 1.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式; 2.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1; 3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉; 4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1; 5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。</p>
<p>因此,我们可以得到几个简单的结论: - 我们需要阅读最早的有核心代码的版本 - 我们需要阅读1.0版本的Release - 往后每一次大的Release我们都需要了解一下</p>
<h2 id="示例">示例</h2>
<p>以Flask为例:</p>
<p>一、先Clone它。</p>
<figure>
<img src="./img/clone-flask.png" alt="clone-flask.png" /><figcaption>clone-flask.png</figcaption>
</figure>
<p>二、从Release页面找到它的早期版本:</p>
<figure>
<img src="./img/flask.png" alt="flask.png" /><figcaption>flask.png</figcaption>
</figure>
<p>三、 从上面拿到它的提交号<code>8605cc3</code>,然后checkout到这次提交,查看功能。在这个版本里,一共有六百多行代码</p>
<figure>
<img src="./img/flask-0.1.png" alt="flask-0.1.png" /><figcaption>flask-0.1.png</figcaption>
</figure>
<p>还是有点长</p>
<p>四、我们可以找到它的最早版本:</p>
<figure>
<img src="./img/flask-init.png" alt="flask-init.png" /><figcaption>flask-init.png</figcaption>
</figure>
<p>然后查看它的<code>flask.py</code>文件,只有简单的三百多行,并且还包含一系列注释:</p>
<figure>
<img src="./img/flask-init.png" alt="flask-init.png" /><figcaption>flask-init.png</figcaption>
</figure>
<p>五、接着,再回过头去阅读</p>
<ul>
<li>0.1版本</li>
<li>。。。</li>
<li>最新的0.10.1版本</li>
</ul>
<h1 id="github连击">GitHub连击</h1>
<h2 id="">100天</h2>
<p>我也是蛮拼的,虽然我想的只是在GitHub上连击100~200天,然而到了今天也算不错。</p>
Expand Down

0 comments on commit 0fda63e

Please sign in to comment.