转 如何快速看懂一个大型程序 http://blog.csdn.net/jysg9/article/details/24193181

 在软件研发过程中,我们经常碰到如下情况:许多学习开发的同学或在职的程序员都经常为拿到一个大型程序后,在短时间内无法快速读懂它而烦劳。当他们拿到一个大型程序后,他们便开始一句一句的阅读分析,夜以继日,就差悬梁刺股了,可结果依然不理想,往往进入以下状态: (1)花费了很长时间,也没有多大进展,与当时预计的日期相差甚远。 (2)由于周期较长,他们往往在重复阅读分析最初的极小部分。就像有的童鞋读书一样,几个月前读的是前两章,几个月后还是那两章,原地踏步踏。 (3)他们没法弄清楚程序的结构,就像在云里露里行走,看不清前方的路,后面已经走过的路也是迷惘模糊。     他们很痛苦,为什么会这样呢?久而久之便形成胆怯心理,当接手一个新功能新程序后,在士气上已经丢了几会,渐渐地丢了那股初出茅庐时的勇气。 (4)当拿到他人的程序后,都是想改的冲动,把它修改成自已风格的,即使还没有搞明白它们,依然在改。
    这样的状态对他们有深的影响:其一,任务不能如期完成,导致成本一再飙升。其二,不便于他们能力的提升,因为要能力提供往往需要去更多的研究他们实现的系统或优秀的开源代码。

 

   转载请注明原地址:http://blog.csdn.net/jysg9/article/details/24193181         下面说说如下快速读懂一个大型程序,谈一谈鄙人的见解: (1)先建好环境,让程序能运行,玩一遍     当你拿到一个程序后,即使你不看代码,你也应该知道它是干什么的吧!若它是干什么的都不知道,建议你不用看。因为程序中肯定有些功能逻辑的实现,干什么都不知道,则肯定没法看,放弃吧!     若你知道这个程序的大概功能。那么你先不用看代码,先把环境建立起来,想办法让程序运行一遍。在一般情况下,要做到这一点不难吧!     为什么我推荐将程序运行一遍呢?因为建立好的运行环境,一方面可以初步验证一下此程序的功能,以及正确性完整性,另一方面方面接下来的分析调试,通过加日志断点就可能了;同时面对这个大型程序,程序运行通了,能没有成熟感吗?能不愉悦吗?
(2)看想办法掌握程序的结构     对于开源项目,通过作者微博、Google、百度、PDSN、等找到程序的体系结构,通常情况下是能找到些资料的。即使情况差一点,也能找到星星点点,而这些星星点点对你的研究往往有很大的帮助。     若是公司内部的项目,则一般都有完整的文档。不要舍弃文档而便开始reading。我们看见许我程序员往往有这样的通病:当他们拿到一个程序员,便迫不急待的找main/WinMain,接下来如坐禅般一坐几个小时。
(3)先体系再细节;先平面再线点。     不要一开始便逐字逐句的看,这种方法是最低效的方法。这些童鞋想必在经前的做事过程中,往往是先了解各个点,再将点串也线,线串也面。他们直到最后才看清楚程序的面目,可能经过几个月才豁然开朗。整个过程如地狱般煎熬。     而有推荐的方法是:先整体再局部,先平面再线点。这样不解更高效,而且轻松啊。     这也是为什么总有那么几个天才程序员很空闲的原因之一。
    这里要说的是"大胆猜测,小心求证"。在阅读程序的过程中,我们往往对某一处或几处逻辑不肯定,可能是这样,也可能是那样。在这个岔路口,这时许多小伙伴们往往不知道如何选择了,停滞不前。其实这个时候不需要停留,大胆猜测,大胆往前走。走通了则证实你的猜测正确性。走不通则返回走另外一条路就可以了。
(4)断点调试、日志调试。     因为在最初我们已经将环境建立好了,那么当遇到一些难于理解的问题啊,结合断点调试便迎刃而解了。看见许多小伙伴经常在QQ问这问那,一些再简单不过的问题,break一下, demo一下,答案便出来了。     即然想做有前途的程序员,为什么不多动动你聪明的大脑,不多动动你高贵的双手呢。
(5)忽略细节,先前不要关注分支(支线)。     这一点很重要啊。许多小伙伴一开始就有不求甚解的精神(叫"洁癖"或更为恰当)。 他们的做法是从Main开始一字一句的解读,遇到一个问题,直到他认为这个问题已经处理不再是个问题的时候,才进行下一步。     这是一个做事方法问题:这样无疑会导致整个进度的延缓。若我们一开始只关注整体结构(一个宏观的大概的流程),而忽略掉那些细支末节,则很有利。     那些可以忽略呢? 如有些函数一看函数名便知道是干什么的,没有要一开始便深入。 有些系统中的分支(如某此特殊场景下才执行的逻辑)、不重要的功能,则一扫而过。
    先整体再局部,先宏观再微观,先流程再细节。
(6)其它 善用搜索引擎,试试切换不同的关键字,往往有意外的收获。
还有许多其它方法,有时间再扩展。
转载请注明原地址:http://blog.csdn.net/jysg9/article/details/24193181

posted @ 2014-09-05 10:45  crash88  阅读(274)  评论(0编辑  收藏  举报