破窗理论最初是犯罪学的一个理论,认为环境的不良现象如果被放任存在,会诱他人效尤,甚至变本加厉。以一幢有一扇破窗户的厂房为例,如果窗户不被修好,人们可能认为这是一间废旧的厂房,假以时日其他的窗户也会被破坏得七零八落。一个通道里的墙壁,如果出现了一些涂鸦或者牛皮藓广告,而没有被及时清理,过不了多久这面墙上就会布满乌七八糟、不堪入目的其他涂鸦或广告。一个夜市的角落,如果出现了丢弃的塑料袋和饮料瓶,其他路人和食客也会视作理所当然地顺手把垃圾也扔在那个角落。
我最早是在《整洁代码之道》一书中了解到破窗理论的,隐喻很形象和微妙:说的是程序员在写代码的时候,如果发现原有的代码很糟糕,心底里会一边骂一边不由自主地拷贝粘贴,如法炮制出同样风格的烂代码。于是,在代码走查和故障复盘的时候,我们听到最多的辩解是:原来的代码就是这么写的……
破窗理论在一定程度上揭示了,人们对看不惯的东西却视若罔闻的内在动机:因为有先例,因为别人这样做了并未收到惩罚,会误认为同样的小错误也应该没有问题,法不责众;所谓的小错不断累积,最终成为压垮骆驼的最后一根稻草。
这个星期,无线的同事过来交流团队质量改进的经验,除了“破窗理论”,还提到了“童子军军规”。童子军军规说的是什么呢?美国的童子军,是小朋友们一起行军露营,其中一项规定是:当你离开一个露宿营地的时候,一定要让它比你来的时候更整洁干净一点。提出这样的规定,一方面让童子军们从小养成自觉自律的好习惯,另一方面也保护了环境。
把破窗理论和童子军军规放在一起,不是正好印证了一句古训吗?勿以恶小而为之,勿以善小而不为。敏捷团队,最重要的就是内在的主动而持续地改进。不需要一次迈出一大步,做一个特别大的改革,而是要小步快跑,快速迭代。面对遗留代码中的“坏味道”,不要破罐子破摔,而是常存敬畏之心,每次能顺手修改坏味道的代码,一小步一小步地偿还这些技术债务;面对新写的代码,以整洁代码的思想为指导,保证可读性和可维护性,坚持写单元测试,代码质量终将会有改观。