V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
modkzs
V2EX  ›  程序员

如何提高源代码阅读技巧

  •  
  •   modkzs · 2015-06-14 22:02:04 +08:00 · 3600 次点击
    这是一个创建于 3240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,每次都是从API的调用入口开始看,感觉效率低速度慢。有没有什么有效地阅读技巧或者提高源代码阅读速度的方法?
    mouhong
        1
    mouhong  
       2015-06-14 23:42:46 +08:00   ❤️ 3
    我在v2ex的首个回复就破在这吧。我个人经验是这样:

    1. 首先要有个好用的工具,比如我用 Visual Studio,可以方便地在方法定义间快速切换等,这对代码阅读有极大帮助;

    2. 然后花几分钟时间对项目结构做个粗略浏览,随手点开几个文件混个脸熟,通常质量比较高的代码可读性比较好,这时光靠猜就能猜出不少文件/目录的用途。有时在阅读某个细节并被卡住时,会突然灵光一闪,好像哪里有个什么文件看起来和这有点关系,而这灵光一闪经常是来源于这个粗略浏览阶段;

    3. 看一下程序的入口做了什么事,同样也是留下个印象,因为入口处往往会注册很多东西,尤其在一些使用了依赖注入容器的项目,对依赖注入理解的比较好的开发者都会把依赖在容器中的注册放到程序入口处 (有人称它为 Composition Root 模式);

    4. 以上都是为了对整个项目有个“大局观”,当细致研究某个模块的实现时,貌似也只能从 API 入手了,但要避免过度深入细节,通常一个方法内又会调用很多其它的方法,支线上的方法调用不要深入,尽量只看主线,这样才能保持比较清醒的大脑。部分情况可以深入一些支线,这要自己灵活把握。

    如手上有纸笔,可以画些简单的树状图记录一下调用路径。以前我看代码是纯靠脑袋干记调用图,所以一旦这张图很大了后,大脑就会很紧张,只要上个厕所回来就会忘记一大半,或者办公室里谁突然开始讨论问题时也会打断我的思路 (所以我不喜欢在办公室上班),后来有纸笔的帮助后会好很多。

    5. 背后的理论基础很重要。如果对一个框架背后的理论很熟悉,那阅读起来就会比较顺利,比如某 MVC 框架,如果不知道 MVC 为何物,那会看得很折磨人的。涉及某些算法时就更惨了,有些算法背后对应着一个数学公式,而程序语言往往很难清楚地表示一个公式,这时就要先去把相对应的理论搞清楚了再回来看代码 (所以你要会出墙,会Google,顺便推荐一下 12vpn: https://my.anuson.com/aff.php?aff=864&redirect=https://getsetupfile.com/)。

    这时注释的重要性也体现出来了,对于复杂的逻辑,最好在注释中写清楚这么实现的原因 (当然,我也反对那种无意义的注释),幸运的是,知名开源项目代码的注释往往写得很好,通过阅读注释就能学到很多东西。

    6. 让调试器来帮忙。如果有办法在 IDE 中对源代码进行调试,那阅读效率会提高很多,因为很多细节肉眼时很难看出来的。

    7. 动力也很重要。我得承认我有点懒T_T,所以你要拿一堆代码给我,我看着看着可能就睡着了,但要是给我一堆代码,让我找出某个bug出现的原因,有了目标后效率就要高得多。

    以上是一些比较零散的总结,欢迎补充 :)
    podongfeng
        2
    podongfeng  
       2015-06-15 10:10:06 +08:00
    先整体看一下,了解整个工程的大致结构,看的时候不要过分纠结细节,先整体把握,再深入细节,这样会比较好,也能够让你一直看下去
    modkzs
        3
    modkzs  
    OP
       2015-06-15 15:48:06 +08:00
    @podongfeng 那个如果直接从hbase等大型的成熟开源应用开始合适么?还是从比较小的应用开始比较好?

    @mouhong 额,目前我需要看的东西原理大都比较简单,但是实现的话封装层数太多,总有一种不知道怎么下手的感觉
    mouhong
        4
    mouhong  
       2015-06-15 16:02:17 +08:00
    @modkzs

    “但是实现的话封装层数太多,总有一种不知道怎么下手的感觉”
    > 封装在实际的工程里还是难免的或必要的。一开始可能会比较困难,读多了应该就适应了。说起来还是工具很重要,我做 .NET ,经常也是要用 ILSpy 这样的反编译工具来帮忙,因为它可以比较直观地给你显示类继承结构,调用关系等。

    > hbase 要看情况啦,每个人的背景不一样,如果你平常研究很多数据库方面的东西,就上吧,要是能吃下大的,以后吃小的就完全不费力了。要不然就可以考虑找些小一点的先来 (比较容易找成就感)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1007 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:55 · PVG 02:55 · LAX 11:55 · JFK 14:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.