打印
[牛人杂谈]

如何快速看懂一个大型程序

[复制链接]
708|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
玛尼玛尼哄|  楼主 | 2017-4-18 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在软件研发过程中,我们经常碰到如下情况:许多学习开发的同学或在职的程序员都经常为拿到一个大型程序后,在短时间内无法快速读懂它而烦劳。当他们拿到一个大型程序后,他们便开始一句一句的阅读分析,夜以继日,就差悬梁刺股了,可结果依然不理想,往往进入以下状态:
(1)花费了很长时间,也没有多大进展,与当时预计的日期相差甚远。
(2)由于周期较长,他们往往在重复阅读分析最初的极小部分。就像有的童鞋读书一样,几个月前读的是前两章,几个月后还是那两章,原地踏步踏。
(3)他们没法弄清楚程序的结构,就像在云里露里行走,看不清前方的路,后面已经走过的路也是迷惘模糊。
    他们很痛苦,为什么会这样呢?久而久之便形成胆怯心理,当接手一个新功能新程序后,在士气上已经丢了几会,渐渐地丢了那股初出茅庐时的勇气。
(4)当拿到他人的程序后,都是想改的冲动,把它修改成自已风格的,即使还没有搞明白它们,依然在改。

    这样的状态对他们有深的影响:其一,任务不能如期完成,导致成本一再飙升。其二,不便于他们能力的提升,因为要能力提供往往需要去更多的研究他们实现的系统或优秀的开源代码。
沙发
玛尼玛尼哄|  楼主 | 2017-4-18 16:42 | 只看该作者
下面说说如下快速读懂一个大型程序,谈一谈鄙人的见解:
(1)先建好环境,让程序能运行,玩一遍
    当你拿到一个程序后,即使你不看代码,你也应该知道它是干什么的吧!若它是干什么的都不知道,建议你不用看。因为程序中肯定有些功能逻辑的实现,干什么都不知道,则肯定没法看,放弃吧!
    若你知道这个程序的大概功能。那么你先不用看代码,先把环境建立起来,想办法让程序运行一遍。在一般情况下,要做到这一点不难吧!
    为什么我推荐将程序运行一遍呢?因为建立好的运行环境,一方面可以初步验证一下此程序的功能,以及正确性完整性,另一方面方面接下来的分析调试,通过加日志断点就可能了;同时面对这个大型程序,程序运行通了,能没有成熟感吗?能不愉悦吗?


(2)看想办法掌握程序的结构
    对于开源项目,通过作者微博、Google、百度、PDSN、等找到程序的体系结构,通常情况下是能找到些资料的。即使情况差一点,也能找到星星点点,而这些星星点点对你的研究往往有很大的帮助。
    若是公司内部的项目,则一般都有完整的文档。不要舍弃文档而便开始reading。我们看见许我程序员往往有这样的通病:当他们拿到一个程序员,便迫不急待的找main/WinMain,接下来如坐禅般一坐几个小时。

使用特权

评论回复
板凳
玛尼玛尼哄|  楼主 | 2017-4-18 17:46 | 只看该作者
(5)忽略细节,先前不要关注分支(支线)。
    这一点很重要啊。许多小伙伴一开始就有不求甚解的精神(叫"洁癖"或更为恰当)。
他们的做法是从Main开始一字一句的解读,遇到一个问题,直到他认为这个问题已经处理不再是个问题的时候,才进行下一步。
    这是一个做事方法问题:这样无疑会导致整个进度的延缓。若我们一开始只关注整体结构(一个宏观的大概的流程),而忽略掉那些细支末节,则很有利。
    那些可以忽略呢?
如有些函数一看函数名便知道是干什么的,没有要一开始便深入。
有些系统中的分支(如某此特殊场景下才执行的逻辑)、不重要的功能,则一扫而过。


    先整体再局部,先宏观再微观,先流程再细节。


(6)其它
善用搜索引擎,试试切换不同的关键字,往往有意外的收获。


还有许多其它方法,有时间再扩展。

使用特权

评论回复
地板
zhuomuniao110| | 2017-4-18 21:32 | 只看该作者
多看多练啊,要不睁眼黑

使用特权

评论回复
5
yiy| | 2017-4-18 22:07 | 只看该作者
最困难的就是读懂别人的代码,特别是那种注释很坑爹的。

使用特权

评论回复
6
xixi2017| | 2017-4-18 23:01 | 只看该作者
要会分块的看,不要一行一行的,看整体。

使用特权

评论回复
7
yiyigirl2014| | 2017-4-19 17:12 | 只看该作者
基本功要扎实,好多大程序里面有不少的指针应用。

使用特权

评论回复
8
mintspring| | 2017-4-19 17:57 | 只看该作者
代码调理要清晰,不要想着节约空间,现在的单片机不差空间。

使用特权

评论回复
9
wahahaheihei| | 2017-4-19 23:37 | 只看该作者
学会修改利用别人的程序很重要。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

168

主题

3045

帖子

2

粉丝