读别人写的代码 VS 自己写代码

转载 2012年03月29日 12:58:26

概述:专业程序员非常重要的一项技能是读别人写的代码,这项技能甚至比自己写代码更重要。

分析:

  这让我想到很多程序员讨厌去阅读代码,来接受它吧。人人都喜欢编写代码--写代码是很有乐趣的事。但阅读代码却是一种困难的工作。它不仅仅繁重,而且很无聊,让我们面对这个事实,任何不是自己写的代码都是差劲的(嘿嘿,虽然我们没有这样说过,但是其实我们都是这样想 的)。甚至当你写完代码后的仅仅几个小时之后,你的那些代码就开始变得越来越烂了,时间一长,你就会把它当作看起来的那种差劲作品。

  所以,你又何必要去花费时间来审视别人蹩脚的代码呢,这段时间你完全可以用来 自己去写一些非常优秀的代码,为什么不这样尝试一下,把自己写好的代码放上几个小时再回头看看,它是否依旧非常优秀呢?如果你不站在前辈们的肩膀上,你将没有可能成一个为技艺精湛的大师。其中一种途径就是亲自找到一个大师,让他把他所有的知识全部传授给你--当然这是有可能的,虽然可能性不高,你必须非常走运才能获到这种机会。然而你可以不用想着去碰运气, 我们很幸运的处在这样的一个职业里--大师们的经验和知识都在那里等着我们去吸收,这些都蕴涵在他们所写 的代码里。你所要做的事就是去阅读它,当然它可能会比找一个人坐在你旁边向你解释这些多占用一点时间,但是这是实现起来可能性较高,透视全局地思考下,若想成为优秀的木匠,你就必需观察大量的拥有优良结构的家具。

  ……

  【未完】更精彩的内容进作者的空间去看吧 >>> [译文]为何我喜爱读他人的代码,而你也应该去喜爱它

以下为两位笔者分享的一些经验,借来展示一下:

标题:说说我对阅读源代码的一些技巧方法,其实这并不难。
作者:afadgaeg
原文:http://afadgaeg.javaeye.com/blog/264490
正文:

  阅读源代码的利弊我不谈,我只说该如何读.

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

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

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

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

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

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

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

  补充一点经验:

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

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

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

 

标题:如何读代码?
作者:卢声远<michaellufhl@yahoo.com.cn>
原文:http://blog.csdn.net/michaellufhl/archive/2010/10/09/5930570.aspx
正文:

  有時候在察看开源項目的時候,如果你想參與其中,那項目的负責人基本上都是建议从bugfix開始了解程序,了解代码。所以第一个建议就是从bugfix和添加新功能入手 。事實上在公司參加一個新項目的开发或者维护也大多是從bugfix入手。這樣入手的好處在於可以集中精力去了解以小块代码的運作機制。显然這很符合人的思維規律-做简单的事情总比做复杂的事情來得容易和高效。当然這不是盲人摸象,要bugfix的話至少自己要知道整個軟件的功能和層次,这需要閲读文檔而不是代码。

  说到注释,这个时候就太有用了。不用说是别人写的代码,就是自己几个月前写的代码自己也需要仔细看一下才能搞懂。但是残酷的现实就是注释很少,更残酷的现实是越是低质量的代码,它的注释越是少。怎么办?只能猜 了。如果我们碰到一个很长的方法,但是我们需要跳过去看调它的代码,我们就需要猜测这个方法的功能了。然后再回过头来仔细看那个方法。我们可以运气好的话作者会取很合理的class名,method名和变量名。其实里面有个矛盾:很复杂,内聚很松散的method或者class,它们的名字就根本不可能取得合理。这个道理很简单,一个method里面做了很多事情,你就很难给它取一个合适的名字。像removeUserAndItsClientsAndUpdateTime(), 或者干脆来个缩写removeUCUpdateT()。 这样的名字基本没有可读性。

  还有就是读上层 和读下层 。读上层就是在代码的 高层阅读,碰到底层的API可以猜出它的作用。这样把一块高层的代码像读逻辑那样粗线条梳理清楚,其实就是一大块一大块地读代码。读下层就是把底层的代码if else一一读懂。这两者缺一不可。

  碰到很乱的代码几乎只能利用IDE debug, step by step 得一行一行执行。因为乱,所以没有仔细看整体结构的必要,而最有效的就是step by step了。当然有些时候程序逻辑必须依赖数据库或者外部数据,这样的话光看代码也不行。也只能step by step或者运行时log。

  在OO的时代design pattern也已经深入人心。在看高质量代码的时候会发现他们的代码有个特点就是相当抽象,或者说面向抽象。里面有很多interface, abstract class, 还有anonymous class, 很长的继承链。我认为既然作者写程序的时候面向抽象,那么我们读程序的时候也要面向抽象 。我们经常在读代码察看某个变量的时后用IDE的查看功能点进去,然后发现它是一个接口全无实现。很多时候我们的第一反应就是找到具体的实现类,我倒是认为可以关注这个接口先往下读代码,然后回过头来看实现。既然作者的意图就是让接口来工作,我们就可以先了解作者的意图来看代码。顺便说来,要读懂很抽象的代码,读者自己首先要有很好的OO概念和design pattern的知识。

  精彩文章推荐:今年程序员们解决问题的顺序

读别人写的代码 VS 自己写代码

概述:专业程序员非常重要的一项技能是读别人写的代码,这项技能甚至比自己写代码更重要。 分析:   这让我想到很多程序员讨厌去阅读代码,来接受它吧。人人都喜欢编写代码--写代码是很有乐趣的事。但阅读...
  • e_wsq
  • e_wsq
  • 2012年02月25日 12:50
  • 336

阅读源代码的方式的心得

不知不觉从毕业到现在已经有一年的时间了,看了很多的代码,但是看过后,或者就在看的过程中,对很多代码流程步骤,只是过一遍而已,没有全面深刻的理解。所以看过之后很容易的会忘记,处理问题的时候又要重新研究代...
  • xiongping_
  • xiongping_
  • 2015年08月18日 16:25
  • 266

为什么别人写的代码换个人就看不懂呢?

     端午小长假,在北京的同学相约小聚,期间,一同学问我:你们公司的开发人员每天写不写工作日志?你们公司存在别人写的代码换个人看不懂的情况吗?有什么解决办法吗?      我觉得这个问题,在中国...
  • jkafei
  • jkafei
  • 2009年05月30日 07:14
  • 1337

如何阅读其他人写的java代码

http://blog.163.com/liuxulin@126/blog/static/51097394200881910274124/   我们如何才能够快速理解和读懂其他人写下的Java...
  • pgalxx
  • pgalxx
  • 2011年10月12日 11:38
  • 4239

读代码 VS 写代码

概述:专业程序员非常重要的一项技能是读别人写的代码,这项技能甚至比自己写代码更重要。...
  • lfhc1025
  • lfhc1025
  • 2010年10月28日 17:01
  • 247

如何阅读别人的代码?

经过这几年的编程学习,我认为想要提升编码水平的最佳途径就是多看、多写,然而阅读别人的代码也确实是快速提升代码水平的一个技巧。在今天的文章中,我将与大家探讨如何阅读别人编写的代码。我要明确地表述这种方式...
  • duoduo_11011
  • duoduo_11011
  • 2017年03月20日 09:50
  • 231

读代码原来比写代码更累

今天下午到深夜,大约用了12个小时的时间,用眼睛追踪 Linux 内核里 sys_open 向下的调用链。截至目前为止共追踪函数十个。。平均每小时不到一个函数的速度。天啊!昨天我用了这一半的时间写了 ...
  • Wolf0403
  • Wolf0403
  • 2006年08月11日 01:18
  • 2378

你写的代码,是别人的噩梦吗?

阿里妹导读:Frank,是来自阿里国际技术事业部的高级技术专家,从业十年,也是一位英语说到飞起的型男。今天他将与大家聊聊关于企业应用架构实践的话题。阿里高级技术专家Frank从业这么多年,接触过银行的...
  • b0Q8cpra539haFS7
  • b0Q8cpra539haFS7
  • 2017年12月15日 00:00
  • 1942

如何阅读开源代码

 分析一个源代码,一个有效的方法是:  1、阅读源代码的说明文档,比如本例中的README, 作者写的非常的详细,仔细读过之后,在阅读程序的时候往往能够从README文件中找到相应的说明,从而简化了源...
  • dofeel
  • dofeel
  • 2006年08月16日 11:05
  • 7771

自己写不出代码我该怎么办

在作业和练习中,自己写不出代码,这是一个在学习中经常出现的问题, 那么该怎么解决这个问题呢?   1:先分析实现的思路   拿到作业,按照要实现的功能,先分析去实现的思路。     如果完...
  • wuha0
  • wuha0
  • 2011年12月07日 20:27
  • 3231
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读别人写的代码 VS 自己写代码
举报原因:
原因补充:

(最多只允许输入30个字)