程序员应知——破窗与童子军军规
首先让我来解释一下这两个词,尽管看起来二者之间没有什么必然联系。
破窗说的是,一个小区,本来干净整洁,没有犯罪事件,大家安居乐业。然而,忽然有一天,一个窗子被打破了,但是没有人管。接下来,不好的事情接连发生,显示有人乱扔垃圾,接下来是随地大小便,整个环境变得脏乱差,随之而来的就是打架斗殴事件的出现,最终导致出现犯罪的事件。也就是说,一件很小坏事儿,如果不加控制的话,也会演变成严重的事件。
而童子军军规我是从Bob大叔(Robert C Martin)那里知道的,童子军军规中有条规定,当你离开一个地方的时候,要让它比你来的时候更整洁干净。这样的话,童子军扎营的地方会越来越干净。
大家应该看出二者之间的关系了,其实很简单,前者意味着恶性循环,而后者意味着良性循环。
在我们的开发过程中,同样存在着这样的问题。
我在工作的时候,经常会修改别人写的程序,其实这也是作为程序员经常要做的一件事儿。而由于最近一年多修改的都是国内的软件公司开发的程序,大家也知道在国内开发的过程中,有很多时候,为了赶进度,对于代码规范的遵守会很差,所以经常会遇到比较乱的程序代码,现象主要体现在这样几点上:
1、最过分的一点,代码没有进行合理的缩进。这种代码一看就是复制粘贴过来的。
2、不合理的命名
3、过长的过程和函数
4、魔法数字,过多的标识弄的人晕头转向。
在无意识的情况下,处理这种代码的方式也和我的心情有关,呵呵。
如果心情很差的时候,可能是由于业务部门一个劲儿地催促,或者休息不好等等原因,我可能也会不管不顾,也去复制粘贴一堆代码,然后只要能够解决问题就好,在页面上如果可以侥幸测试通过,就提交代码,万事大吉。
如果心情平静的时候,这时应该属于平静的阶段,我会注意自己的代码规范,比方说格外编写一个过程或函数,在需要的地方简单调用,而不是再加长原来的代码。对于自己的代码缩进,也保证一个Tab或者四个空格的空间。命名必须有意义,且表示的是正确的意思等等。但是不会管原来的代码,让它们继续乱着去吧,后来人会比较之前的代码和后来的代码的,哈哈。我可是在自己的代码附近签上自己的名字了。
如果心情很好的时候,我会清理原来的代码,在修改代码之前先把所有不符合规范的地方修改一遍,比方说缩进;比方说命名。然后将代码重构,把长过程修改为维护性更好的短过程。一切完毕之后,再去修改代码,真的是心情越来越愉快,最后修改问题花费的时间也会很少。
回想一下自己的三种情况,抛去中间的不算,第一种正好符合的是破窗理论,而第三种符合的则是童子军军规。
其实,有些时候真的不能仅仅凭借心情来做事,如何来对待原本可能会有些问题的代码,也是作为程序员的一种素质吧。试想一下,如果团队中的每个人都按照破窗理论的形式做事,那么用不了多久,系统就会变得不可维护,这恰恰是陷入了恶性循环;反之如果大家都能够遵守“童子军军规”,那么代码的质量会越来越高,稳定性和可维护性会越来越高,良性循环会让我们大家每天都有好心情。
经常会有人说,作为程序员一定要有团队精神,但这种精神并不是说说而已的,需要实际的行动来体现的。而上述的两种做法恰恰也可以反应出一个团队成员是否具备良好的团队精神。
遵从破窗理论的成员,就是没有顾及整个团队的利益,只顾自己的进度和工作量,不仅不改善代码,反而不断地让代码中的问题增多,这样怎么能说是有团队精神呢?
而遵守童子军军规的成员,他们是把整个系统的代码都看成是自己的代码,自己的利益是与整个系统的质量相关联的。他们努力改善所看到的有问题的代码的质量,表面看来对自己没有太大的好处,反而有时候可能会让自己的进度稍稍后延,但是如果整个团队都这么做的话,那么在不久之后就会体会到优质的代码给整个团队带来的好处。他们正是具备了非常不错的团队精神。
所以,想要做一个优秀的程序员,应该遵守童子军军规,而不是将破窗情况越变越严重。