说说小弟我对阅读源代码的一些技巧方法,其实这并不难

说说我对阅读源代码的一些技巧方法,其实这并不难。
其实我开始读源码才几天时间,但有点心得,就写出来吧,以期抛砖引玉。
阅读源代码的利弊我不谈,我只说该如何读
首先是积累,当到了一定条件,你会迫不及待的想要去读,因为你想拥有程序的控制权

我把一份陌生的源代码比做一个陌生的城市,你将在里面熟悉道路,
你只要从一个大的标志开始进入(程序入口点)然后你面临很多分支,有的分支很明显的(依靠设计模式,oo,模块化,结构化,解耦,经验判断,当然还有文档,注释,别人的源码分析文章)与其它没有什么瓜葛,或者只有几个联系点,其实是一个模块化功能,就像你知道有一条路通向xx村,你先不管它,知道它通哪里就可以了,以后再专程访问xx村。

一个设计优良的程序肯定是一个个通过乡村高速公路连接的村落,而不该是交杂在一起的钢筋水泥,至不济也该是用围墙围起来的一个个小区。

当你知道并熟悉了城市的主干道之后,整个城市其实已经成竹在胸了

你该学好模式,oo,模块化,结构化,解耦,接口,多态。。。。
广义来说就是oo

如果这些你都很牛的时候,有份源码还让你读不懂,直接ctrl+del

写给初学的人,以让他们少走不成器的我走过的弯路。

补充一条找源码分析文章的技巧
在google中输入关键的源码片段

补充一点经验:
当你读过一些模块之后,看到类似的模块就会下意识的去猜测该模块内部的代码结构,如果你读的够多,实践够丰富,模块就了然于胸了。
比如看到一个方法名,根据方法的字面意思就能猜测出该方法的代码结构,看到类名,就可能会猜测出它该要有什么方法。
这时读代码的速度就快了。
代码是一个有机体,当你具有把一份源代码解构成一个有机体的能力的时候,读代码其实并不痛苦。可是我还没有达到我想像的哪个层次。
47 楼 jewels007 2008-12-01  
OO基础都不会的话,读别人的代码,的确很累。首先OO的根本其实不光光什么继承,多态,那只是应用到计算机里的东西。OO思想的根本就是你看到一个东西,就能分出他的大类是什么,大类里的小类是什么,它们各有几种属性,会有几个方法。然后才是进行写代码,当然这个时候封装,继承和多态才都会去到,如果用不到,那就再好好理理清。
建议大家去读读“编程之道”。读上几遍,会很有收获。
48 楼 netfork 2008-12-01  
LZ,别说并不难,把你分析代码的具体过程和分析出来的成果拿出来说说,让大家领悟一下。
这样泛泛而谈,除了觉得LZ很牛,没有任何收获~~
49 楼 deltaj 2008-12-18  
如果,读程序有认路那么简单就好啦。
50 楼 bulktree 2008-12-18  
我工作不久由于需要读了jasperReport的源码,涨不少见识啊!
51 楼 summerleaf 2008-12-18  
带着专题去看源代码,每个框架都有他在某一方面的特长,看你所关注的代码片段,借鉴其中的经验。
52 楼 dracularking 2008-12-19  
pipilu 写道
楼主好像没怎么讲“技巧方法”?
有本书是讲读代码的技巧的——《Code Reading》

非常感谢pipilu分享 好书啊
53 楼 dracularking 2008-12-19  
个人感觉 读代码要从两个方向同时入手 把握清楚架构层次是非常重要的 对于一些陌生的架构 最好先搞清楚他背后的原理,所谓磨刀不误砍柴工,从细节处把握有些ide的功能也是很派用场的
54 楼 勤奋一生 2008-12-19  
taupo 写道
我觉得新手不应该去读。。。
首先读不懂,反而会降低自己的兴趣,把自己脑袋搞得跟浆糊一样

稍微觉得自己有点实力的人,应该跟着程序的执行流程去读,看看别人是怎么实现某个功能的,在实现这个功能中用到了什么方法,也就是跟代码

牛人才能在全局上把握,比如,对spring的IOC,牛人肯定心理会觉得应该这样去实现,应该用到什么设计模式,应该如何设计,这些在牛人的心理大都有个谱了,然后带着验证的心态去读,看看作者和自己想的是不是一样,然后总结,加深。



我觉得如果能站在一个高度去审视别人的代码,把握住大方向,就算是牛人了


可惜,我还没有到牛人的份啊



认同这个观点
55 楼 bluesky4485 2008-12-19  
ctrl+del
是什么意思哦
56 楼 guanxb 2008-12-19  
源码应该看看,可以不系统的看.关键的类库跟进去看看,慢慢就想了解其中的结构了.这时在从整体上将以前看过的串串烧,个人看法
57 楼 WorldHello 2008-12-20  
afadgaeg 写道
其实我开始读源码才几天时间,但有点心得,就写出来吧,以期抛砖引玉。
阅读源代码的利弊我不谈,我只说该如何读
首先是积累,当到了一定条件,你会迫不及待的想要去读,因为你想拥有程序的控制权

我把一份陌生的源代码比做一个陌生的城市,你将在里面熟悉道路,
你只要从一个大的标志开始进入(程序入口点)然后你面临很多分支,有的分支很明显的(依靠设计模式,oo,模块化,结构化,解耦,经验判断,当然还有文档,注释,别人的源码分析文章)与其它没有什么瓜葛,或者只有几个联系点,其实是一个模块化功能,就像你知道有一条路通向xx村,你先不管它,知道它通哪里就可以了,以后再专程访问xx村。

一个设计优良的程序肯定是一个个通过乡村高速公路连接的村落,而不该是交杂在一起的钢筋水泥,至不济也该是用围墙围起来的一个个小区。

当你知道并熟悉了城市的主干道之后,整个城市其实已经成竹在胸了

你该学好模式,oo,模块化,结构化,解耦,接口,多态。。。。
广义来说就是oo

如果这些你都很牛的时候,有份源码还让你读不懂,直接ctrl+del

写给初学的人,以让他们少走不成器的我走过的弯路。

补充一条找源码分析文章的技巧
在google中输入关键的源码片段

补充一点经验:
当你读过一些模块之后,看到类似的模块就会下意识的去猜测该模块内部的代码结构,如果你读的够多,实践够丰富,模块就了然于胸了。
比如看到一个方法名,根据方法的字面意思就能猜测出该方法的代码结构,看到类名,就可能会猜测出它该要有什么方法。
这时读代码的速度就快了。
代码是一个有机体,当你具有把一份源代码解构成一个有机体的能力的时候,读代码其实并不痛苦。可是我还没有达到我想像的哪个层次。


说下我的方法:

读应用的代码从入口(main)开始
读框架的代码从接口开始

如果有文档的化,先从文档开始,了解了结构之后再细化到代码
58 楼 cain 2009-01-03  
主要通过功能去跟踪,然后再回归到整体
59 楼 xj07012 2009-01-04  
回复的人真是多,学习中
60 楼 forest3000 2009-01-07  
不错,不错,哈哈说说小弟我对阅读源代码的一些技巧方法,其实这并不难
61 楼 mblmh2008 2009-02-01  
下要抓住框架吧,也就是设计模式,框架一般都遵从设计模式,
然后按照功能模块看..
但是首先要看的是一些基础要素的..
我怎么觉得楼主真的什么也没说呢?
62 楼 wujie2008 2009-02-16  
读源码的好处是显而易见的,但关键是你能不能读懂。
我觉得,首先你要看你是不是有这个能力,想LZ这种方法是可以的,想将源码的主干弄清楚,再解决细节问题,分而治之,逐层解析,很好的方法,这个关键还取决于你所看的源码是按照模块化\OO思想编写出来的,而且逻辑非常清楚,不然也没有用。就着编写者的思维去看源码,你会更有效率。
63 楼 yzzlijun 2009-02-21  
哈哈.同感
64 楼 Anddy 2009-02-22  
模块化,结构化,解耦  
大二了.这些东西还不懂,,自学能力太差了.学院这方面的 课都没安排 !
很郁闷啊 !
65 楼 javause 2009-02-23  
我现在基础还太差,还看不太懂,慢慢学了。
66 楼 val831201 2009-02-24  
我觉得耐心看别人的源码是为了去学习别人的好的思维和编程习惯,形成自己风格后,估计只要能读出个整体框架就OK了吧