• 阅读源码


    阅读源码
    首先,明白一块代码的语言层面的执行逻辑,比如知道这是一个for循环,这是一个if else语句等,知道什么情况下循环中进行了break;
    然后,需要弄明白一块代码中的执行逻辑使用的数据的结构,比如是list,是map,还是queue等,然后看下都执行了哪些数据结构的操作;
    然后,需要弄明白,这些结构理解存储的这些数据是映射了什么业务,它们背后的业务是什么样子的,或者说,它们用来表达什么样的一个数据集;
    然后,需要弄明白,这些数据结构中存储的数据从哪里来(在哪里被初始化或者赋值),要转换成什么样,即从哪里来,变成什么样,到哪里去。
    弄明白了以上几点,对这块代码的逻辑处理应该没什么大问题了,但是这还不够,因为这样阅读代码只是局部分析,最后
    要从大的更宏观的层面和角度来分析这块代码所处的位置和担任的功能角色。
    上面的心得,可以作为以后写阅读源码时的输出文档的一个指导;

    在局部分析的时候,可能会遇到问题,比如不知道这个对象是什么初始化的,结构是什么样的,结构中的数据都是什么,
    注意,这个时候不要中断整个代码块主流程的分析,阅读代码不是一遍就可以读懂的,需要多读几遍,但是每一遍要抓住每一遍需要关注的重点,
    比如第一遍是弄明白这块代码的整体执行流程,第二遍可以分析对象是怎么创建的,数据是如何存储的,中断条件的值是什么等等等等;
    千万不能大面流程没弄懂就去抠细节,这样容易焦虑和迷茫;总之,先大面整理流程,然后扣细节,知道重点,多读几遍;码读百遍其义自见;
    在看大面流程时,搞不懂的细节,先忽略(如果是写阅读代码的输出文档时,可以用少量语言简单捎带下),先把大面流程搞懂;大面流程弄明白后,再回过头仔细扣细节问题;

    在分析细节的时候,不能放过一丁点细节,这些细节包括函数的入参是什么,类型是什么,返回值是什么类型的等等细节,细节是魔鬼,但是用好了细节,
    可以让我们对代码有更好的理解;
    有一点需要注意:在分析源码的时候,一块分析完成后, 往往要往下面或者进入到方法里面去分析,如果接着往下面分析,即先走一个流程分析,那么
    就需要做好一段和一段的衔接,这样才能更好地完整地理解代码;另外,如果在一个地方停住后,进入到一个方法体里面分析,分析完成后,要调出方法,接着
    也进行当前流程继续分析,也是一样要通过语言来做下衔接,保持读者能够从你的文档中看出完整性,而不是零零散散的错觉;

    详细阅读代码,就是一行一行阅读,一个变量一个变量来分析,包括变量的类型,常量的值等等细节;这个才是细节;这关乎到你对代码的阅读深入程度;

    阅读代码, 这些都是一些照着代码读懂代码要做什么事情,做了什么事情,是怎么做的这些事情,这里并没有使用和掺杂批判思维,为什么呢?
    因为,我们要批判,首先我们得读懂代码啊。这是第一步,如果读不明白,你能确保你的批判一定是有意义的吗?

    如果在扣细节时,碰到一行代码,无法用更专业更精准的语言来说明白时,就贴出代码,简单说下就行,不要说太多,说多了反而更容易出乱子,这就是简单就好;

    代码也不一定都是对的,只是没有运行发现而已,所以在阅读分析代码时,我们不知道这块代码是否有问题,但是我们可以怀疑,可以标注下。等
    大面和核心细节都搞懂后,我们再去验证,再去分析;

    在写阅读代码的分析文档时,重复的语言或者重复的语言结构容易让人产生望文生义,因此,在需要强调或者需要重点关注的时候,或者为了更好的
    提醒读者或者为了让读者能够更好的阅读感受,你可以使用一些其他的衔接的语言表达,这个可以不受限,但是一定是和当前一大片的文档中不那么重复和重叠的语言或者语言表达手法和形式;

    如果你想学习一篇写的非常好的文章,那么就就得对这篇文章进行多读,读到能背更牛,哈哈。目的是弄懂文章的含义,并对文章阅读进行批注,写读后感,最最牛逼的地方就是在
    自己的项目中合理的使用它,运用它;
    好的代码也是这样,多读,读分析,并把批注和读后感写出来,静静品味;

    二八原则在很多地方都是适用的,在一个项目中也是这样的,很多代码都是重复的,类似的;因此,对于某个类似的一组代码块进行仔细地分析细节后,其他的类似的代码就可以一笔带过,简单指出
    不同点即可,但是对于差异较大的代码,还是需要做细节分析的。

    代码看不懂也有看不懂的原因,但是以下的方法可以让你能看懂代码
    首先,对于一个代码块,你先问自己是看不懂变量代表什么数据结构吗?如果是,那么就先看下这个变量的类型是
    在哪里定义的,然后看懂它的数据结构;
    如果你看不懂一个关键字或者一个其他一个库函数的调用,那么就先看这个函数是什么样子,实现的是什么功能,然后
    再回过头来看下当下的这块代码是如何使用这个库函数的;
    总之,就是哪里不懂,看哪里。重中之重,要确定你哪里不懂,不要乱了阵脚,轻易放弃;

    最后,你读懂了代码的执行逻辑,你看到数据结构,你知道数据是怎么处理和转换以及转移的,但是这还不够,
    因为你不知道代码为什么要这么写,你不知道代码背后的目的是什么,代码是为了要解决什么问题的,因此
    你还得了解算法,算法这个东西在这里是一个很宽泛的概念,它的意思就是你还要搞明白代码是做什么的,是为了达到什么样的一个目的;
    如果最后这些也搞懂了。这块代码你才是真的懂了;

  • 相关阅读:
    个人笔记 1.3.net 3.5新特性
    个人笔记 1.2.net 2.0新特性
    面试了,web标准能简单说下吗?w3c,,错了
    SEO网络营销热门关键词排名较好的反向链接
    eWebEditor在ie8下上传失效
    个人笔记 1.4.net 3.0新特性
    个人笔记 1.5.http状态值
    MOSS项目开发(5) 会议还是会议
    MOSS项目开发 周记(第二周)
    MOSS项目开发 周记(第五周)
  • 原文地址:https://www.cnblogs.com/big1987/p/9690063.html
Copyright © 2020-2023  润新知