1
shenmimu 2014-04-25 17:10:00 +08:00
|
2
Pixeller 2014-04-25 17:10:07 +08:00
- -你写的这个也很难看懂.
|
3
shenmimu 2014-04-25 17:10:20 +08:00
|
8
coolcfan 2014-04-25 17:20:26 +08:00
没有必要一上来就看这么大的吧,有很多精巧的小项目的。
|
9
Mutoo 2014-04-25 17:25:34 +08:00 3
|
10
xdeng 2014-04-25 17:31:33 +08:00
你需要 Source Insight 3.5
|
11
simpx 2014-04-25 17:45:57 +08:00
分享一下个人经验总结,就是硬着头皮,逐个函数、逐个文件的理解过去,遇到不懂的就google,懂了的就在旁边写上注释,碰到复杂逻辑,拿出草稿纸画流程图,从函数、文件到模块,最后慢慢能复述出大致的逻辑和经典的细节。
说白了,没有看不懂的代码,只有不够强的动力。 |
12
aszxqw 2014-04-25 17:47:46 +08:00 2
本来就是很难啃的东西。
如果想顺利的看懂一般需要几个条件,就拿nginx来说吧。 1. 熟悉c语言 2. 平时就是在开发网络服务 3. 经常使用nginx。 之前有个同事对nginx源码熟读了很多,原因就是他就是专门开发server的,而且他读源码的时候经常修改nginx源码调试跑看看效果。 如果完全不是一个方向的话,比如如果你是搞前端js的话,感觉硬啃server源码恐怕很难,建议还是看别人的源码详解或者之类的读书笔记看起。 |
13
simpx 2014-04-25 18:08:02 +08:00 15
补充一下经历,来公司前我的经验局限于web后端开发,对系统底层了解很浅,也没有C相关经验。
工作内容是开发维护一个机制类似nginx,c实现的网络框架,涉及到epoll、socket、并发等。因为是内部项目,没有文档,也没有谁指导,只能硬着头皮自己读懂它。 几乎每一个函数调用、每一个tcp选项我都Google了一遍,一边查资料一边写注释,因为是框架,逻辑比较复杂,我画流程图、写总结用了两本草稿本,这个时候觉得纸比电脑好用太多。 一个月左右,我从gcc都不会用,到能把80%经常用到的模块原理和流程复述出来。应该没人会知道,之前我连TCP和UDP的区别都不清楚。 我以前也尝试过很多次,去阅读一些开源项目,但往往看到一半就觉得太难、无聊而看不下去。 现在我明白,以前说到底是动力不足。如果有一份不得不读的代码,用好Google和纸,哪怕是汇编,也是可以读懂的。 |
14
21grams 2014-04-25 18:29:51 +08:00 4
首先
你 需要 看 |
15
alexapollo 2014-04-25 18:34:00 +08:00
RTFSC
|
16
alexapollo 2014-04-25 18:35:47 +08:00 2
看一个东西,一般都要循序渐进。
先了解它的整体架构,搞清楚为什么要用这样的架构; 然后再了解架构中的各个组件,组件提供的主要功能与各个组件之间的交互; 然后深入组件中的某个模块,分析模块的用途,理解模块所涉及的理论; 最后才是看模块中的代码,分析代码流程,交互走向,验证之前的分析,得到具体结论。 四步做完,基本上就可以假冒相应软件的作者了。 |
17
tonyup 2014-04-25 18:39:20 +08:00
@simpx 有相同感受。当遇到某些冷门问题发现Google无力的时候,这时只能找相关源码来看了,由于需求强烈(工作需要),这时看源码的感觉/态度会完全不同
|
19
leyle 2014-04-25 18:50:35 +08:00 via Android
可以尝试从小工具开始,比如wget aria2c axel less more ls ,我就是从axel 开始的,刚开始时,连strcpy()都要man 一下,后面读的越多,笔记做的越多,了解的越多,速度就上来了,对软件,写法,一些逻辑,都有了进一步的理解了,就尝试阅读更复杂一些的软件代码了
|
21
PotatoBrother 2014-04-25 19:05:51 +08:00
学习你想要看懂的项目的语言
|
22
Akagi201 2014-04-25 19:56:22 +08:00 1
上面都太牛了, 我告诉lz吧, 我应届毕业然后在公司做嵌入式开发,主要是网络编程多线程这些, 4000多个文件吧(包括开源代码), 花了7个月才搞懂, 自己增减模块. lz自己掂量着看吧, 呵呵, 不过我现在很"牛X", 自己创业单干无压力, 呵呵, 我觉得起步慢点好, 当然我是比较稳的类型
|
26
Taivas 2014-04-25 22:14:23 +08:00
学习了。
|
29
hitsmaxft 2014-04-26 00:19:03 +08:00
1, 你功底不足
2, 你想太多 如果你想看懂优秀的作品, 首先你需要一定程度的"优秀" 所以你现在需要的就是好好学习, 多写代码多思考, 另外从不那么复杂的作品看起, 最好在2k以内, 把自己功底提升上去. |
30
greatghoul 2014-04-26 09:14:54 +08:00
如果目前的项目你看不懂,就找一个能看懂的看。
|
31
kehr 2014-04-26 17:30:16 +08:00
@alexapollo 说的很赞。但也有问题。
第一,开源项目很少有专门介绍架构设计的文档。(资历浅,这真没见过...)需要你自己在看源码的过程中逐步递进的理解,自己总结。 第二,「最后才是看模块中的代码」我觉得不能放在最后。alexapollo 的步骤说的很对,但是每一步并不是独立的。边看模块中的代码边理解模块的功能和与其它模块之间的交互,能够让自己对项目的结构更清晰。当然也不要一下通读全部,函数知道它的输入输出,模块知道它的功能,先建立起一个对项目的宏观认识。 说白了就是要照 alexapollo 说的几条来回倒腾,反复几遍,一定会有感觉的。 改一改源码,跑起来看看效果,都是不错的方法。 方法很多,贵在坚持。(我也就看过一个项目源码,当初很痛苦,现在很幸福。) |
32
alexapollo 2014-04-26 20:49:30 +08:00
@kehr
这个回复是copy自我的openstack知乎回答的……所以你可以对号入座 其实说起来就是自顶向下逐层展开,自底向上逐层归纳。 当然,如果能加入项目,直接contribute某一个模块,肯定是会更快的了解整个项目。 |
33
dopcn 2014-04-28 16:17:54 +08:00
扯远一点,提高情商就行
情商帮你在看到一大堆毫无头绪的代码时冷静下来,首先理智分析自己这样看是否必要,如有必要那就大问题化小,小问题化无问题。一切归咎于是否有能力在遇到困难时控制自己的情绪 |
36
anubiskong 2014-04-29 18:03:58 +08:00
先会用, 找到喜欢的项目, 从自己最了解的功能下手找到相关代码一头钻进去, 然后慢慢扩展到其他功能
|
37
zempty 2016-11-25 09:05:13 +08:00
首先把你的智商提上去,再把相关语言的基础打扎实。这个问题就不攻而破
|