• 2004-04-03

    代码阅读

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/127200.html

    我眼中的Spring》成功的作了一块引出玉的砖。这块玉是founder_chen的《Spring is comming》。
    谈及使用Spring可能遇到的一些问题时,founder_chen多次提及“代码阅读”。刚好今天买了拿走今年一个技术类图书Productivity大奖《Code Reading: The Open Source Perspective》(中文版《代码阅读方法与实践》),于是今天准备信口开一条关于代码阅读的河!

    Donald Knuth和Richard Stevens这两位大师级人物分别在在自己的旷世之作中点明了代码阅读对于程序员成长的重要意义。我想我是无论如何不可能再锦上添花了,于是我选择不再赘述。

    大多数程序员(包括我自己)在研究代码的时候,都希望准确的弄清楚来龙去脉。
    在我身处C世界的那个年代,从平铺直叙的C代码挖掘自己所需的一切是那么轻松。走进Java,知晓OO,遭遇设计模式,事情突然发生了改变。

    面向对象程序设计中一个很重要的方法就是面向接口编程,这种做法的好处无需我多言。在我沉浸于设计模式之美,程序设计之妙的同时,代码阅读的问题浮出了水面。
    从前阅读Tomcat的启动代码,配置文件加载完毕,然后Server启动,完了。Server是什么?一个接口。单从这段代码本身来说,它的功能我已经看明白了,但究竟这个instance的具体类型是什么,它是如何同Server联系到一起的,一头雾水。当然,后来我弄清楚了Tomcat利用commons digester完成系统配置的手法。
    这是接口编程的好处,完全不关心具体实现。但对于喜欢刨根问底的人来说,绝对是一种折磨。
    前不久,项目组的一个同事问我,为什么我的代码有这么多层,以致于无法一下子看清楚究竟实现了哪些功能。这么做当然有理由的,我还没有疯狂到平白无故增加层次的份上,但结果是无法清晰看透全部。

    眺望未来,如果AOP真能走入寻常百姓家,代码阅读的问题可能会再度加重。采用AOP思想的代码,将不同的逻辑进行了分离,造成的结果就是,仅仅阅读一部分代码根本无法获得全部的信息。

    难道我是在支持C的风格?我可没这么说。
    我和我的那位同事都是以C起家,所以,拿到一段代码的时候,情不自禁就会以C的那套思想往OO代码上套,毕竟抢扭的瓜不甜。入乡要随俗,阅读OO代码之前,我们需要了解一些OO代码的基本习惯,设计模式就是一种OO习俗。对于Java之类可以动态干许多事的语言,动态配置的手法也是基本功之一。
    阅读OO代码,和编写OO代码一样,也应该有个层次概念在那里,关注这段代码的时候就暂时不要考虑其它部分的所作所为,一切都混杂在一起,那就乱套了。
    最近和几位做C的同事交流,探讨的过程中,我发现他们总是喜欢问上面的结构的同时又要了解底层实现。我不是说多了解东西不好,而是说混杂在一起不好。不知道为什么有这个东西,管它怎么做干什么?
    仅仅“看”是看不出多少好处的,如果真行的话,我们的代码也就不必调试了。代码只有运行起来才具有生命力,就像猴毛在孙悟空身上只是毛,而吹了那口仙气它们就能活起来一样。所以,阅读代码之前,先让它编译运行起来,否则,我们只能看到猴毛。
    阅读代码讲求技巧的,这也是我购买《Code Reading: The Open Source Perspective》的原因。我希望通过这本书的阅读,学习别人一些的经验。

    平铺直叙的代码最清楚,所以,我们系统1.x版本中代码获得了“很清楚”的称号。一篇平铺直叙的文章能赢得你多少的好感?如果我以标准中国式教材的语言写这篇blog,你能坚持看到现在吗?
    同样,如果1.x真的那么好,我们也就没有开发2.0的必要了。
    用Java不见得写出的就是OO代码。现实情况是,许多人用Java写出的是C代码,结果是这些可能看着清楚的代码为后期的扩展维护带来不知道多少的麻烦。

    如果你经常在自己参与的项目中看到一个个长达数千行的函数,恭喜你!你在和一群勤劳的程序员一起工作。能把代码写得如此冗长,需要有非常好的耐心。
    对了,Perl语言的发明人Larry Wall说过,程序员的三大美德是:傲慢、急躁,以及懒惰(hubris,impatience and laziness)。

    分享到:

    历史上的今天:

    引用地址:

    评论

  • 哪里可以高到Code Reading电子版本
  • 学习
  • m,.
  • 看完感触颇多,从前写代码的时候,经常不知所措,后来看了涉及模式,看了很多看源的项目,发现代码可以有许多种写法。
  • 在网上找到Code Reading的电子版,兴冲冲的共享给同事,结果有个人说,没有搞错吧,这是C的,不是java的。。。
    回复mochow说:
    大同小异的遭遇!
    2004-04-08 10:15:07
  • 代码阅读,你真的有必要花费大量的心血,甚至还专门买本书看吗?

    诚然,好的代码习惯会使整个项目得益,但是你从阅读代码的方法中是否真正能够得益?你所面临的代码,是否真能够像你所想象的那样去阅读?
  • 你常看什么书呢?推荐几本可以吗?谢谢:)
  • 有同感:)