如何高效阅读代码



如何有效的阅读代码

1.从弄清楚目标开始,逐层理解目标系统的设计思路到最后如何实现

2.换位思考;自己可以针对目标,提出解决思路,进一步得到解决方案,再分解成若干模块,逐层分解

主要的技巧:

1,自顶向下,从目标代码的实现的功能和解决的需求,逐层分解问题,自顶向下

2,提纲挈领,摸清框架而避免在某个细节停留,(对细节有疑惑的,可以记录下来,有时间在探索)

3,广度优先,在每个层面读一遍(比如按照以下步骤:第1步:掌握主要的几个模块和它们之前的关系;第2步:主要看几个重要的类;第3步:在看到方法或者函数层面),确保广度优先而不是深度优先

4,理清目的,分离职责,在不同层面弄清楚每个模块,类,方法的之策,而不是如何实现这个目的/职责。因为任何算法都是为特定的职责服务的,弄清楚目的是什么,而不是如何实现的目的,弄清楚why而不是how

 

高效阅读代码的能力背后:

1.大脑的运行方式--=----和cpu很像,每次进入一个新的层面,都会暂停当前的工作,所以会造成混乱。应该借助uml的工具类图和时序图来理清思路

2.重点在于目标和职责是什么,然后才是如何实现目标和职责。任务系统都是为了解决问题而存在的,如何解决体现在于具体方案,代码只是方案的实现。而解决方案在不同层面体现为功能模块的结合,方法的组合。所以需要自顶向下的分析问题,解决问题的思路,在每个层面都搞清楚脉络(广度优先)

3,克制技术冲动,做开发的一般看到一个功能都会先想到这个效果是怎么实现的,但是请克制技术冲动。

首要的问题是why--为何要这么实现?那一定是为了某个目标,职责服务的,所以首先忽略how,先搞清楚他们的目标和职责,暂时忽略细节。等都弄清楚了,再来仔细了解细节


================================================================================================1. 要建立层次和结构

看代码不是看小说,线性地往下看就行了。看代码是为了理解代码,在脑子里建立起源代码背后的层次和结构的映射。为此,在开始分析项目之初,就要明确代码的子项目,包(名称空间),类的层次和结构,主要由哪些包构成,每个包大致做什么用。主要的类有哪些,各自的大致职责是什么。主要的类里面,又有哪些主要的方法。


 


2. 要抓住主干


任何的项目,有相当的代码是用来做一些琐碎的,事务性的事情的。要高效地理解和把握代码,我们就要把握主干。对于代码中的一些主要方法,或者流程,可以梳理出它们的主要步骤,次要的东西可以忽略不管,需要的时候再关注。


 


3. 要形成文档


如前面的几位答友所说,人脑子不善于记住方法间的进进出出之类的东西,在我们分析这些东西的同时,用一种有效的方式,把分析的结果记录下来,既保存了工作成果,更重要的是,帮助我们更容易进行分析,向深挖的时候,知道现在自己在哪里,向回退的时候,又退得出来,不至于迷路。类图,序列图,都是有用的文档形式,也可以用自己定义的更灵活的图表。好记性不如烂笔头,勤快动脑同时也勤快动手,看代码会容易很多。


4. 要合理运用各种可用手段


静态分析,当然是分析代码的基本手段;但是除了静态分析,如果你的代码也是可以运行的,运行它,观察它的调用堆栈,LOG,或者用调试工具进行跟踪。对于那些主要的方法,流程,有必要用动态跟踪的方式,弄清楚它的过程。这也会比静态分析更直接,更快地告诉你它到底走过哪些路径,执行了哪些方法



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值