登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

代码阅读  

2009-02-21 11:07:51|  分类: 技术积累 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    我谈下我对代码阅读的一些感受吧。最早接触比较大块的项目是2006年暑假做电子设计大赛时看H.264视频压缩算法的源码。JM版的纯C实现,其中印象最深刻的是看到了变态的int******* p;这样的用法,好家伙,7个星号。大代码的阅读确实要有一定的技巧,否则数万行的代码在手里不知道从何下手确实很郁闷。

    首先应该查阅代码相关业务的大量文档,原理性的东西一定要先明白。比如我今年做的ICTCLAS的汉语分词,对这点就有很深的感受。不知道什么是汉语分词,不知道汉语分词基本原理前是很难通过代码领会到这些思想的。所以,应先从各种途径获得代码相关业务的知识,明白其工作原理和流程,对该业务先有个整体感性的认识。

    接下来应该看下代码的文件夹结构,看看readme之类的介绍性文字,看看每个文件夹里面大概都是啥东西,哪些有用哪些是垃圾应该差不多能分辨出来了。

    该动手了。找个编译器,把代码编通,然后让它跑起来。尽快的让工程跑起来,这样才能对代码的工作效果有进一步的感性认识,对后面的代码理解有很重要的作用。

    然后找个合适的看代码的工具。如果你在Win下工作,可能会使用VS,我也喜欢这个工具。如果是C、C++的代码,可以装上VA这个强大的涡轮发动机。看下解决方案中有多少个项目,每个项目大概是干啥的,项目的编译形式是什么(exe,lib or dll)。接下来应该大概分析一下项目的依赖顺序,知道那些项目是整个解决方案最基本的,那些是比较高层的。这样看代码的时候就知道这个层次关系了。至于从底层的项目开始看起还是从顶层的开始看起,那就看实际需要和个人习惯了。

    看的时候不要将精力过多的放在具体的实现和算法上。应该扫扫头文件,扫扫数据结构,扫扫签名。这样慢慢的从上而下的去理解。

    大概的框架有个概念后就启动调试器,跟流程,看看代码是怎么跑起来的。哪个项目调哪个项目,类之间,函数之间的调用流程大概是怎样的。不用看的太细,只要有个大概的印象就可以了。

    最后关注点才是那些桃核一样的核心算法。这些算法的理解一般都比较难,要仔细的推敲,有时候可能还要参考一些高等的资料。这时候需要的是耐心,当然也是考验你内力的时候。

    总体上说,代码阅读应该自顶向下,由整体到细节的去理解。一个一个文件按顺序仔细的看是低效的。看程序毕竟不是看小说,没必要那么仔细,尽可以一目十行。再就是要明白代码不是一轮就可以看的明明白白清清楚楚的,可能大概扫一遍之后有些收获,那就再看一遍,看的时候把关注点调一下,看上次不该看而这次该看的东西(晕,我说了句啥话),这样一轮一轮的理解一轮一轮的看对代码和业务的理解也就慢慢的深刻了。

    学习写软件,我觉得归根到底就是一句话:学习“抓住事物的主要矛盾”。也就是要在合适的时候做合适的事情。比如看代码,该看整体的时候要看整体,该看细节的时候要看细节。若把握不当,可能就事倍功半了。再拿设计来讲,该考虑需求的时候别想着设计,该设计的时候也就别想着实现,别想着这个if怎么样那个switch怎么样。只要在合适的阶段去做合适的事情,控制好自己,控制好项目中其他的人,这样项目才能做好。(谈大了,鄙视我不?呵呵)

    最后浓缩:自顶向下,逐步求精。

    关于代码阅读和软件设计你肯定也有自己的见解,欢迎拍砖,欢迎鄙视啊。

 

 

秒大刀2008年12月3日写给杨婷

  评论这张
 
阅读(834)| 评论(3)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018