怎么阅读学习源代码

2020-02-09 23:18:33 +08:00
 lynn0977
想通过阅读一些开源项目,提高自己的知识水平,怎样学比较高效,希望大家分享一下自己的方法和经验。
7650 次点击
所在节点    Python
28 条回复
suotm
2020-02-10 00:09:39 +08:00
刚好在看一篇博客,推荐你去看一下,关键词是:
Become a Better Developer by Reading Source Code Steve Gordon
secondwtq
2020-02-10 00:23:02 +08:00
你问对时候了,新鲜出炉的: http://www.yinwang.org/blog-cn/2020/02/05/how-to-read-code
webshe11
2020-02-10 00:23:43 +08:00
恰好我最近也看到一篇博客: https://www.yinwang.org/blog-cn/2020/02/05/how-to-read-code (水深火热)
webshe11
2020-02-10 00:24:14 +08:00
@secondwtq 哇 我们几乎同时发的
wanguorui123
2020-02-10 00:25:13 +08:00
单步调试
AX5N
2020-02-10 02:32:19 +08:00
王垠这个不适合普通人(菜鸟)看,普通人看别人源代码主要是为了提高见识,对自己的知识盲区查缺补漏。
AX5N
2020-02-10 02:32:54 +08:00
比如网银说
```
很多人误以为看大型项目可以提升自己,而没有看到大型项目不过是几十行核心代码的扩展,很多部分是低水平重复。几十行平庸甚至晦涩的代码,重复一万次,就成了几十万行。看那些低水平重复的部分,是得不到什么提升的。
```
AX5N
2020-02-10 02:33:48 +08:00
比如王垠说

很多人误以为看大型项目可以提升自己,而没有看到大型项目不过是几十行核心代码的扩展,很多部分是低水平重复。几十行平庸甚至晦涩的代码,重复一万次,就成了几十万行。看那些低水平重复的部分,是得不到什么提升的。

普通人都不知道什么叫做低水平重复,什么叫做垃圾代码,不去看看怎么知道呢。
IRuNamu
2020-02-10 02:39:36 +08:00
話說 c++單步調試下指針亂跳根本看不過來的清況下 有什么好方法看源碼
OldPanda
2020-02-10 07:27:36 +08:00
刻意的看开源代码只会让自己痛苦,花费大量时间精力而不知所得,我一般会带着几分好奇和几分兴趣,比如说自己写的某个小项目用到了,或者突然对某一块知识感到很有兴趣,找到优秀开源代码的片段,详细推敲别人是如何实现的,为什么这样实现,感觉这样比“别人都说这个项目好,那我也来看看”从而阅读源码的效果好得多
jie170601
2020-02-10 07:29:44 +08:00
同求好方法,断点调试可以搞清楚某些细节的具体实现,但难把握整体,又没有文档,怎么看比较好
tianshilei1992
2020-02-10 08:03:44 +08:00
王垠有一点说的我很赞同,就是得先知道这个代码是做什么的,再去看具体的代码。但是很多时候这个前提并不是那么显然,也不是那么容易得到,这个时候我觉得就只能反复的看,像编译器的 bootstrap 一样,这一次理解这么一点,然后和之前理解的结合起来再看下一遍。
由于我的研究方向就是编译器,所以最近半年一直在读 LLVM 和 OpenMP 的代码。一开始的时候先 gdb 加断点看调用栈,然后再从这一点开始慢慢展开,一遍遍看,慢慢就来感觉了。有了这个感觉再从一个更高角度再去看,之前不理解的部分慢慢就又能懂一些了。这个过程就是一直不停迭代一直到全部理解。颇有一种深度学习那不停迭代最后收敛的感觉。
levelworm
2020-02-10 09:31:15 +08:00
我觉得对于我这样的初学者来说,比较痛苦的就是怎么挑项目。其实代码质量好坏也无所谓了,反正太坏的也看不下去。但是主要的困难在于选取和自己水平恰当的源代码。也许初学者本来也不用看代码,还是需要有一定水平才需要看。
zfish
2020-02-10 09:34:29 +08:00
推荐使用 sourcetrail 阅读,体验还不错,对 C/C++/Java/Python 语言支持,其他语言还不行
hyy1995
2020-02-10 09:39:51 +08:00
我是找别人的技术博客看,先搞懂技术点的实现。

如果一上来就直接去看源码,肯定蒙蔽。源码经过了好多年的迭代,里面有很多代码是补丁,或者是为了兼容性,真正的核心代码片段不是很容易单独提出来看。
azcvcza
2020-02-10 10:01:06 +08:00
针对问题去看吧。想想这些框架拿出来都是为了解决什么问题,如果不用框架你又会怎么解决,尝试造最小化轮子去试验功能,带着问题和解决方案去看估计会有点成效
Leigg
2020-02-10 10:06:50 +08:00
先学会这个东西怎么用,并且足够好用,再从你使用的地方进入源码开始看。
securityCoding
2020-02-10 10:50:17 +08:00
一定带着问题看代码,脑子里面没有疑问看代码是没有作用的,反复复盘思考自己真的理解了吗?核心思路能自己独立实现一遍吗?
netty
2020-02-10 10:57:38 +08:00
1.了解一下整体架构,相应的组成部分,以及各模板的大概作用。
2.明确你阅读源码是为了目的?
不要回答说就是为了学习,学习啥?太泛通常落实不了。容易失败,没有成就感,还受打击。

由点到面去学习,每次只选一个点。这样,目标明确了,难度降低了,最后看懂了还能获得成就感,进入下一关。
比如 1 )如何进行初始化 2 )如何监听端口 3 )如何实现单例 4 )如何动态扩容 5 )如何实现哈希
3.写个 demo,调用一下 API,感受一下
4.单步调试
5.总结执行流程和关键代码
qiumaoyuan
2020-02-10 11:01:37 +08:00

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

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

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

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

© 2021 V2EX