Skip to content

Commit 0fda63e

Browse files
committed
add how to read code
1 parent 43a14fe commit 0fda63e

11 files changed

+240
-0
lines changed

chapters/09-read-code.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
如何以“正确的姿势”阅读开源软件代码
2+
===
3+
4+
> 所有让你直接看最新源码的文章都是在扯淡,你应该从“某个版本”开始阅读代码。
5+
6+
我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是:
7+
8+
- clone某个项目的代码到本地
9+
- 查看这个项目的release列表
10+
- 找到一个看得懂的release版本,如1.0或者更早的版本
11+
- 读懂上一个版本的代码
12+
- 向后阅读大版本的源码
13+
- 读最新的源码
14+
15+
最好的在这个过程中,**可以自己造轮子来实现一遍**
16+
17+
## 阅读过程
18+
19+
在我阅读的前端库、Python后台库的过程中,我们都是以造轮子为目的展开的。所以在最开始的时候,我需要一个可以工作,并且拥有我想要的功能的版本。
20+
21+
![it-works-cms.png](./img/it-works-cms.png)
22+
23+
紧接着,我就可以开始去实践这个版本中的一些功能,并理解他们是怎么工作的。再用`git`大法展开之前修改的内容,可以使用IDE自带的Diff工具:
24+
25+
![pycharm-diff.jpg](./img/pycharm-diff.jpg)
26+
27+
或者类似于`SourceTree`这样的工具,来查看修改的内容。
28+
29+
在我们理解了基本的核心功能后,我们就可以向后查看大、中版本的更新内容了。
30+
31+
开始之前,我们希望大家对版本号管理有一些基本的认识。
32+
## 版本号管理
33+
34+
我最早阅读的开始软件是Linux,而下面则是Linux的Release过程:
35+
36+
![linux-history.png](./img/linux-history.png)
37+
38+
表格源自一本书叫《Linux内核0.11(0.95)完全注释》,简单地再介绍一下:
39+
- 版本0.00是一个hello,world程序
40+
- 版本0.01包含了可以工作的代码
41+
- 版本0.11是基本可以正常的版本
42+
43+
这里就要扯到《GNU 风格的版本号管理策略》:
44+
45+
1.项目初版本时,版本号可以为 0.1 或 0.1.0, 也可以为 1.0 或 1.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式;
46+
2.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;
47+
3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
48+
4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1;
49+
5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。
50+
51+
因此,我们可以得到几个简单的结论:
52+
- 我们需要阅读最早的有核心代码的版本
53+
- 我们需要阅读1.0版本的Release
54+
- 往后每一次大的Release我们都需要了解一下
55+
56+
## 示例
57+
58+
以Flask为例:
59+
60+
一、先Clone它。
61+
62+
![clone-flask.png](./img/clone-flask.png)
63+
64+
二、从Release页面找到它的早期版本:
65+
66+
![flask.png](./img/flask.png)
67+
68+
三、 从上面拿到它的提交号`8605cc3`,然后checkout到这次提交,查看功能。在这个版本里,一共有六百多行代码
69+
70+
![flask-0.1.png](./img/flask-0.1.png)
71+
72+
还是有点长
73+
74+
四、我们可以找到它的最早版本:
75+
76+
![flask-init.png](./img/flask-init.png)
77+
78+
然后查看它的`flask.py`文件,只有简单的三百多行,并且还包含一系列注释:
79+
80+
![flask-init.png](./img/flask-init.png)
81+
82+
五、接着,再回过头去阅读
83+
84+
- 0.1版本
85+
- 。。。
86+
- 最新的0.10.1版本
File renamed without changes.

github-roam.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2351,6 +2351,93 @@ def get_points(usernames):
23512351

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

2354+
如何以“正确的姿势”阅读开源软件代码
2355+
===
2356+
2357+
> 所有让你直接看最新源码的文章都是在扯淡,你应该从“某个版本”开始阅读代码。
2358+
2359+
我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是:
2360+
2361+
- clone某个项目的代码到本地
2362+
- 查看这个项目的release列表
2363+
- 找到一个看得懂的release版本,如1.0或者更早的版本
2364+
- 读懂上一个版本的代码
2365+
- 向后阅读大版本的源码
2366+
- 读最新的源码
2367+
2368+
最好的在这个过程中,**可以自己造轮子来实现一遍**
2369+
2370+
## 阅读过程
2371+
2372+
在我阅读的前端库、Python后台库的过程中,我们都是以造轮子为目的展开的。所以在最开始的时候,我需要一个可以工作,并且拥有我想要的功能的版本。
2373+
2374+
![it-works-cms.png](./img/it-works-cms.png)
2375+
2376+
紧接着,我就可以开始去实践这个版本中的一些功能,并理解他们是怎么工作的。再用`git`大法展开之前修改的内容,可以使用IDE自带的Diff工具:
2377+
2378+
![pycharm-diff.jpg](./img/pycharm-diff.jpg)
2379+
2380+
或者类似于`SourceTree`这样的工具,来查看修改的内容。
2381+
2382+
在我们理解了基本的核心功能后,我们就可以向后查看大、中版本的更新内容了。
2383+
2384+
开始之前,我们希望大家对版本号管理有一些基本的认识。
2385+
## 版本号管理
2386+
2387+
我最早阅读的开始软件是Linux,而下面则是Linux的Release过程:
2388+
2389+
![linux-history.png](./img/linux-history.png)
2390+
2391+
表格源自一本书叫《Linux内核0.11(0.95)完全注释》,简单地再介绍一下:
2392+
- 版本0.00是一个hello,world程序
2393+
- 版本0.01包含了可以工作的代码
2394+
- 版本0.11是基本可以正常的版本
2395+
2396+
这里就要扯到《GNU 风格的版本号管理策略》:
2397+
2398+
1.项目初版本时,版本号可以为 0.10.1.0, 也可以为 1.01.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式;
2399+
2.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1
2400+
3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉;
2401+
4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1
2402+
5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。
2403+
2404+
因此,我们可以得到几个简单的结论:
2405+
- 我们需要阅读最早的有核心代码的版本
2406+
- 我们需要阅读1.0版本的Release
2407+
- 往后每一次大的Release我们都需要了解一下
2408+
2409+
## 示例
2410+
2411+
以Flask为例:
2412+
2413+
一、先Clone它。
2414+
2415+
![clone-flask.png](./img/clone-flask.png)
2416+
2417+
二、从Release页面找到它的早期版本:
2418+
2419+
![flask.png](./img/flask.png)
2420+
2421+
三、 从上面拿到它的提交号`8605cc3`,然后checkout到这次提交,查看功能。在这个版本里,一共有六百多行代码
2422+
2423+
![flask-0.1.png](./img/flask-0.1.png)
2424+
2425+
还是有点长
2426+
2427+
四、我们可以找到它的最早版本:
2428+
2429+
![flask-init.png](./img/flask-init.png)
2430+
2431+
然后查看它的`flask.py`文件,只有简单的三百多行,并且还包含一系列注释:
2432+
2433+
![flask-init.png](./img/flask-init.png)
2434+
2435+
五、接着,再回过头去阅读
2436+
2437+
- 0.1版本
2438+
- 。。。
2439+
- 最新的0.10.1版本
2440+
23542441
#GitHub连击
23552442

23562443
##100

img/clone-flask.png

65.3 KB
Loading

img/flask-0.1.png

476 KB
Loading

img/flask-init.png

537 KB
Loading

img/flask.png

188 KB
Loading

img/it-works-cms.png

151 KB
Loading

img/linux-history.png

337 KB
Loading

img/pycharm-diff.jpg

313 KB
Loading

index.html

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ <h1>GitHub 漫游指南</h1>
166166
</ul></li>
167167
<li><a href="#邻近算法与相似用户">邻近算法与相似用户</a></li>
168168
</ul></li>
169+
<li><a href="#如何以正确的姿势阅读开源软件代码">如何以“正确的姿势”阅读开源软件代码</a><ul>
170+
<li><a href="#阅读过程">阅读过程</a></li>
171+
<li><a href="#示例">示例</a></li>
172+
</ul></li>
169173
<li><a href="#github连击">GitHub连击</a><ul>
170174
<li><a href="#天">100天</a><ul>
171175
<li><a href="#天的提升">40天的提升</a></li>
@@ -2133,6 +2137,69 @@ <h2 id="邻近算法与相似用户">邻近算法与相似用户</h2>
21332137
0. 0. 0. 0. 0. 0. 0.
21342138
0. 0. 0. 0. ]</code></pre>
21352139
<p>真看不出来两者有什么相似的地方 。。。。</p>
2140+
<h1 id="如何以正确的姿势阅读开源软件代码">如何以“正确的姿势”阅读开源软件代码</h1>
2141+
<blockquote>
2142+
<p>所有让你直接看最新源码的文章都是在扯淡,你应该从“某个版本”开始阅读代码。</p>
2143+
</blockquote>
2144+
<p>我们并不建议所有的读者都直接看最新的代码,正确的姿势应该是:</p>
2145+
<ul>
2146+
<li>clone某个项目的代码到本地</li>
2147+
<li>查看这个项目的release列表</li>
2148+
<li>找到一个看得懂的release版本,如1.0或者更早的版本</li>
2149+
<li>读懂上一个版本的代码</li>
2150+
<li>向后阅读大版本的源码</li>
2151+
<li>读最新的源码</li>
2152+
</ul>
2153+
<p>最好的在这个过程中,<strong>可以自己造轮子来实现一遍</strong></p>
2154+
<h2 id="阅读过程">阅读过程</h2>
2155+
<p>在我阅读的前端库、Python后台库的过程中,我们都是以造轮子为目的展开的。所以在最开始的时候,我需要一个可以工作,并且拥有我想要的功能的版本。</p>
2156+
<figure>
2157+
<img src="./img/it-works-cms.png" alt="it-works-cms.png" /><figcaption>it-works-cms.png</figcaption>
2158+
</figure>
2159+
<p>紧接着,我就可以开始去实践这个版本中的一些功能,并理解他们是怎么工作的。再用<code>git</code>大法展开之前修改的内容,可以使用IDE自带的Diff工具:</p>
2160+
<figure>
2161+
<img src="./img/pycharm-diff.jpg" alt="pycharm-diff.jpg" /><figcaption>pycharm-diff.jpg</figcaption>
2162+
</figure>
2163+
<p>或者类似于<code>SourceTree</code>这样的工具,来查看修改的内容。</p>
2164+
<p>在我们理解了基本的核心功能后,我们就可以向后查看大、中版本的更新内容了。</p>
2165+
<p>开始之前,我们希望大家对版本号管理有一些基本的认识。 ## 版本号管理</p>
2166+
<p>我最早阅读的开始软件是Linux,而下面则是Linux的Release过程:</p>
2167+
<figure>
2168+
<img src="./img/linux-history.png" alt="linux-history.png" /><figcaption>linux-history.png</figcaption>
2169+
</figure>
2170+
<p>表格源自一本书叫《Linux内核0.11(0.95)完全注释》,简单地再介绍一下: - 版本0.00是一个hello,world程序 - 版本0.01包含了可以工作的代码 - 版本0.11是基本可以正常的版本</p>
2171+
<p>这里就要扯到《GNU 风格的版本号管理策略》:</p>
2172+
<p>1.项目初版本时,版本号可以为 0.1 或 0.1.0, 也可以为 1.0 或 1.0.0,如果你为人很低调,我想你会选择那个主版本号为 0 的方式; 2.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1; 3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉; 4.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1; 5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制。</p>
2173+
<p>因此,我们可以得到几个简单的结论: - 我们需要阅读最早的有核心代码的版本 - 我们需要阅读1.0版本的Release - 往后每一次大的Release我们都需要了解一下</p>
2174+
<h2 id="示例">示例</h2>
2175+
<p>以Flask为例:</p>
2176+
<p>一、先Clone它。</p>
2177+
<figure>
2178+
<img src="./img/clone-flask.png" alt="clone-flask.png" /><figcaption>clone-flask.png</figcaption>
2179+
</figure>
2180+
<p>二、从Release页面找到它的早期版本:</p>
2181+
<figure>
2182+
<img src="./img/flask.png" alt="flask.png" /><figcaption>flask.png</figcaption>
2183+
</figure>
2184+
<p>三、 从上面拿到它的提交号<code>8605cc3</code>,然后checkout到这次提交,查看功能。在这个版本里,一共有六百多行代码</p>
2185+
<figure>
2186+
<img src="./img/flask-0.1.png" alt="flask-0.1.png" /><figcaption>flask-0.1.png</figcaption>
2187+
</figure>
2188+
<p>还是有点长</p>
2189+
<p>四、我们可以找到它的最早版本:</p>
2190+
<figure>
2191+
<img src="./img/flask-init.png" alt="flask-init.png" /><figcaption>flask-init.png</figcaption>
2192+
</figure>
2193+
<p>然后查看它的<code>flask.py</code>文件,只有简单的三百多行,并且还包含一系列注释:</p>
2194+
<figure>
2195+
<img src="./img/flask-init.png" alt="flask-init.png" /><figcaption>flask-init.png</figcaption>
2196+
</figure>
2197+
<p>五、接着,再回过头去阅读</p>
2198+
<ul>
2199+
<li>0.1版本</li>
2200+
<li>。。。</li>
2201+
<li>最新的0.10.1版本</li>
2202+
</ul>
21362203
<h1 id="github连击">GitHub连击</h1>
21372204
<h2 id="">100天</h2>
21382205
<p>我也是蛮拼的,虽然我想的只是在GitHub上连击100~200天,然而到了今天也算不错。</p>

0 commit comments

Comments
 (0)