如何提高源代码阅读技巧 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
modkzs
V2EX    程序员

如何提高源代码阅读技巧

  •  
  •   modkzs 2015-06-1 22:02:04 +08:00 4218 次点击
    这是一个创建于 3778 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 要看情况啦,每个人的背景不一样,如果你平常研究很多数据库方面的东西,就上吧,要是能吃下大的,以后吃小的就完全不费力了。要不然就可以考虑找些小一点的先来 (比较容易找成就感)。
    关于     帮助文档     自助推广系统   /span>   博客     API     FAQ     Solana     2604 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 12:42 PVG 20:42 LAX 05:42 JFK 08:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86