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

这样的状态对他们有深的影响:其一,任务不能如期完成,导致成本一再飙升。其二,不便于他们能力的提升,因为要能力提供往往需要去更多的研究他们实现的系统或优秀的开源代码。

下面说说如下快速读懂一个大型程序,谈一谈鄙人的见解:
(1)先建好环境,让程序能运行,玩一遍
当你拿到一个程序后,即使你不看代码,你也应该知道它是干什么的吧!若它是干什么的都不知道,建议你不用看。因为程序中肯定有些功能逻辑的实现,干什么都不知道,则肯定没法看,放弃吧!
若你知道这个程序的大概功能。那么你先不用看代码,先把环境建立起来,想办法让程序运行一遍。在一般情况下,要做到这一点不难吧!
为什么我推荐将程序运行一遍呢?因为建立好的运行环境,一方面可以初步验证一下此程序的功能,以及正确性完整性,另一方面方面接下来的分析调试,通过加日志断点就可能了;同时面对这个大型程序,程序运行通了,能没有成熟感吗?能不愉悦吗?

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

(3)先体系再细节;先平面再线点。
不要一开始便逐字逐句的看,这种方法是最低效的方法。这些童鞋想必在经前的做事过程中,往往是先了解各个点,再将点串也线,线串也面。他们直到最后才看清楚程序的面目,可能经过几个月才豁然开朗。整个过程如地狱般煎熬。
而有推荐的方法是:先整体再局部,先平面再线点。这样不解更高效,而且轻松啊。
这也是为什么总有那么几个天才程序员很空闲的原因之一。

这里要说的是"大胆猜测,小心求证"。在阅读程序的过程中,我们往往对某一处或几处逻辑不肯定,可能是这样,也可能是那样。在这个岔路口,这时许多小伙伴们往往不知道如何选择了,停滞不前。其实这个时候不需要停留,大胆猜测,大胆往前走。走通了则证实你的猜测正确性。走不通则返回走另外一条路就可以了。

(4)断点调试、日志调试。
因为在最初我们已经将环境建立好了,那么当遇到一些难于理解的问题啊,结合断点调试便迎刃而解了。看见许多小伙伴经常在QQ问这问那,一些再简单不过的问题,break一下,
demo一下,答案便出来了。
即然想做有前途的程序员,为什么不多动动你聪明的大脑,不多动动你高贵的双手呢。

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

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

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

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

作者:qq_494856288
来源:CSDN
原文:https://blog.csdn.net/jysg9/article/details/24193181
版权声明:本文为博主原创文章,转载请附上博文链接!

如何快速看懂一个项目相关推荐

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

    为什么以及要有的态度: 不要消极的去阅读别人的代码,而是带着挖掘宝藏的精神去寻找别人的代码中精华的部分,找出其中好的架构为我所用. 大体思路: (1)忽略细节,先前不要关注分支(支线).不重要的功能, ...

  2. 如何能快速看懂一个Java项目?

    首先,要先把自己感兴趣的项目下载下来,这部分肯定需要git的一些知识,不过这个可以很快的入门,两个小时足够学会git的安装和下载项目,前提是得静下心来学. 经过了千辛万苦终于把项目下载下来了,先喝口水 ...

  3. 如何快速读懂一个后端系统代码

    如何快速看懂一个后端系统代码 当一个java开发新手拿到一个系统代码并且没有人给你讲基本的需求与功能时,如何快速读懂代码了解功能是提高工作效率的必备技能.我作为一个参加工作一年的Java小菜是如何做的 ...

  4. 快速的看懂老项目代码

    快速的看懂老项目代码 如果拿到一个老项目进行新功能改造,首先看懂老项目很重要,而有些老项目由于各种原因没有明确的注释,甚至经多人开发后注释和弃用代码混为一体,惨不忍睹.关于如何看项目代码我有下面一点心 ...

  5. 如何快速看懂一家公司,判断出公司的价值?投资和创业的必备基础知识

      最近很多小伙伴们在股票和基金的舞台上与庄家博弈,菜狗.坤坤.医药女神兰姐,市场的火热程度把股市这个危机四伏的市场伪装成了稳赚不赔的买卖,误把股市和基金当作提款机,其实却成了庄家镰刀下的嫩韭菜.如果 ...

  6. [静态时序分析简明教程(三)]备战秋招,如何看懂一个陌生的timing report

    备战秋招,如何看懂一个陌生的timing report 一.写在前面 1.1 快速导航链接· 二.Timing Report 2.1 起始点与终止点 2.2 路径时钟域的归属 2.2 建立时间检查与保 ...

  7. 三相全控tc787触发电路_教你快速看懂电子电路图

    点击"电工电气学习"关注即可免费订阅! 电工学习网:www.diangon.com 关注电工学习网官方微信公众号"电工电气学习",收获更多经验知识. <教 ...

  8. 如何看懂一个深度学习的项目代码

    搞深度学习的人,两大必备日常除了读论文之外就是读代码. 深度学习项目代码,小到几百行的测试demo,大到成千万行的开源项目,读起来方法肯定各有不同. 如下图Mask R-CNN项目代码和PyTorch ...

  9. cad图纸怎么看懂_cad学习技巧:如何快速看懂图纸?

    1 如何看懂建筑施工图 首先自己要多多努力,有这样一个决心一定要看懂图纸. 其实图纸并不是什么难的东西,多与现场接触,多对照图纸你会收益很多 图纸 就是平立剖,结合着看.[)其实建筑图的个层平面也是 ...

最新文章

  1. 如何向数据库添加时同时返回ID
  2. 【FI模块学习笔记】 固定资产概述(下)
  3. 选择头秃还是植发?大数据告诉你植发行业水有多深?
  4. 分布式文件系统研究-测试-文件下载测试
  5. idea中ajax中文乱码
  6. SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息
  7. 灵动思绪EF(Entity FrameWork)
  8. c++求n次方_课时9一元二次方程及其应用
  9. AngularJS 指令实践指南(二)
  10. 补习系列(7)-springboot 实现拦截的五种姿势
  11. 用垃圾建设台湾海峡陆桥的主意是否可行
  12. RocketMQ源码解析:Message存储
  13. 桌面Linux绝地反击
  14. 搭建直播平台过程中的全能“辅助”——流媒体服务器
  15. 【转】基于C#的接口基础教程之五(1)
  16. openface源码理解(4)
  17. eclipse配置python运行环境_Eclipse配置Python环境
  18. 联邦学习 Federated Learning 相关资料整理
  19. 从流水线角度看MIPS处理器ISA的实现逻辑以及RTOS操作系统仿真
  20. 圆桌共话:如何冲破数据高墙,连线“数智未来”?

热门文章

  1. STM32H7驱动W25QXX
  2. 50个极好的bootstrap 后台框架主题下载
  3. nginx 安装配置+清缓存模块安装
  4. mysql的行锁和间隙锁
  5. 毕业设计——>基于SSM的JAVA网上书城系统(购买图书)
  6. wasm与canvas交互
  7. MySQL57图形化建表_Navicat 创建数据库和表之图形化界面方法
  8. 清华本科生最高荣誉:图说十年特奖得主(附历年名单)
  9. 花了一年时间完成的 在线G代码编辑,加工系统 G-Code Editor V1.0
  10. canvas文字粒子效果 html+css+js 3点饮茶,7点放工,美滋滋~