代码的卫生、习惯及其它...

最近忙,发现家里开始脏乱差了。仔细想想,其实之所以会这样,
是因为经常发现有点脏的地方,也懒得动,总是想等到啥时候大扫除
一下子全部清理干净。后来地面越来越脏,就越来越不注意,进入了
一个恶性循环。

不禁联想到“破窗户”理论,有个破窗户的社区,会逐渐变得不适合居住。
又想到一个经常看到的现象,如果一个电线杆下有一包垃圾,只要清理
不及时,过段时间,这个电线杆就会变成一个垃圾堆。

扯这么多,其实想说的是代码的卫生。代码,刚开始都是很干净的,只是
随着时间推移,随手乱扔的果皮纸屑逐渐增多,最后开始发臭,然后这个
代码就没有人愿意去碰了。在项目中,经常碰到这样的情况。同样的功能,
哪怕以前曾经有人写过,很多人还是倾向于自己重头开始写。原因是什么?
程序员只信任自己的代码,这是其中的一个原因。另一个原因是,以前的
代码确实有个需要学习上手的时间。打个比方,一间房子,不适合居住,需要
进行一番打扫才能住进去,这就是已有代码。而新的代码,则是程序员亲手
垒起来,亲手装修的,虽然耗时长,辛苦,但是心理感觉好。但是呢,这个
新房子对于其它程序员来说,已经时一个堆满垃圾不适合居住的旧房子了。
于是,每个程序员都亲手建一个房子,如此重复下去。

那么,要避免这种无意义的重复劳动,一方面是程序员本身意识的纠正。打扫
一个旧房子,虽然脏一点,但是通常比新建一个房子还是要快和省力。另一个
方面,程序员应该有这样的信念,不能让自己的代码变成垃圾堆。也就是说,
不能容忍自己的代码中堆满垃圾。

如何避免代码成为垃圾堆?个人认为,就象“破窗户”理论一样,不能对破了
的窗户听之任之,而要尽快修复。否则的话,其他人看到第一袋垃圾在这里,
觉得扔第二袋垃圾就没有罪恶感,至少罪恶感不那么强。大家可以想象一下,
在一个窗明几亮的环境中,你扔果皮纸屑之前都会三思。但是站在一个垃圾堆
上面,你扔垃圾之前就不会有什么顾虑了。因此,保持卫生的一个好习惯就是,
不放过第一个垃圾。

当然,如果判别某段代码是不是垃圾,或者及时发现第一段垃圾代码,那就是
另一个话题,例如用ut,用code review,等等。《Working Effectively with Legacy Code》
这本书里面,提到了Legacy code 的定义:

Code without tests is bad code. It doesn't matter how well written it is;
it doesn't matter how pretty or object-oriented or well-encapsulated it is.
With tests, we can change the behavior of our code quickly and verifiably.
Without them, we really don't know if our code is getting better or worse.

有人会觉得我管的太细,不揪架构、设计,反而去管代码,只见树木不见森林。我个人
的看法,架构、设计再好,都需要代码来进行实现。如果这个基础没打好,以后这个
代码总是会变成无人想碰的垃圾堆。

当然,我也反对无意义的追求完美。我不是个有洁癖的人,所以,代码到什么程度就算是
干净的了?我个人的看法是,Clean code that works。当然这一点其实不容易达到,但是
做为一个程序员,我还是努力去追求这一点的。

主站: http://blogsite.3322.org/jspwiki/
posted on 2006-04-03 10:27 SimonLei 阅读(1080) 评论(1)  编辑  收藏
评论
  • # re: 代码的卫生、习惯及其它...
    pet
    Posted @ 2006-04-06 11:13
    深有同感,最近一直在改别人的代码,才发现干净的代码和结构有多重要。  回复  更多评论   

只有注册用户登录后才能发表评论。


网站导航:
 

统计