`
lqixv
  • 浏览: 218365 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

我读源码的一点体会

    博客分类:
  • java
阅读更多

刚才读到了一篇推荐源码阅读的文章,不禁非常佩服那位牛哥。他3年时间读了很多的源码项目,让我不禁浮想联翩。我也介绍一下我个人读源码的一点体会。

 

我自己读过的是 ant 的源码,断断续续大约读了半年时间。从中我学到了非常多的东西,里面实在太多的东西值得回味!我是这样读的,先找到ant的入口,然后从主类开始阅读(其实主类非常简单的)。然后再从点到面,细细地往下读。对于自己想深入了解的,就进入接口内部,继续往下读。阅读的时候,我发现,ant 并没有我想象中的那么复杂,而是非常简单。给我的感觉是,你只要写过一些 java 程序,估计就差不多都能读懂。ant 的程序结构非常清晰,类名、方法名写的很好,你看类名和函数名,就知道它做了什么,注释也写得不错。有时候,有一些源码比较难懂,我就把那部分代码打印出来,一边阅读,一边标注,这样慢慢的也就搞懂了。不过,我也没有读全,只读了ant 的整体构架及部分细节,很多细节没有深入研究。原因是,我对我想了解的内容基本搞清楚了,对整体构架也能看得很清楚了,没必要或不想再了解其余部分细节了。其实,读 ant 的源码给我的感觉就像在读一颗树,先读根与主干,想深入,再读树枝,再想深入,最后就可以读到树叶,整体结构非常清晰。在阅读的过程中,如果你读到某根“树枝”了,不想继续深入读里面的“枝叶”了,就可以回来继续读其他的东西,也不影响你理解整棵“树”。因为 ant 的结构组织得非常合理,注释也写的很好,就不会像盲人摸象那样,一时象根柱子,一时象堵墙。因此读起来就感觉容易很多。

 

不过那篇推荐阅读源码的文章中介绍的那位牛哥,3年竟然读了很多的源码项目,让我佩服不已!不过也让我稍感疑惑,3年真的能阅读如此多的源码项目吗?于是,我妄自猜测,他可能是精读了一些个项目,而泛读了一些项目。我觉得这才比较合理一些。不过即使如此,也让人非常佩服了。其实,我个人觉得,看源码项目不需要多,只精读一两个,就已经足够你回味无穷了!其它的,只是泛泛读一部分,也可以了。

 

我也非常推崇大家去读一两个优秀的源码项目。其实读一些优秀的源码,并没有我们想象中的那么困难。尤其是你对其工作原理了解之后,读起来就更顺手一些。因为你只要去了解,这个项目是如何实现它所要实现的那些功能的,又是如何组织这个项目的,这样去组织这个项目有什么好处等等,这就差不多了。那样读过之后,即使没有读全,都会让人有非常大的收获!对个人能力的提高是非常有帮助的。

 

一点浅见,与大家共享。

分享到:
评论
34 楼 hobitton 2010-12-31  
别读ant了,里面的代码就是一坨,,不要把人给读废了,读代码找点好代码来读嘛。
33 楼 little_bill 2010-12-31  
听完楼主一席话。使我也想试试读一下源码了。
32 楼 findhappy7 2010-12-31  
1、功力不够不要硬着头皮去专,,没必要,,
2、不要为读源码而读源码,,,

代码见多了,,写多了,自然,,到时候就能读懂了,,
31 楼 躁动的绵羊 2010-12-31  
lqixv 写道
iq527 写道
keanu196492 写道
unika_ly12 写道
传送门,兄弟


同求传送门。


给学习J2EE的朋友一些值得研究的开源项目
http://miaoxiaodong78.blog.163.com/blog/static/187651362006111325440165/


应该是这篇


是的,就是这篇。

在看了一些回复,在这里给出两点建议:

1、建议刚开始阅读源码的时候,挑一些简单,但会使用的 源码项目 来读。我看有些朋友直接推荐去读 tomcat、去阅读 spring ,我不禁一头暴汗!原因是我个人觉得,这些东东太大了,可能不适合一般人阅读。举个例子,就像假如我说,爬山很好,上面空气清新。这时一位大牛过来说,兄弟,我推荐你爬珠穆朗玛,在上面不仅风光无限,而且你能体会到站在地球巅峰的感觉……

2、第二个建议是,建议读代码时,先从低版本的、功能相对单一一些的版本开始阅读。阅读完第一个版本后,通过版本比较工具(如 cvs 之类的),查找高一点的版本代码,做比对,看看作者做了哪些改进,同时最关键的是要思考,作者为什么要这么改(注意这一点特别特别重要)!最后,再看最新的版本。当在看完最新版本后,也许,你莫名会产生一个想法:“我是不是要造个轮子呢?……”

这两个建议只对普通人且之前没读过或很少阅读源码的人有效,不包括牛人。

另,感慨一下,俺只是个普通人 ,是个遇到困难可能就会放弃、遇到挫折可能会哭泣的普通人。只是见过些牛人后,不敢随便开口,所以只敢对一些和我差不多的普通朋友建议。我有个牛人兄弟,现在在淘宝里混的,在上学的时候,他学了2个月的汇编后,就直接去读 ms-dos 的3个启动文件了(那时还是dos 3.0 的时代),一个学期下来后,写了个病毒,当年最牛的杀毒软件 kv300,必须单独写一个专杀这个病毒的程序,才能杀他的病毒。2000年左右的时候,学了段时间 c/c++,然后又去把 apache 源码搞了个通透。对这些牛人,他们的专劲、他们的韧性,俺们只能仰望,心里小小地自卑了一把后,然后跟他们绝口不谈技术……嘿嘿



我想问一句,你同事退休了吗?或是还活着吗?
30 楼 lxs647 2010-12-30  
深有同感,只有出问题了才会想到去读源码、、、、、、、、
29 楼 lqixv 2010-12-30  
yuaoi 写道
看lz的文章,挺受益的。
不过lz也该更进一步把那个牛人兄的链接一起送上啊。嘿嘿。。。
但是,我想搜的时候了,藕断丝连反反复复搜出了不少超级有用的东西:
全都说到一部分人包括我在内的心坎去了,
祛除浮躁,建立体系迫在眉睫呢。。。
看来“网络阅读”很重要啊,真该重视起来,难怪无头苍蝇一样乱撞的,收获甚微。
我先google“3年 读源码项目”,选第二个:
http://www.iteye.com/wiki/topic/854647
然后je里的zwchen牛的文章:
网络阅读,为什么人会浮躁?
http://www.iteye.com/topic/698774
觉得讲得真好,相见恨晚的感觉。
当然zwchen牛的很多文章都是挺不错的,上次那个求职经历尤为坎坷。详细可以去看他的博客。
特此分享。





谢谢这位兄弟发分享!!!我刚才跑到里面看了后不禁悔恨不已,自己在 je 时间也不短了,竟然还不知道他,实在应该早点去读他的博客的!

再一次说声多谢你的分享!!!
28 楼 hastune 2010-12-30  
要是为了读懂整个框架的没一处源码,难度有点太大了。
分开部分读比较好啊
27 楼 hastune 2010-12-30  
源码写得那么棒。
去找一些代码去学学,日积月累就懂得多了。
26 楼 ahuango 2010-12-30  
断断续续花了2个月时间去读H2的源码,发现才读了1/N。实在是入不了门啊
25 楼 lqixv 2010-12-30  
iq527 写道
keanu196492 写道
unika_ly12 写道
传送门,兄弟


同求传送门。


给学习J2EE的朋友一些值得研究的开源项目
http://miaoxiaodong78.blog.163.com/blog/static/187651362006111325440165/


应该是这篇


是的,就是这篇。

在看了一些回复,在这里给出两点建议:

1、建议刚开始阅读源码的时候,挑一些简单,但会使用的 源码项目 来读。我看有些朋友直接推荐去读 tomcat、去阅读 spring ,我不禁一头暴汗!原因是我个人觉得,这些东东太大了,可能不适合一般人阅读。举个例子,就像假如我说,爬山很好,上面空气清新。这时一位大牛过来说,兄弟,我推荐你爬珠穆朗玛,在上面不仅风光无限,而且你能体会到站在地球巅峰的感觉……

2、第二个建议是,建议读代码时,先从低版本的、功能相对单一一些的版本开始阅读。阅读完第一个版本后,通过版本比较工具(如 cvs 之类的),查找高一点的版本代码,做比对,看看作者做了哪些改进,同时最关键的是要思考,作者为什么要这么改(注意这一点特别特别重要)!最后,再看最新的版本。当在看完最新版本后,也许,你莫名会产生一个想法:“我是不是要造个轮子呢?……”

这两个建议只对普通人且之前没读过或很少阅读源码的人有效,不包括牛人。

另,感慨一下,俺只是个普通人 ,是个遇到困难可能就会放弃、遇到挫折可能会哭泣的普通人。只是见过些牛人后,不敢随便开口,所以只敢对一些和我差不多的普通朋友建议。我有个牛人兄弟,现在在淘宝里混的,在上学的时候,他学了2个月的汇编后,就直接去读 ms-dos 的3个启动文件了(那时还是dos 3.0 的时代),一个学期下来后,写了个病毒,当年最牛的杀毒软件 kv300,必须单独写一个专杀这个病毒的程序,才能杀他的病毒。2000年左右的时候,学了段时间 c/c++,然后又去把 apache 源码搞了个通透。对这些牛人,他们的专劲、他们的韧性,俺们只能仰望,心里小小地自卑了一把后,然后跟他们绝口不谈技术……嘿嘿
24 楼 生活小丑 2010-12-30  
我最近在看Spring的源码,感觉需要从整体上看比较好,这样可能收获会比较大一些,一开始就钻进里面的细节里去看,只见树木不见森林,感觉有点盲目或者是其他,呵呵,不太会说,反正就是感觉这样不太好。求指点.....
23 楼 jacksv123 2010-12-30  
想当初为了了解EXTjs,我都去读了一些源代码,当时对javascript不是很了解,感觉很痛苦
22 楼 whiletrue 2010-12-30  
parwin2 写道
nullpoint 写道
想读源码的时候一般都是项目出问题的时候

赞同此想法,因为我工作中就是这样干的,项目出问题的时候想读源码然后解决问题。

赞同,精力有限啊
21 楼 michael.softtech 2010-12-30  
先认真读一个框架的源代码,然后其他的就变得非常容易了。
像我,是先从tomca和spring开始的。一个代表了web server,一个代表了
应用框架。 两个框架都非常有代表性。我觉得想读的兄弟也可以从这两个入手,
花点时间读个大概,然后慢慢啃....
20 楼 iq527 2010-12-30  
keanu196492 写道
unika_ly12 写道
传送门,兄弟


同求传送门。


给学习J2EE的朋友一些值得研究的开源项目
http://miaoxiaodong78.blog.163.com/blog/static/187651362006111325440165/


应该是这篇
19 楼 keanu196492 2010-12-30  
unika_ly12 写道
传送门,兄弟


同求传送门。
18 楼 dengtl 2010-12-30  
初学者源码学习路线:java logging 框架 -> JAAS -> Spring Security
                    Spring其它源码,看你兴趣了,Spring-WS不错。
                    HSQLDB数据库方面的,相当不错,易理解。
17 楼 aq1sw2 2010-12-29  
最近羡慕需要,在读HQ的源码,看了一个半月了,有兴趣的一起讨论讨论
16 楼 java_mike 2010-12-29  
piao_bo_yi 写道
我的经验是,读源代码之前最好熟练使用系统。构思一下如果是你,该怎么样设计,再看源代码。一般的情况是,如果你没有接触过类似的程序,很有可能你读不出来整体的逻辑。当你经过很长时间后,你才明白整体逻辑。有时候你虽然觉得代码简单,但其实是错觉。只是看出来每个单个零件,没有看出来整体。毕竟面向对象的代码,最起码类名得是人类得容易理解的。最好再调试一下,有助于理解。
P.S.读过的代码:Minix(OS), Tomcat... 

+1
15 楼 piao_bo_yi 2010-12-29  
我的经验是,读源代码之前最好熟练使用系统。构思一下如果是你,该怎么样设计,再看源代码。一般的情况是,如果你没有接触过类似的程序,很有可能你读不出来整体的逻辑。当你经过很长时间后,你才明白整体逻辑。有时候你虽然觉得代码简单,但其实是错觉。只是看出来每个单个零件,没有看出来整体。毕竟面向对象的代码,最起码类名得是人类得容易理解的。最好再调试一下,有助于理解。
P.S.读过的代码:Minix(OS), Tomcat... 

相关推荐

    小程序源码 语音跟读 (代码+截图)

    小程序源码 语音跟读 (代码+截图)小程序源码 语音跟读 (代码+截图)小程序源码 语音跟读 (代码+截图)小程序源码 语音跟读 (代码+截图)小程序源码 语音跟读 (代码+截图)小程序源码 语音跟读 (代码+截图)小程序源码 ...

    微信小程序源码(含截图)语音跟读

    微信小程序源码(含截图)语音跟读微信小程序源码(含截图)语音跟读微信小程序源码(含截图)语音跟读微信小程序源码(含截图)语音跟读微信小程序源码(含截图)语音跟读微信小程序源码(含截图)语音跟读微信小...

    易语言源码易语言语音报读源码.rar

    易语言源码易语言语音报读源码.rar 易语言源码易语言语音报读源码.rar 易语言源码易语言语音报读源码.rar 易语言源码易语言语音报读源码.rar 易语言源码易语言语音报读源码.rar 易语言源码易语言语音报读源码....

    易语言源码易语言读内存例程源码.rar

    易语言源码易语言读内存例程源码.rar 易语言源码易语言读内存例程源码.rar 易语言源码易语言读内存例程源码.rar 易语言源码易语言读内存例程源码.rar 易语言源码易语言读内存例程源码.rar 易语言源码易语言读...

    易语言源码易语言汇编读字节集源码.rar

    易语言源码易语言汇编读字节集源码.rar 易语言源码易语言汇编读字节集源码.rar 易语言源码易语言汇编读字节集源码.rar 易语言源码易语言汇编读字节集源码.rar 易语言源码易语言汇编读字节集源码.rar 易语言源码...

    微信小程序——语音跟读(截图+源码).zip

    微信小程序——语音跟读(截图+源码).zip 微信小程序——语音跟读(截图+源码).zip 微信小程序——语音跟读(截图+源码).zip 微信小程序——语音跟读(截图+源码).zip 微信小程序——语音跟读(截图+源码).zip ...

    易语言源码易语言端口读rs232源码.rar

    易语言源码易语言端口读rs232源码.rar 易语言源码易语言端口读rs232源码.rar 易语言源码易语言端口读rs232源码.rar 易语言源码易语言端口读rs232源码.rar 易语言源码易语言端口读rs232源码.rar 易语言源码...

    小程序&教育培训&悦读神器(源码+截图+源码导入教程和视频).zip

    小程序&教育培训&悦读神器(源码+截图+源码导入教程和视频) 小程序&教育培训&悦读神器(源码+截图+源码导入教程和视频) 小程序&教育培训&悦读神器(源码+截图+源码导入教程和视频)小程序&教育培训&悦读神器(源码...

    易语言源码易语言读HEX文件源码.rar

    易语言源码易语言读HEX文件源码.rar 易语言源码易语言读HEX文件源码.rar 易语言源码易语言读HEX文件源码.rar 易语言源码易语言读HEX文件源码.rar 易语言源码易语言读HEX文件源码.rar 易语言源码易语言读HEX文件...

    易语言源码易语言读网页框架源码.rar

    易语言源码易语言读网页框架源码.rar 易语言源码易语言读网页框架源码.rar 易语言源码易语言读网页框架源码.rar 易语言源码易语言读网页框架源码.rar 易语言源码易语言读网页框架源码.rar 易语言源码易语言读...

    易语言源码易语言读网页文件源码.rar

    易语言源码易语言读网页文件源码.rar 易语言源码易语言读网页文件源码.rar 易语言源码易语言读网页文件源码.rar 易语言源码易语言读网页文件源码.rar 易语言源码易语言读网页文件源码.rar 易语言源码易语言读...

    微信小程序源码-悦读神器.zip

    微信小程序源码-悦读神器.zip微信小程序源码-悦读神器.zip微信小程序源码-悦读神器.zip微信小程序源码-悦读神器.zip微信小程序源码-悦读神器.zip微信小程序源码-悦读神器.zip微信小程序源码-悦读神器.zip微信小程序...

    易语言读网页框架源码.rar

    易语言读网页框架源码.rar

    SSCOM源码 DELPHI 源码

    SSCOM源码 DELPHI 源码 绝对源码!欢迎下载

    易语言源码易语言局域网一点通源码.rar

    易语言源码易语言局域网一点通源码.rar 易语言源码易语言局域网一点通源码.rar 易语言源码易语言局域网一点通源码.rar 易语言源码易语言局域网一点通源码.rar 易语言源码易语言局域网一点通源码.rar 易语言源码...

    易语言源码易语言读QQ号模块源码.rar

    易语言源码易语言读QQ号模块源码.rar 易语言源码易语言读QQ号模块源码.rar 易语言源码易语言读QQ号模块源码.rar 易语言源码易语言读QQ号模块源码.rar 易语言源码易语言读QQ号模块源码.rar 易语言源码易语言读QQ...

    基于YOLOv5的水表读数系统源码+模型+使用说明.zip

    基于YOLOv5的水表读数系统源码+模型+使用说明.zip基于YOLOv5的水表读数系统源码+模型+使用说明.zip基于YOLOv5的水表读数系统源码+模型+使用说明.zip基于YOLOv5的水表读数系统源码+模型+使用说明.zip基于YOLOv5的水表...

    小程序项目源码之悦读神器小程序.zip

    小程序项目源码之悦读神器小程序小程序项目源码之悦读神器小程序小程序项目源码之悦读神器小程序小程序项目源码之悦读神器小程序小程序项目源码之悦读神器小程序小程序项目源码之悦读神器小程序小程序项目源码之悦读...

    易语言源码读网络时间验证易语言源码.rar

    易语言源码读网络时间验证易语言源码.rar 易语言源码读网络时间验证易语言源码.rar 易语言源码读网络时间验证易语言源码.rar 易语言源码读网络时间验证易语言源码.rar 易语言源码读网络时间验证易语言源码.rar ...

    (微信小程序毕业设计)悦读神器(源码+截图).zip

    (微信小程序毕业设计)悦读神器(源码+截图)(微信小程序毕业设计)悦读神器(源码+截图)(微信小程序毕业设计)悦读神器(源码+截图)(微信小程序毕业设计)悦读神器(源码+截图)(微信小程序毕业设计)悦读神器(源码+截图)(微信...

Global site tag (gtag.js) - Google Analytics