转自(http://www.cnblogs.com/DDark/archive/2011/12/07/2279199.html)

无论作为编程新人,还是职场老手,对于程序员,读别人的代码几乎是不可能跳过的环节,开始我读代码的方式很简单页很老土,几乎就是先挑能看懂的代码开始看,而能看懂的代码几乎都是实现具体功能的函数代码,然后一点一点向上层调用的地方读,这样做的结果往往是细节有余,整体观念不清楚。一般的解决措施是找具体架构的文档来读,先明白具体需求,输入输出接口再一点一点往下看。对于老代码或者缺乏维护但包含有效信息的代码则没有什么办法。

之后过了很久在一位学长的日志里学到如何有效读代码的,原文如下:

http://blog.renren.com/blog/54704738/762827592#nogo

下面是盗用的日志内容:

==================================================

刚到一个新的地方,必然会要看以前别人写的代码,只有你看懂了别人写的代码,你才能去修改它们,否则在一知半解的情况下去修改代码,很可能因为理解问题而引入bug,对于线上服务,将带来不可估量的问题。一般你到一个新的地方,别人也一定会给你一段时间叫你去看代码,有的地方可能还会有对你对代码的理解的考核。

记得当前在径点(AvePoint)实习的时候,当时是C#代码,我在很短的时间里就把代码理清了,而且还发现了一个小bug,这得益于什么呢?后来想想是得益于Visual Studio的强大功能,我在边看代码的时候,边调试,在调试的过程中看代码,调了几遍之后就了解了代码的逻辑。

今年在百度实习的时候,做完新人题之后就是看代码,由于是linux下的代码,没有好的ide,看起代码来比较费劲,还不能调试,加上代码逻辑性不是很强,串讲了两次都没有通过。我开始急了,我想到的办法就是做笔记,看到哪里就用文字来描述代码的过程。如果不理解代码的逻辑,就无法用文字描述代码的逻辑思路。读完整个代码,写了30多页的文档,最后才真正将代码看懂。

那其实写这么长的文档是没有必要的,很浪费时间,我发现我很长的一段时间,都浪费在写文档的过程中。但是如果你不写文档的话,你看完了后面的代码,有可能你就忘了后边的代码。

有没有其他的办法呢?

来到腾讯后,有幸参加一个以前在雅虎工作的同事分享他看到的某块代码逻辑。他是按照他的笔记来讲的。我看到他的笔记是一个从一个节点发散出去的图,点击某个节点的时候可以展开。后来得知,他用的那个软件是freemind,是一个思维导图软件,类似的还有xmind。

百度百科对思维导图的定义是:思维导图是有效的思维模式,应用于记忆、学习、思考等的思维“地图”,利于人脑的扩散思维的展开。思维导图已经在全球范围得到广泛应用,包括大量的500强企业。思维导图的创始人是东尼·巴赞。中国应用思维导图大约有20多年时间。具体可以参看百度百科关于思维导图的介绍。

尤其是对于比较复杂的代码,如果不借助有效的工具的话,很难在短时间内搞明白。俗话说得好,工欲善其事,必先利其器。如果你在为看代码而烦恼的话,不妨试试freemind或xmind等思维导图软件。

==================================================

具体的好处原文中已经讲的很清楚,不再多说。

下面是一些经常用到的快捷键和一些我觉得有用的一些规范:

insert:插入子节点

shift+insert:插入父节点

Enter:添加平行节点

shift+enter:在上方添加平行节点

ctrl+up/down/left/right:移动节点位置

F2:编辑节点

ctrl+滚轮:放大缩小

space:打开折叠(鼠标点击亦可)

ctrl+J:合并节点(要求节点没有子节点)

alt+shift+F:文本颜色

其他如新建复制黏贴查找等操作和win程序是一致的,没有差别,

我一般习惯的是:

根节点写模块名字

如果是过程式编程的就从调用点一路插入节点写下去

如果是面向对象编程在使用类的时候建立第一个子节点写“Private Member”,然后在该节点的子节点中列出相应的属性

类名用泡框(在“格式”下拉列表框中),其他用叉状

思维导图FreeMind

什么是MindMap?

  • MindMap(被译成思维导图或心智图)是一种思维工具,由英国的记忆之父托尼-博赞发明。
  • MindMap是一种新的思维模式,它将左脑的逻辑、顺序、条例、文字、数字,以及右脑的图像、想像、颜色、空间、整体等各种因素全部调动起来,把一长串枯燥的信息变成彩色的、容易记忆的、有高度组织性的图,它绘制起来非常简单,而且十分有趣这样。利用MindMap不但可以增强思维能力,提升注意力与记忆力,更重要的是,能够启发我们的联想力与创造力。

    绘制MindMap的好处

  • 使用色彩、线条、关键词、图像等多种素材,可以大大提高回忆的效率。
  • 由主题展开的辐射状结构,可以掌握信息资讯的整体架构。
  • 分级的辐射状结构,使信息结构清晰,层次分明。
  • 可视化和可操作的思维过程,能激发更有创造力的思维。
  • 绘图过程中,同时使用了左右脑,可以不断提高思考的能力。
  • 通过记录思维过程,加强对个人知识管理。

思维导图的软件有很多,比较有名的有freemind,blumind,mindmanager,xmind等,像我这样的跨平台用户当然更青睐简洁的freemind。Freemind来做分析有几个优势:

1、比较简洁大方,快速稳定

2、支持的导出格式比较多

3、复制到TXT中,会有缩近的TAB

4、云框,对于关键词来说是一个很好的分割

安装也非常简单,进入Freemind软件的主页面(http://freemind.sourceforge.net/wiki/index.php/Download),选择Microsoft Windows 下的Windows Installer Max。

转载于:https://www.cnblogs.com/Spacecup/p/3891653.html

如何读代码?读代码的利器---FreeMind相关推荐

  1. 写让别人能读懂的代码

    随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本.而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的代码. 我前几天看了一本书,书中有 ...

  2. python split函数 空格_python上手--10行代码读懂红楼梦

    取名10行代码看懂红楼梦,是将介绍使用python代码来读红楼梦获取其主要人物.这里的思想就是词频统计,通过分析红楼梦小说文字中出现最多的词语,来概括说明红楼梦的核心人物和事情.实际上如果你能跟着往下 ...

  3. react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧

    react 代码编写原则 by Nirmalya Ghosh 由Nirmalya Ghosh 如何编写易读的React代码- 10种编码风格技巧 (How to write highly readab ...

  4. 读懂Java代码总结

    代码不要忙着细读.要粗,找到大体的脉络. 要改.根据自己的设想,大胆去改,改了之后就运行,看看是否有预想的效果.动手才能有收获. 找简单的任务赶快做起来.上司没有布置任务,就自己给自己布置. 不要偏执 ...

  5. 编写让别人能够读懂的代码

    随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本.而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的时间. 我前几天看了一本书,书中有 ...

  6. 如何快速读懂开源代码?

    文章目录 **RUN起来** **调试** **把控关键数据结构和函数** **从小的开始** **关注一个模块** **工具** **一.阅读开源代码存在的一些误区** 二.阅读代码的心态 **三. ...

  7. 嵌入式 -固件防复制系列【1】GD32代码读保护

    GD32代码读保护 引言 手册介绍 芯片内存结构 闪存操作说明 可选字节块说明 功能生效条件 安全保护功能说明 代码实现 保护功能开启 测试方法 现象说明 整体分析 进一步测试 更新历史 202202 ...

  8. 读代码读的什么代码_您的代码应读得像书

    读代码读的什么代码 There's a pandemic among programmers. Long functions, broad and nondescriptive names for f ...

  9. 遇到读不懂的代码应该怎么办?

    上一章讲了,阅读代码是学习算法过程中非常重要的一环.本章我们就来讲讲阅读代码的方法,并一起来读一个源码的例子. 如何阅读代码 读一个函数/代码块 其实,前面我们对于如何阅读理解一个程序中的函数或是代码 ...

  10. 如何编写让别人能读懂的代码?

    随着软件行业的不断发展,历史遗留的程序越来越多,代码的维护成本越来越大,甚至大于开发成本.而新功能的开发又常常依赖于旧代码,阅读旧代码所花费的时间几乎要大于写新功能的代码. 我前几天看了一本书,书中有 ...

最新文章

  1. 比特币要升级成为“比特币现金”
  2. LA4238 Area of Polycubes(立方体的表面积)
  3. MySQL绿色版5.7以上安装教程
  4. MyBatis 缓存详解-一级缓存(本地缓存)介绍
  5. mysql optimization
  6. html监控用户在线与离线,HTML5判断设备在线离线及监听网络状态变化例子
  7. leetcode1020. 飞地的数量(dfs)
  8. ERROR: Cannot uninstall ‘PyYAML‘. 安装 fvcore
  9. a表剔除b表 oracle,删除a表中和b表相同的数据
  10. Visual Studio 2015 使用ODP.net进行EF开发
  11. oracle中dual最多存多大_ORACLE中dual用法详解
  12. C#学习笔记——类的继承
  13. 《普林斯顿微积分》读书笔记
  14. 微积分手机版 pk 清华大学微积分教程
  15. u邮件收件服务器密码是什么,U-Mail邮件服务器加密技术给邮件上安全锁
  16. R语言使用gbm包的gbm函数拟合梯度提升机回归模型:使用predict函数和训练好的模型进行预测推理、计算回归模型的评估指标MAE、MSE、RMSE、R方等指标
  17. mysql slave 'system user' locked_Mysql的slave lags一例
  18. x1 php168,新手快速入门教程
  19. 蛋蛋弹车2-具有功能安全EPS系统设计(工具篇2)
  20. 虚拟机中可移动设备灰色 usb无法连接到客户机

热门文章

  1. 自然语言处理发展的四大阶段
  2. 3d效果图制作傻瓜软件_推荐两个傻瓜式3d家装设计软件,适合设计爱好者
  3. 全电子计算机联锁厂家,传统计算机联锁与全电子计算机联锁对比分析
  4. Linux下pgadmin4启动报错,如何在UBUNTU 16.04上安装桌面模式中的PGADMIN 4
  5. php怎么文字加粗体代码,html字体加粗用css设置文字粗体样式
  6. Win10 开机密码破解
  7. EMOS嵌入式仿真平台-编程环境v101
  8. Corgi-ICode —— 帮你少写点代码
  9. blob协议的加密视频地址下载,多个ts文件合并方法,亲测有效
  10. java jshell_java9系列(一)安装及jshell使用