炸毛:请问怎么读源码?

2019-12-27 18:22:00 +08:00
 yvettemuki

各位大佬,你们有没有什么读源代码的经验可以分享? 缘由:在读 mxgraph 源码的时候,一堆计算,好容易炸毛,关键是炸毛后还是一知半解,不会用,请问有什么好的读源码的方法 orz ?

5655 次点击
所在节点    机器学习
24 条回复
rimutuyuan
2019-12-27 18:25:39 +08:00
由简到难,由外到内,由大到小,由框架到细节
lazyfighter
2019-12-27 18:40:26 +08:00
先知道怎么用,然后在知道一个小功能怎么用,然后在知道一个小功能怎么用,然后在知道....................,终于到了最后,把这些小功能串起来就行了一个体系,你就知道这个东西是怎么设计的了,然后在体系的去看代码,你就知道了作者的写代码设计思路
adkudao
2019-12-27 18:44:18 +08:00
@lazyfighter 你的意思我懂了, 不过这样一来, 感觉稍微大点的项目就要读个大半年甚至几年了
lazyfighter
2019-12-27 18:48:31 +08:00
@adkudao 就我的经验而言,功能与功能之间都是相关联的,尤其是底层提供的基础能力,小功能只是在基础能力上面的扩展,所以入门就好.
noogler67
2019-12-27 18:58:59 +08:00
我不信楼主如果没学过编译器直接去看能看得懂编译器代码。我个人认为代码是其次的,里面的大体逻辑 /技术点 /算法是最重要的。如果你能明白大体逻辑 /技术点 /算法,代码就很容易。反之就很困难。所以我觉得还是得找一个老师教你,比如尝试看看源代码相关的讲解的书。免责声明:本人并无阅读源代码的经验,看得只是很简单的库(大体逻辑 /技术点 /算法都很简单的库)
CEBBCAT
2019-12-27 20:47:34 +08:00
@noogler67 “第一个中英翻译,是上帝赐下的吗?”
zjsxwc
2019-12-27 20:50:22 +08:00
首先是会用,用熟它先,不需要了解源码;
然后读最初的版本,一般最初的版本是最简单的;
再者是不断的通过 ide 打断点单步调试看看运行结果和自己的猜测是否一致
memcache
2019-12-27 20:55:13 +08:00
上面的大佬说了我想说的,还是要先用熟了,再去读
vvsmallv
2019-12-27 21:49:44 +08:00
@yvettemuki 不难啊 mxnet 主要代码在 src 目录 python perl 都是接口

src/operator 里实现 nn 的核心代码
nn 都是由最简单的运算符(operator)构成的, 比如 linear, conv;
src/operator/nn 里是由运算符构成的网络层,比如 fc, softmax 层;
src/operator/optimizer_* 是优化器,比如 SGD, Adam
其他都是更细节的东西了 nnpack 是用来优化加速计算的 还有分布式计算, 存储部分的实现

粗看 mxnet 的 operator 设计和 caffe 类似,不是 pytorch 那样自动求导的,而是自己写 Backward 部分

总之深度学习框架都很类似, mxnet 考虑到工业级部署所以代码量大点, 如果楼主已经熟悉了深度学习, 至少 operator 文件夹里能看明白的
sleepm
2019-12-27 21:58:27 +08:00
sourcegraph.com
先熟悉了用法,再去熟悉代码
ihciah
2019-12-27 23:15:12 +08:00
zhaogaz
2019-12-27 23:30:47 +08:00
我的建议是别读,建议你先搞清楚你为什么要读?你可以先考虑下,回复出来,我们再接着讨论。
zxCoder
2019-12-27 23:55:45 +08:00
作为一个菜鸡 我觉得读源码应该带有目的的去读比较好 比如我最近看巨硬的 seal 库,就是因为遇到了某些 bug,通过读源码才弄懂并解决的
yeya24
2019-12-28 00:55:58 +08:00
我读源码的话 比如什么函数看不懂 基本会去看它的单测 看看这个函数是怎么用的 实在不行就打断点吧 就是比较费时间
penguinWWY
2019-12-28 01:15:00 +08:00
第一步文档、README
第二步搞清楚构建过程,编译依赖
第三部执行 testcase、unittest,搞清楚模块的功能,输入输出,重点 API
第四步构造一份输入,从 main 开始执行,尝试调用指定的功能
SIGEV13
2019-12-28 06:44:45 +08:00
从测试开始看,最快上手
yvettemuki
2019-12-28 10:56:18 +08:00
@zjsxwc 问题是,在用,但是教学文档太不全了,遇到情况没办法只能看源码怎么做的,才会用(哭
yvettemuki
2019-12-28 10:59:03 +08:00
@vvsmallv 呃呃呃,我说的是 mxGraph,不是深度学习的,我是前端图形化的 O.O
fuckshiter
2019-12-28 11:00:48 +08:00
先想想为什么去读,读之前想想如果是自己该怎么实现,带着这个去读,对比自己的,这样我觉得比较好读一点
yvettemuki
2019-12-28 11:01:16 +08:00
@sleepm 6666 这个网站有点东西

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

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

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

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

© 2021 V2EX