如何快速阅读一个大工程

最近觉得看一个新SLAM工程是一个极其困难、低效的事情,决定研究一下拿到一份源码如何快速实现demo的调通+理解整个工程的框架+对可改进点部分的梳理

1.跑通源码

①找到源码地址;
②源码所需依赖安装,一般大的涉及ROS、CMAKE、Cpp、Python、Opencv等主要工具的安装和版本匹配,再细一点会有Ceres、Eigen等库安装,深度学习项目需要的可能会更多,安装所需要版本的第三方代码并使得各个依赖之间相互满足有时候是跑通一个工程的关键和难点;
🌂编译安装,这一步一般原作者都会给出操作流程;
④demo调试,大多数代码会给出测试的demo,当你跑通demo之后就说明源码编译完成啦!

2.整理代码框架

可能很多同学会像我最开始拿到一份大代码一样,完全不知道从何下手,或者总是随着阅读的深入而陷入某种不必要的细节里,导致对代码及工程的阅读上很慢,理解上很松散。在梳理代码框架的时候我有几个个人的建议:

2.1 如何下手?

任何代码,任何代码都是从一些main函数开始运行的(main函数可能有多个,它们对应地实现了不同的功能),找到你想要了解的main函数,以他为根节点一点一点地深挖下去,可以帮助你快速建立起对一份大代码框架的认识,同时建议一边阅读一边整理思维导图,人脑是无法记住整个框架的。
请添加图片描述

2.2 如何不像一只无头苍蝇一样阅读?

其实工程的阅读也有深度优先和广度优先,觉得在阅读时总是跳来跳去而感到一团乱麻的同学往往采用的是深度优先的方法,应当采取广度优先的方法,这也是阅读面向对象的代码合情合理的方式,先了解对象的大概情况,大致了解全局后在深入剖析对象。
广度优先:对于一份巨大的工程,推荐并强烈建议采用广度优先的阅读方法。广度优先即为对于当前阅读的函数,其会调用一些其他函数方法,在阅读时对于这些调用的方法不做深入阅读,只需知道其实现了什么功能(函数名+.h中的注释文档会对你非常有帮助),这样就可以让我们理解当前函数实现了什么功能。举个例子:
请添加图片描述
FindInitialImagePair函数使用了三个函数(细节的中间过程略过了),我们只看这三个函数的大概功能,确定FindInitialImagePair函数的功能为:以这样一个流程找到初始的一对图片,到此即可完成此函数的阅读转而去看其他使用到的函数啦。
当我们完成同一个深度内所有函数的阅读后,我们即对整个工程的框架有了当前深度对应的认识,此时可以按照感兴趣的点往更深的一层阅读。
记住:阅读一个工程先固定深度,按照广度完成当前深度的阅读,即可对工程的框架有当前深度的一个认识,然后继续往深层阅读,你对工程的理解就会一层一层的更加深入和详细。

深度优先
对于一个函数的内容不断地深挖,就像把用到的函数内容直接粘贴在应用的地方(相当于把所有函数都看成inliner函数),最后函数在你眼里就是一个巨大的由基本语法组成没有任何函数调用的代码块。这样阅读对于小工程适用,但是在阅读大工程的时候总是会“阅读了一点,忘记了一点”,不建议。

2.3 代码中哪些是文章的内容,怎么针对性阅读?

其实在论文中,一篇文章具体内容可能占据了很大的一部分,但是在代码层面却仅仅占据了一小部分。原因之一是作者往往是在一个已有工作结果上做出的提升和扩充,这个扩充可能很有意义但是在量上和前人的积累相比总是会显得“少”的。如果要针对性的阅读,可以从一下几个角度入手:
数据结构上的改进
很多文章会从数据结构上对已有的结果做改进,想一想,数据的改进在使用的时候肯定在数据存入的时候就完成了,又或者在需要的时候调用数据所在类的方法直接计算,程序员一般都会把他写在数据所在的类

流程上的改进
流程上的改进往往是在一些较浅的深度上对函数的新增、调用顺序的调换、循环的优化、判断条件的优化等

🌂算法上的改进
作者在文章中会用公式花大量的语言解释自己提出的算法的过程和原理,但是那些公式在代码层面往往只是小小的几行而已(但是促成这行代码的判断和数据处理可能占据很大的内容),只需在作者所描述的功能所指向的代码块找到即可

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值