如何阅读源码?

"没有经验的技术差底子薄的初级程序员,如何阅读项目源码? "

"有人阅读过 mybatis 的源码吗 ?就看一个初始化过程就看的已经头晕眼花了,小伙伴们支支招吧!"

"源码应该怎么阅读,我曾经尝试阅读一些源码,例如alibaba的druid中sqlparser部分,spring-mvc,但是发现很吃力,都说debug是最好的阅读方式,我在debug时经常有跟丢的现象……就是走着走着感觉好像进入了一些我当前不太关注细枝末节。 "

。。。。。。

估计很多人都有这样的疑惑。

我非常能理解小伙伴们的痛苦,因为我也是这么痛苦着走过来的。

阅读优秀源码的好处想必大家都知道,学习别人优秀的设计,合理的抽象,简洁的代码...... 总之是好处多多。

但是真的把庞大的代码放到你的面前,就如同一个巨大的迷宫,要在其中东转西转寻出一条路来,把迷宫的整个结构搞清楚,理解核心思想,真心不容易。

在阅读由面向对象的语言如Java写的代码时,会发现接口和具体的实现经常对应不起来,不太清楚一个功能到底是怎么在哪个实现类中才能找到。 不像C语言,就是函数调用函数,相对还好点。

如果是动态语言如Ruby,Python, 一个变量的类型甚至都不容易知道,阅读的难度大大增加。

还有一个重要的原因,现在我们看到的源码基本上都经过若干年发展、经过很多人不断地完善的,枝枝蔓蔓非常多,魔鬼都在细节中。 阅读的时候很容易陷进去, 看了几十层函数调用以后,就彻底懵了,就放弃了: 甭管你把源码吹得天花乱坠, 老子再也不看了。

阅读 2.8k
1 个回答

我不是什么资深程序猿,但还是想稍微分享一下经验吧。

一个结构合理的项目

  1. 尽可能找到一个合适的源代码阅读器/编辑器/IDE;
  2. 如果这个项目使用了某个框架,那么先去了解这个框架;
  3. 找到这个项目的入口(如果有的话),大致浏览一遍;
  4. 想象某个使用场景,人肉单步调试(当然可以的话拿debugger单步调试也行),了解这个项目最外层每一步都干了什么(不需要知道怎么实现),有必要的话还可以画一下草图,加深自己对程序流程和结构的理解。看不懂的地方可以先跳过,但跳过这一步不能影响你对整体的理解,总体理解得差不多了后就可以进行下一步
  5. 重新进行上一步,但每一步要“step into”深入这个项目,同时若上一步中还有不理解的地方,还要尝试在深入的过程中寻找答案。有时候在外层挖的坑会在内层填上。

差不多就是酱紫啦

一个乱七八糟的项目

  1. 尽可能找到一个合适的源代码阅读器/编辑器/IDE;
  2. 抛开源码,整理出这个项目的需求和实现的功能,思考如果要你实现的话,你会如何实现;
  3. 尝试进行“一个结构合理的项目”中的步骤,祈祷作者的想法和你的想法一样。

GCC

如果你在看GCC源码的话,当我没说。

我瞄过一眼GCC源码,甚至妄图把它们clone下来。

技不如人,甘拜下风。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进