我们在写程序时,有不少时间都是在看别人的代码。

例如看小组的代码,看小组整合的守则,若一开始没规划怎么看,就会出问题。

不管是参考也好,从开源抓下来研究也好,为了了解箇中含意,在有限的时间下,不免会对庞大的源代码解读感到压力。

网络上上有一篇关于分析看代码的方法,做为程序设计师的您,不妨参考看看,

换个角度来分析。 也能更有效率的解读你想要的程序码片段。

六个章节:

( 1 )读懂程序码,使心法皆为我所用。

( 2 )摸清架构,便可轻松掌握全貌。

( 3 )优质工具在手,读懂程序非难事。

( 4 )望文生义,进而推敲组件的作用。

( 5 )找到程序入口,再由上而下抽丝剥茧。

( 6 )阅读的乐趣,透过程序码认识作者。

       阅读他人的程序码( 1 )——读懂程序码,使心法皆为我所用

程序码是别人写的,只有原作者才真的了解程序码的用途及涵义。许多程序人心里都有一种不自觉的恐惧感,深怕被迫去碰触其他人所写的程序码。但是,与其抗拒接收别人的程序码,不如彻底了解相关的语言和惯例,当成是培养自我实力的基石。

1. 消除人类内心深处对于陌生事物的原始恐惧。

2. 读懂别人写的程序码,让你收获满满。——在现今开放原始码的风气如此盛行的今日,你可以透过开放原始码学习到新的技术,学习到高手的架构设计,大幅提高学习的效率及效果。你甚至可以直接自开放原始码专案中抽取,提炼出自己所需的程序码,站在巨人的肩膀上,直接由彼端获得所需的生产力。从这个观点来看,读懂别人所写的程序码,就不再只是从负面观点的“被迫接收”,而是极具正面价值的“汲取养份。”

3. 先了解系统架构与行为模式,再细读。——接触他人的程序码,大致上可以分为三种程度:一,了解,二,修改,扩充,三,抽取,提炼。了解别人的程序码是最基础的工作,倘若不能了解自己要处理的程序码,就甭论修改或扩充,更不可能去芜存菁,从中萃取出自己所需,回收再利用别人所撰写的程序码。

所以,阅读程序码的重点,不在于读完每一行程序码,而是在于有效率地透过探索及阅读,从而了解系统的架构及行为模式。以便在你需要了解任何片段的细节实作时,能够很快在脑上对映到具体的程序码位置,直到那一刻,才是细读的时机。

4. 熟悉沟通语言与惯例用语(即命名规范)——不论如何,有些基本的准备,是阅读他人程序码时必须要有的。

5. 掌握程序码撰写者的心态与习惯——想要阅读程序码,得先试着体会程序码作者的“心”。想要这么做,就得多了解对方所使用的语言,以及惯常运用的语汇。

阅读他人的程序码( 2 ) -摸清架构,便可轻松掌握全貌

在本文中,我们的重点放在:要了解一个系统,最好是采取由上至下的方式。先试着捕捉系统架构性的观念,不要过早钻进细节,因为那通常对于你了解全貌,没有多大的帮助。阅读程序码不需要从第一行读起,我们的目的并不是在于读遍每一段程序码。

1.由上而下厘清架构后,便可轻易理解组成关系。

2.了解架构,必须要加上层次感;——事件产生器产生事件,并送至事件分派器,而事件分派器负责找出各事件相对应的事件处理器,并且转交该事件,并命令事件处理器加以处理。像的图形用户界面的Windows应用程序,便是采用事件驱动式的架构。

3.探索架构的第一件事:找出系统如何初始化。——有经验的程序人,对于时常被运用的架构都很熟悉。常常只需要瞧上几眼,就能明白一个系统所用的架构,自然就能够直接联想到其中会存在的角色,以及角色间的关系。然而,并不是每个系统所用的架构,都是大众所熟悉,或是一眼能够望穿的。这时候,你需要探索。目标同样要放在界定其中的角色,以及角色间的静态,动态关系。

4.要了解一个系统,最好是采取由上至下的方式。先试着捕捉系统架构性的观念,不要过早钻进细节,因为那通常对于你了解全貌,没有多大的帮助。

阅读他人的程序码( 3 ) -优质工具在手,读懂程序非难事

系统的复杂度往往超过人脑的负荷。阅读程序码的时候,你会需要更多工具提供协助。使用好的整合式开发环境( IDE )的或文字编辑器,就能提供最基本的帮助。

因为在阅读程序码时,最常做的事,就是随着程序中的某个控制流,将阅读的重心,从某个函式移至它所呼叫的另一个函式。所以对程序人来说,阅读程序码时最常做的事之一就是:找出某个函式位在那一个原始档里,接着找到该函式所在的位置。

 

阅读他人的程式码( 4 ) -望文生义,进而推敲组件的作用

先建立系统的架构性认识,然后透过名称及命名惯例,就可以推测出各组件的作用。例如:当AOL的Winamp尝试着初始化一个插件时,它会呼叫这个结构中的初始化函式,以便让每个插件程式有机会初始化自己。当AOL的Winamp打算结束自己或结束某个插件的执行时,便会呼叫退出函式。

在阅读程式码的细节之前,我们应先试着捕捉系统的运作情境。在采取由上至下的方式时,系统性的架构是最顶端的层次,而系统的运作情境,则是在它之下的另一个层次。

“望文生义”很重要,我们看到函式的名称,就可以猜想到它所代表的作用。

阅读他人的程式码( 5 ) -找到函数入口,再由上而下抽丝剥茧

根据需要决定展开的层数,或展开特定节点,并记录树状结构,然后适度忽略不需要了解的细节─这是一个很重要的态度。因为你不会一次就需要所有的细节,阅读都是有目的的,每次的阅读也许都在探索程式中不同的区域。

探索系统架构的第一步,就是找到函数的入口点。找到入口点后,多半采取由上而下(自上而下)的方式,由最外层的结构,一层一层逐渐探索越来越多的细节。

我们强调一种不同的做法:在阅读程序代码时,多半采取由上而下的方式,而本文建议了一种记录阅读的方式,就是试着记录探索追踪时层层展开的树状结构。你可以视自己需要,了解的深入程度,再决定要展开的层数。你更可以依据特殊的需要,只展开某个特定的节点,以探索特定的细目。

适度地忽略不需要了解的细节,是一个很重要的态度,因为你不会一次就需要所有的细节,阅读都是有目的的。每次的阅读也许都在探索程式中不同的区域;而每次探索时,你都可以增补树状结构中的某个子结构。渐渐地,你就会对这个程式更加的了解。

阅读他人的程式码( 6 ) -阅读的乐趣:透过程式码认识作者

即便每个人的写作模式多半受到他人的影响,程式人通常还是会融合多种风格,而成为自己独有的特色,如果你知道作者程式设计的偏好,阅读他的程式码就更得心应手。

阅读程式码时,多半会采取由上而下,抽丝剥茧的方式。透过记录层层展开的树状结构,程式人可以逐步地建立起对系统的架构观,而且可以依照需要的粒度(粒度),决定展开的层次及精致程度。

建立架构观点的认识是最重要的事情。虽然这一系列的文章前提为“阅读他人的程式码”,但我们真正想做的工作,并不在于彻底地详读每一行程式码的细节,而是想要透过重点式的程式码“摘读” ,达到对系统所需程度的了解。每个人在阅读程式码的动机不尽相同,需要了解的程度也就有深浅的分别。只有极为少数的情况下,你才会需要细读每一行程式码。

阅读程式码是新时代程序员必备的重要技能。

总结

当你从视阅读他人的程式码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

转载自(部分删减)http://www.cnblogs.com/ToDoToTry/archive/2009/06/21/1507760.html

如何看懂源代码--(分析源代码方法)相关推荐

  1. 如何看懂源代码--(分析源代码方法) 1

    如何看懂源代码--(分析源代码方法)  -- 转载 作者: fandyst 出处: http://www.cnblogs.com/todototry/ 原文: https://www.cnblogs. ...

  2. 你绝对能看懂的Kafka源代码分析-Kafka Producer设计分析

    之前我写了<Kafka入门教程轻松学>系列文章,半年来有1万多的阅读量,虽然不算很多,但看到很多朋友的支持,也给了我继续写下去的动力.接下来我会再写一个系列文章----<你绝对能看懂 ...

  3. 如何看懂源代码–(分析源代码方法)

    我们在写程式时,有不少时间都是在看别人的代码.例如看小组的代码,看小组整合的守则,若一开始没规划怎么看, 就会"噜看噜苦(台语) " 不管是参考也好,从开源抓下来研究也好,为了了解 ...

  4. 你绝对能看懂的Kafka源代码分析-KafkaConsumer类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  5. 你绝对能看懂的Kafka源代码分析-RecordAccumulator类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  6. Android源代码分析之类方法与组件名词解释(持续更新)

    Android源代码分析方法组件详解 1. 类方法 1.1 Handler方法 1.2 Looper方法 1.3 Binder 1.4 Instrumentation 2. 组件 2.1 AMS.WM ...

  7. 从源码带你看懂functools的partial方法

    1.what? partial是什么, partial也叫偏函数.源码的描述是: 部分应用给定参数和关键字的新函数. New function with partial application of ...

  8. 如何看懂源代码--(分析源代码方法)(转)

    ps:近日,也在看别人写的框架,有点水雾缭绕的感觉,找到这篇好文,并分享之 摘自(繁体中文Traditional Chinese):http://www.ithome.com.tw/itadm/art ...

  9. 如何看懂python代码分几步_如何看懂源代码--(分析源代码方法)

    在阅读程式码的细节之前,我们应先试着捕捉系统的运作情境.在采取由上至下的方式时,系统性的架构是最顶端的层次,而系统的运作情境,则是在它之下的另一个层次. 好的说明文件难求,拼凑故事的能力很重要 有些系 ...

  10. 带你看懂LayoutInflater中inflate方法

    关于inflate问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东 ...

最新文章

  1. 远程办公项目团队如何进行团队协作?
  2. 威刚(A-DATA)DDR3-1600震撼评测
  3. [发布]Lucene索引分析工具Luke.Net 0.5升级版 (兼容Lucene.Net 2.9.4.1)
  4. java 四种实现延迟加载的方法
  5. cascader 动态加载 回显_Elementui cascader 级联选择器 动态加载数据,保存后回显的问题...
  6. Python自省函数getattr的用法
  7. 一文读懂:云上用户如何灵活应用定制化网络服务
  8. java调用企业微信接口给微信发消息
  9. 集线器和交换机的区别 傻傻分不清
  10. 李一男造车失败;马云卸任浙商总会会长;特斯拉或将迎来华人CEO | 每日大事件...
  11. 如何设计一个可用的web容器
  12. java8新增特性一:lambda表达式
  13. Word制作表格常用操作
  14. 应用性能管理APM巅峰对决:skywalking P.K. Pinpoint
  15. Linux系统裁剪与定制
  16. Android播放视频时屏幕保持唤醒不息屏
  17. 想加入程序员行列 初学编程选择Python怎么样
  18. 中职计算机专业可以考什么大学,中职生可以考哪些大学?
  19. 常用英文单词标准缩写
  20. pdf文件两栏内容提取信息思路

热门文章

  1. [Z] 通天塔导游:各种编程语言的优缺点
  2. 电脑无法进入bios
  3. 在腾讯云上申请一个免费的centos系统,将编好的python程序和c程序上载到centos系统,
  4. C#检查网络是否连接的方法
  5. VirtualApp hook so及activity回调
  6. 泰拉瑞亚 阿里云服务器搭建记录
  7. html爱情意思,1一9爱情数字什么意思 1到9数字爱情含义
  8. teredo 未能解析服务器名,关于Teredo 参数无法进行限定,服务器连接已阻止的各种解决办法...
  9. cannot connect to X server :0.0
  10. 智能眼镜上可否能有“MIUI”?