读代码

其实我开始读源码才几天时间,但有点心得,就写出来吧,以期抛砖引玉。
阅读源代码的利弊我不谈,我只说该如何读

首先是积累,当到了一定条件,你会迫不及待的想要去读,因为你想拥有程序的控制权

我把一份陌生的源代码比做一个陌生的城市,你将在里面熟悉道路,

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

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

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

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

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

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

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

补充一点经验:
当你读过一些模块之后,看到类似的模块就会下意识的去猜测该模块内部的代码结构,如果你读的够多,实践够丰富,模块就了然于胸了。

比如看到一个方法名,根据方法的字面意思就能猜测出该方法的代码结构,看到类名,就可能会猜测出它该要有什么方法。
这时读代码的速度就快了。

代码是一个有机体,当你具有把一份源代码解构成一个有机体的能力的时候,读代码其实并不痛苦。可是我还没有达到我想像的哪个层次。

我觉得新手不应该去读。。。
首先读不懂,反而会降低自己的兴趣,把自己脑袋搞得跟浆糊一样

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

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

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

对于源代码,我只能读懂小部分,我认为即便是大牛,全读懂也很困难.原因是别人代马里很多状态数据很难判断是干吗的,代码无非是状态+流程,如果每个数据状态都明白,流程应该不难,可是很多代码里有私有算法和状态无法理解,而且这些东西也不会出现在文档里.比如读Hassian的源码,我最感兴趣的就是Hassian如何处理流的,结果就是Hassian的包中的那些自定义流最难懂,比如
final String xxxx = "OX4f";谁知道这0x4f代表什么.

源码之下,了无秘密,一个没有好奇心的人,是不适合做程序员的!

读代码主要是想弄清楚代码想要体现的思想,那么建议先弄清楚你看的代码主要的功能以及思想,带着这些问题去看,最直接的方式应该是弄个TestCase跑跑,跟着走就OK了。让它带着你走,比你自己找路来的快吧!?

哈哈··好奇害死猫啊。


读源码好,能够理清思路,不然的话就成了黑盒程序员,就像微软的xxx技术、xxx语言,搞到程序员都去写黑盒程序去。。。

关键问题是:如何从源码中获得东西,你读懂归读懂,总结出了然后用于提高自己代码的东西有多少??

读源码不难啊,带着问题读,找到代码实现的主线,顺着线走,当然会遇到很多分支,可以自己判断这些分支重不重要来决定是不是需要深入。

个人觉得读源代码很有必要,这样让自己对系统有个全局的感觉,看到一个抛出的异常都知道发生了什么。这样在做应用就很方便了。

读源码和实现源码还不是一个难度层次上的啊!但可以为我们写好代码做积累。
熟读源码三百段,不会写来也会偷

爱干点啥就干点啥,关键是自己觉着是否有收获,是否爽~~~

读书破万卷,下笔如有神。结合我的感受表达一下我的想法:

读懂代码的最高标准是熟悉代码所有的功能实现,了解所有的状态变量,清楚所有配置参数的作用。但如果达到这样的标准能代表什么呢?当然肯定能用好代码,但更重要的是要深入理解代码解决问题域的思想、算法、灵活扩展,一定带着问题领域难点取读,看代码是如何解决的?我们读代码的最终目的是理解代码解决问题域的思想。只有理解了读懂的代码才能为你服务,否则永远停留在会用上。

读源代码的主线是找到入口,顺着流程走下去就ok了
如果像spring这样有自己的TestCase看起来就更顺了,至少是自己呆着问题去读的

其实读了之后,自己需要去感悟,为什么是这样设计的,怎么起变量名,怎么把大方法分成小方法,怎么加注释,一切都需要自己去感悟的

建议在阅读的过程中同时将类图画出来,最后回顾起来对整个程序的架构和设计思路就能够一目了然。

我觉得可以读活的代码,而不是像看书那样地读.
活的代码是在IDE中设置断点后, 看代码的执行顺序.

读源代码让我想起了高中作语文阅读理解题的感觉,你要从有限的代码中读出代码本身并没有提及的问题..需要一定的基础知识

为什么作者这里使用内部类,而不把类分离出来?;为什么作者写了abcHelper类而不把指责直接付给ABC类本身?;这里为什么要用回调,回调降低了谁和谁的耦合度?......我觉得源码里面先从jdk源码搞起效果较佳,因为JDK具备了大多数JAVA针对某些问题习惯性或者说经典实现方式

嗯,说说我怎么读源码,把整个包或应用导入Eclipse中,然后找主类(其他随便都行),看到哪个类或方法不懂,直接Ctrl+点击过去,看具体实现,有点递归查看的意思。这样比较方便。

我觉得楼主说的挺好,我新接手一个项目,需要读代码,发现我理解的比较透彻的地方,都是用的我比较熟悉的模式。

学习高手的代码,基础还是比较重要的。

应该是基本功,熟悉风格,熟悉规范,方能驾轻就熟。

break point tracing。这是我的习惯。

其实楼主说得对.....想做好程序员读不懂代码怎么思考啊..多看别人写的代码...自己也有一些新的想法...也许别人的做参考,自己可以比别人写得更好....不过我看代码主要看思想....

OO基础都不会的话,读别人的代码,的确很累。首先OO的根本其实不光光什么继承,多态,那只是应用到计算机里的东西。OO思想的根本就是你看到一个东西,就能分出他的大类是什么,大类里的小类是什么,它们各有几种属性,会有几个方法。然后才是进行写代码,当然这个时候封装,继承和多态才都会去到,如果用不到,那就再好好理理清。

建议大家去读读“编程之道”。读上几遍,会很有收获。

主要通过功能去跟踪,然后再回归到整体

读源码的好处是显而易见的,但关键是你能不能读懂。

我觉得,首先你要看你是不是有这个能力,想LZ这种方法是可以的,想将源码的主干弄清楚,再解决细节问题,分而治之,逐层解析,很好的方法,这个关键还取决于你所看的源码是按照模块化\OO思想编写出来的,而且逻辑非常清楚,不然也没有用。就着编写者的思维去看源码,你会更有效率。

时间: 2024-10-10 15:06:16

读代码的相关文章

读代码整洁之道想到的

1.勒布朗法则:later equals never 对于我来说:很多事如果往后拖的话,再重拾的几率就很小,所以要逼迫自己捉住现在,把手头的事情尽可能的做到尽善尽美,否则,日后只会越拖越远. 2.糟糕的代码所带来的深痛影响在于将来他会使你深陷泥沼 刚开始写的代码比较简单,但是后面要不断的添加功能,如果以前的代码写得十分冗余,以后再添加新功能所带来的麻烦将是不可估量的.所以代码一开始就要写的简单有效,为以后做铺垫. 3.态度:作为一个程序员,态度很重要:要以专业的态度来对自己的代码负责 4.命名:

《编写可读代码的艺术》读书笔记

表面内容 1.代码的写法应当是别人理解他所需的时间最小化.一条注释可以让你更快理解代码.尽管减少代码行数是一个好目标,但是八里街代码所需的时间最小化是一个更好的目标. 2.选择专业的词,比如函数名使用getxxx(),这个get没有表达出很多信息,是从缓存中得到?从数据库中得到?或者从网络得到?如果是网络,可以用更专业的fetchxxx()或者downloadxxx() 3.tmp,retval这样泛泛的名字,可以根据情况命名,比如tmpFile,让人知道变量是一个临时的文件.(tmp这个名字只

《编写可读代码的艺术》——简单总结

上个月好像冥冥中自有安排一样,我在图书馆看到这本 <编写可读代码的艺术> ( The Art of Readable Code) 期间因为工作的原因,停停看看,这几天终于看完了,可以大概总结如下: 1. 把信息装进名字里,给变量起个好名字 2. 审美,把代码分成段落,对齐 3. 应当取个好名字,而不是用注释去粉饰它 4. 用注释记录你的思想,比如当时为什么要这样写,记录开发过程中有哪些思考 5. 将自己代码中的不足和瑕疵记录下来,方便今后别人的维护,不要顾忌别人的看法! 6. 注释应该言简意赅

《编写可读代码的艺术》---变量和可读性

对变量的草率使用,会导致程序的难以理解,原因是以下几点 变量越多,就越难以全部跟踪他们的动向 变量的作用域越大,就需要跟踪它的动向越久 变量改变的越频繁,就越难以跟踪它的当前值. 下面来讨论如何改善这些问题. 1 减少变量 仅当我们需要的时候,才使用变量,下面将列举出一些没必要存在的变量的. 1.1 没有价值的临时变量 一般有经验的程序员是不会刻意写个没有价值的临时变量.造成临时变量没有使用价值的原因,可能是多次修修改改之后遗留的结果. 来个日期赋值的例子 DateTime now = Date

读代码还是读文档,来自知乎

题目是陈皓回答的,来自知乎.我只是希望更多的人看到. Jeff Atwood说过这么一句话:“Code Tells You How, Comments Tell You Why”. 其实,Jeff这句话并不准确,另外,我把其扩展一下—— 代 码 => What, How & Details文档/书 => What, How & Why 可见,代码并不会告诉你 Why,看代码只能靠猜测或推导来估计Why,是揣测,不准确,所以会有很多误解.而且,我们每个人都知道,Why 这个东西是

如何读代码

作为程序员,如何读懂一段代码是我们必须要掌握的一项基本技能,而写代码则是吃饭的家伙,更是要勤学苦练. 对初学者来说,读懂一行代码并不是一件简单的事,遇到稍微涉及多个循环多个函数的代码往往就会看的晕头晕脑. 所以总结了一下方便初学者读代码的方法,希望大家可以参考. 看注释.注释的用途就是便于编程人员理解代码.多看注释能快速帮助你了解程序实现的功能及程序的组成模块等. 逐行分析.逐行阅读代码,尽量弄清每一句的含义. 善用调试.在调试模式下,我们可以很方便直白的看到随着每一行代码的运行,程序中各个变量

第一次编写简单的中间件测试工具(2) - 读代码的方法

加入新员工训练营的有开发也有测试,大家的coding水平参差不齐. 我发现一个问题,就是当面对一个新学的语言时,我们这期训练营里除了我以外所有的测试人员甚至一些开发人员都不会读代码,不知道怎么去读,或者虽然读了,却一知半解,毫无效率. 首先分享一下我读代码的方法供从手工测试转自动化测试的同学们参考(可能各人思维模式不同,仅供参考): 我读代码时的思维方式属于一级一级严密的逻辑思维,所以一旦我的逻辑链中间断掉,我就不能理解这些代码. 一句话总结:先跑起来,再调试,理解原理,掌握细节. 第一步,看有

编写可读代码的艺术笔记

编写可读代码的艺术 表面层次上的改进 命名.注释以及审美--可以用于代码库每一行的小提示. 简化循环和逻辑 在程序中定义循环.逻辑和变量,从而使得代码更容易理解. 重新组织你的代码 在更高层次上组织大的代码块以及在功能层次上解决问题的方法. 精选话题 把"易于理解"的思想应用于测试以及大数据结构代码的例子. 第1章:代码应当易于理解 1.代码应当易于理解. 2.代码的写法应当使别人理解它所需的时间最小化. 第一部分:表面层次的改进 第2章:把信息装到名字里 1.使用专业的单词. 2.避

读代码之htmlParser

在以前使用HtmlParser时,并未考虑过遇到org.htmlparser.tags之外的Tag怎么处理.直到碰到这样的一个标签,如果不加处理,HtmlParser无法对其进行处理.查阅自定义标签之后才明白,控制HtmlParser解析网页结构的是,PrototypicalNodeFactory implements NodeFactory.每一种Tag都需要在NodeFactory中注册一下(registerTag()).默认注册org.htmlparser.tags中的所有Tag.如果有自