山东华信智原吧 关注:9贴子:58
  • 1回复贴,共1

山东华信智原 【干货分享】程序员想要高效读代码,看这里!

只看楼主收藏回复

各位程序员兄弟姐妹们,当你在看密密麻麻的代码的时候,当你试图从其中找出Bug的时候,当你面对大段函数的时候,是不是有种晕头转向,脑细胞不停狗带的感觉呢?今天,北京华信智原的小华来和大家一起get高效读代码技能!
在我们阅读面前的代码时,无非有一下几种目的:
1、纯粹学习;2、添加新功能;3、重构旧代码;4、修复他人的Bug
修复实际工作中帮别人修复Bug这种情形,十有八九你要遇到,无可逃避。所以,心理调试很重要。
为了学习去读源码,这是最愉快的最放松的。设定可检验的目标才会有收获,否则就会像走到大街上看见一美女擦肩而过那样,惊艳一下下,过后嘛关系嘛收获也没了。
其他的目的,重构旧代码、添加新功能,因为带有创造性,创造性的活动能给人带来强烈的愉悦,所以虽然这两种目的也有很多让人不爽的部分,不过想到我可以让一棵老树焕发青春,不爽也就慢慢弱下去了。
磨刀不误砍柴工,在阅读代码之前,我们需要备好必要的工具,以提高读码效率!小华推荐以下工具:
SourceInsight,最好的源码浏览工具,它能维护符号库,动态显示上下文,还能绘制调用关系图,最好的,没有之一。
1、纸质笔记本,随时记录心得和疑惑,随时绘制各种图(类图、时序图、框图),比UML工具快,也比Visio快
2、记事本、Notepad++、有道云笔记、为知笔记等,记录阅读源码过程中的关键点、心得体会、分析过程
3、Visio,用于绘制简单的框图,表述源码的模块划分、层次结构等
4、StartUML,用于最后绘制类图、时序图等,方便交流
5、扫描全能王(CamScanner),一款可以通过拍照达到扫描效果的App,可以用它扫描你在纸质笔记本上写下的文字,绘制的框图,分享给其他人,如果你懒得用软件绘制图标,那手绘之后扫描成电子档就最适合你了。
主要方法:
1、做好知识准备
前戏很重要,准备好了后面会有不断水到渠成的快感!
业务基础,每一份有实际意义的源码都离不开业务,必须先对业务有概念
技术基础,这个源码用什么语言,什么框架,什么第三方模块,都需要先有所了解
文档,尽量找到业务、需求、概要、详细等文档,帮助会很大,然而,我们经常面临的情况是,只有源码,只有源码,只有源码,片言只字的文档也无,所以只好坚信——源码是最好的文档。
人,搞明白哪个程序员维护过这份代码,方便后面不懂时请教,有时人家点一下顶你自己瞎琢磨一天。
2、建立层次和结构
看代码不是看小说,不会那么顺畅。为了理解代码,需要在脑子里建立起源代码背后的层次和结构映射。因此,在开始分析项目支出,就要明确代码的子项目,包,类的层次和结构,主要由哪些包构成,每个包大致做什么用。主要的类有哪些,各自的大致职责是什么。主要的类里面,又有哪些主要的方法。
3、要抓住主干
提纲挈领,对做很多事情都是提高效率的方式,很多代码是用来做一些琐碎的,事务性的事情的。要高效理解和把握代码,就必须抓住主干。对于代码中的一些主要方法,或者流程,可以梳理出它们的主要步骤,次要的东西可以忽略不管,需要的时候再关注。
4、要形成文档
好记性不如烂笔头,勤快动脑同时也勤快动手,看代码会容易很多。在我们分析这些东西的同时,用一种有效的方式,把分析的结果记录下来,既保存了工作成果,更重要的是,帮助我们更容易进行分析,向深挖的时候,知道现在自己在哪里,向回退的时候,又退得出来,不至于迷路。类图,序列图,都是有用的文档形式,也可以用自己定义的更灵活的图表。
可以选择适合自己的记录方式,小本本、软件皆可。用软件(Notepad++、有道笔记、为知笔记等)来记录有个坏处——必须切换屏幕,会在形式上中断代码阅读过程。
尽可能详细的记录,但不必看到什么记录什么,要间隔性的记录,比如弄明白了某个子模块的逻辑、某个类的作用、某些函数的调用关系时再记录,否则记录这个动作本身会打断思考。
每天工作结束,记录进度(弄明白的部分),记录疑问,记录第二天要弄明白什么东西,这样你的工作状态就入栈了,第二天来了很容易出栈,快速进入工作状态。
记录看到的优秀设计,提高审美,见贤思齐,自我成长。
5、要合理运用各种可用手段
静态分析,当然是分析代码的基本手段;但是除了静态分析,如果你的代码也是可以运行的,运行它,观察它的调用堆栈,LOG,或者用调试工具进行跟踪。对于那些主要的方法,流程,有必要用动态跟踪的方式,弄清楚它的过程。这也会比静态分析更直接,更快地告诉你它到底走过哪些路径,执行了哪些方法。
6、不断学习编程技巧
其实,这一点是大家都知道的,读代码读的慢无非是对常用函数和常用库,一些编程技巧不熟悉,就像读做英文阅读理解时,不认识单词,不懂语法一样,读得那个费劲啊!所有熟悉了常用库和编程技巧之后,很多代码扫一眼就明白了,思路不会被不懂得的语法或者编程技巧打断,一直停留在程序的逻辑上。
最后,小华不得不说:最好的方法还是要多看,多读,技巧方法再多,不读的话都是没用的,看了几十万个行规模的系统后再看其他系统就自然如履平地啦!所以,小伙伴们,要想读得快,现在就去读吧!加油!


IP属地:山东1楼2017-02-22 15:20回复


    IP属地:山东2楼2017-02-24 10:44
    回复