如何看懂 github 上的开源项目

2014-04-25 17:03:27 +08:00
 gujianbo
RT,github上有很多优秀的开源项目,如nginx、mysql、hadoop、spark、tair。对此比较敬仰,但是就是不知道怎么看懂,求解
28437 次点击
所在节点    程序员
37 条回复
shenmimu
2014-04-25 17:10:00 +08:00
Pixeller
2014-04-25 17:10:07 +08:00
- -你写的这个也很难看懂.
shenmimu
2014-04-25 17:10:20 +08:00
shenmimu
2014-04-25 17:10:55 +08:00
@Pixeller 是一个开发手册啊 起码是中文的 可以有点思路;)
Pixeller
2014-04-25 17:11:31 +08:00
@shenmimu 我说lz.
gujianbo
2014-04-25 17:15:24 +08:00
@Pixeller 纳尼,难道我表达不清楚吗
gujianbo
2014-04-25 17:15:45 +08:00
@shenmimu thanks
coolcfan
2014-04-25 17:20:26 +08:00
没有必要一上来就看这么大的吧,有很多精巧的小项目的。
Mutoo
2014-04-25 17:25:34 +08:00
xdeng
2014-04-25 17:31:33 +08:00
你需要 Source Insight 3.5
simpx
2014-04-25 17:45:57 +08:00
分享一下个人经验总结,就是硬着头皮,逐个函数、逐个文件的理解过去,遇到不懂的就google,懂了的就在旁边写上注释,碰到复杂逻辑,拿出草稿纸画流程图,从函数、文件到模块,最后慢慢能复述出大致的逻辑和经典的细节。
说白了,没有看不懂的代码,只有不够强的动力。
aszxqw
2014-04-25 17:47:46 +08:00
本来就是很难啃的东西。
如果想顺利的看懂一般需要几个条件,就拿nginx来说吧。
1. 熟悉c语言
2. 平时就是在开发网络服务
3. 经常使用nginx。

之前有个同事对nginx源码熟读了很多,原因就是他就是专门开发server的,而且他读源码的时候经常修改nginx源码调试跑看看效果。

如果完全不是一个方向的话,比如如果你是搞前端js的话,感觉硬啃server源码恐怕很难,建议还是看别人的源码详解或者之类的读书笔记看起。
simpx
2014-04-25 18:08:02 +08:00
补充一下经历,来公司前我的经验局限于web后端开发,对系统底层了解很浅,也没有C相关经验。

工作内容是开发维护一个机制类似nginx,c实现的网络框架,涉及到epoll、socket、并发等。因为是内部项目,没有文档,也没有谁指导,只能硬着头皮自己读懂它。

几乎每一个函数调用、每一个tcp选项我都Google了一遍,一边查资料一边写注释,因为是框架,逻辑比较复杂,我画流程图、写总结用了两本草稿本,这个时候觉得纸比电脑好用太多。

一个月左右,我从gcc都不会用,到能把80%经常用到的模块原理和流程复述出来。应该没人会知道,之前我连TCP和UDP的区别都不清楚。

我以前也尝试过很多次,去阅读一些开源项目,但往往看到一半就觉得太难、无聊而看不下去。

现在我明白,以前说到底是动力不足。如果有一份不得不读的代码,用好Google和纸,哪怕是汇编,也是可以读懂的。
21grams
2014-04-25 18:29:51 +08:00
首先

需要
alexapollo
2014-04-25 18:34:00 +08:00
RTFSC
alexapollo
2014-04-25 18:35:47 +08:00
看一个东西,一般都要循序渐进。

先了解它的整体架构,搞清楚为什么要用这样的架构;
然后再了解架构中的各个组件,组件提供的主要功能与各个组件之间的交互;
然后深入组件中的某个模块,分析模块的用途,理解模块所涉及的理论;
最后才是看模块中的代码,分析代码流程,交互走向,验证之前的分析,得到具体结论。

四步做完,基本上就可以假冒相应软件的作者了。
tonyup
2014-04-25 18:39:20 +08:00
@simpx 有相同感受。当遇到某些冷门问题发现Google无力的时候,这时只能找相关源码来看了,由于需求强烈(工作需要),这时看源码的感觉/态度会完全不同
gujianbo
2014-04-25 18:41:16 +08:00
@simpx 谢谢大神,解答的太赞了
leyle
2014-04-25 18:50:35 +08:00
可以尝试从小工具开始,比如wget aria2c axel less more ls ,我就是从axel 开始的,刚开始时,连strcpy()都要man 一下,后面读的越多,笔记做的越多,了解的越多,速度就上来了,对软件,写法,一些逻辑,都有了进一步的理解了,就尝试阅读更复杂一些的软件代码了
shenmimu
2014-04-25 18:54:04 +08:00
@Pixeller 啊你们的头像都太萌啦 我脸盲

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/110033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX