美文网首页
阅读代码

阅读代码

作者: Obj_Arr | 来源:发表于2022-08-29 11:22 被阅读0次

看代码是很让人头大的事情,尤其是篇幅很长,依赖关系复杂的时候。一般来说,编译器会通过各种方式理清代码的逻辑,比如不同的颜色区分不同的关键词和数据类型,又比如对循环结构和分支结构的收缩与展开,通过一定的规定,编程语言本身也会提供一些便利,比如对特定功能块的封装,数据型封装成类,数据处理和转换型封装为方法。
但是,即使已经了解了这么多的规则和便利,想要读明白一段代码依然很困难,这就是具体的实现逻辑,一个变量在开头被定义,然后在中间某个位置被使用,这之间没有明显的关联,需要眼睛上下寻找,有的编译器中通过选中某一个变量,可以标记出所有出现的位置,算是做了一些优化,但是,标的多了也容易看花眼。
这个阅读代码的问题确实很难解决,而且对应于不同的使用场景,代码的书写具有不同的惯例,有的直接就是定义变量,处理数据,有的需要首先配置环境状态参数,然后定义变量,处理数据,还有的变量被封装起来,变成一个类,然后从这个类中提取变量,处理数据。
不过,总体上来说还是有迹可循的,通过脑海中的虚拟图线表,可以简化或者形象化一些过程,比如说函数定义过程,比如循环处理数据过程,还有变量的使用过程。之所以使用脑海中的想象而不用编译器,是因为手头不一定有编译器,即使有,估计也懒得去打开。就像写数学题一样,能不动手就不动手。


大龙10-转向感知器-文中代码片段

虽然通过线条组织出了逻辑关系,不过还是比较乱的,想象的话,就可以专注于一部分,然后切换注意力,再关注其余部分。总体上,可以看到

  • velocity是按照声名,赋初值,变化,限制变化而改变的。
  • acceleration也是声名,赋初值,作用于velocity,变化,被force作用。
  • location则是声名,赋初值(被x,y作用),被velocity作用。

其实,有时候想想,读一段代码到底是为了什么呢?首先是为了获得初步理解,而不是具体的实现细节,所以,需要的不是把所有的运算细节纳入,而仅仅把所依赖的变量纳入,于是,变量的改变就呈现出与其他变量的相互作用,这就是最关键的逻辑,把握住这个逻辑后,再进行细化,就容易很多,最后,把所有的变量变化细节理解之后,整段程序在基础的层面就被理解了。
所以,这段代码的关键部分,就是三个变量的变化,以及他们的相互作用。


image.png

黄线为变量的存在轨迹,绿圈是变化,红线是与其他变量的相互作用。仅为示意图。对于一些规模不大,变量的个数以及变化比较少的代码而言,这个方法应该是比较好用的。
对于大型的代码而言,本质上也差不多,只不过层级增加了,将小的代码视为功能块,而不去探究细节,甚至将大型程序视为一个功能块,为了一个更加复杂的目标服务。这也是封装的目的,提高抽象性,屏蔽细节,方便理解和使用。这种层级结构要展开说篇幅也会很长,就这样结束吧。


这种抓大放小的分析方法,其实是从物理中学来的,很多的物理公式非常复杂,如果一个一个的去寻找来源,花半天时间都搞不明白,所以需要从整体上理解,视为一个一个的功能块,这个是正比,这个是积分,那个是比值,先把基本逻辑搞清楚,具体的细化留待需要时进行,这样就能迅速抓到本质。不至于陷入公式互相引用导致的混乱中。
可以升华一下,所有的逻辑构造,本质上就是状态与变化,也可以视为参数与数值改变,物体与物体形态转变,这种说法并不是凭空而来的,因为逻辑结构可以通过集合论实现,集合本身就是参数的集合,集合函数就是参数的变化。在逻辑的视角下,世界是一个规模庞大的参数集,世界的演化就对应于参数集中某些参数的变化,对于具体的应用场景,这个参数集规模就小了很多,可以被人们掌握,或者通过思维,或者通过计算机等设备,程序就可以视为这种逻辑结构的固化,自然可以通过参数和参数变化完全描述。只不过,正如前面所指出的,具体的实现依然需要花费大量时间去熟悉,采用的抽象层级不同,用时也不同。

相关文章

  • 阅读代码

    2018-05-06 阅读代码 通读代码,做好标记: 函数以及函数的功能。 每个变量的初始赋值。 每个在程序的各个...

  • 阅读代码

    今天想准备3D实验的训练数据集,但是之前看过的代码已经记不清了。这样的问题一直存在,别人的代码啃过之后以为懂了,过...

  • 阅读代码

    看代码是很让人头大的事情,尤其是篇幅很长,依赖关系复杂的时候。一般来说,编译器会通过各种方式理清代码的逻辑,比如不...

  • Mantle 源代码阅读笔记 一

    Mantle 源代码阅读笔记 一 Mantle 源代码阅读笔记 一

  • 阅读散记(1)

    《代码阅读方法与实践》(中文版)——第一章 导论 为什么要阅读代码? 将代码作为文献 了解代码的工作方式 维护代码...

  • Vue2源码阅读(一):响应式原理

    一、阅读准备 阅读Vue.js代码前,需要准备: 仓库代码,方便加注释和多段关键代码可以同时阅读 打包后未压缩的代...

  • flag 代码阅读

    读 mapillary 的 street viewer 代码。 读 sfm pipeline 的 viewer 代...

  • 阅读代码之我见

    阅读代码之我见 学习编程离不开读源码阶段,阅读源码,你会发现很多新的架构包括库,积累技术要点,优化自己的书写代码模...

  • SDWebImage代码阅读

    SDWebImageManager 负责管理图片的检查、下载,以及对这些操作进行管理。 SDImageCache ...

  • 代码阅读方式

    我们经常需要主动或被动的阅读他人的源代码,理清各个类的作用及如何组织的,从而为修改或扩展原有的功能做准备。 尊重他...

网友评论

      本文标题:阅读代码

      本文链接:https://www.haomeiwen.com/subject/ksmhnrtx.html