破窗理论
在过去的一篇文章里,我曾经提到过“破窗理论”。对于下面这个实用主义程序员的观点,你或许很熟悉:
不要放任“破窗”(不良的设计、错误的决定或者糟糕的代码)不管,一旦发现就要尽快修复。如果时间不够,那就先把它隔离起来。你可以把这些令人不快的代码注释掉,或者显示“尚未实现”的消息,或者用虚假的数据来代替。你应该采取一些措施,以防止进一步的破坏,并且表现出一切尽在掌握之中的样子。
我们看到过,一些曾经运转良好的系统在发生了一些错误之后便迅速恶化。导致软件腐烂的因素有很多(我们会在别处再讲到这些因素),但相比之下,忽视问题会使软件腐烂得更加迅速。
对于程序员来说,这是一个非常好的建议。下面,我将试图把这个故事讲完整。
破窗理论出自于1982年的《大西洋月刊》上的一篇文章。这篇文章非常值得一读,因为你可以通过它深刻了解到这个理论背后“人”的因素:
从社会层面上看,无序和犯罪在发展顺序上通常是紧密相连的。社会心理学家和警察倾向于认为:如果一栋楼的一个窗户破了,并且留在那里不去修复,这栋楼的其余窗户都会很快被破坏。这种事情的发生与邻里关系无关。但它也并不会大规模爆发,因为一些地方住着有破坏窗户倾向的人,而另一些地方住着爱护窗户的人。然而,一个长久没修复的破窗户释放出来的信号是“没人管”,这会让人觉得,即使再毁坏更多的窗户也不会付出什么代价。(砸窗户一向是很好玩的!)
Philip Zimbardo是斯坦福大学的一位心理学家,他在1969年的报告中向我们展示了他所做过的有关破窗理论的实验。他将没有车牌号的汽车分别停在Bronx和Palo Alto的街头来进行对比。在Bronx,因为这辆汽车看似被丢弃了,在10分钟之内就开始有人来破坏了。第一批破坏者是一个家庭,包括爸爸、妈妈、还有他们年轻的儿子。他们拿走了散热器和电池。在24小时之内,这辆车上几乎所有值钱的东西都被拿走了。在此之后,各种肆意的破坏还在继续——窗户被打碎,车饰被撕破,孩子们开始用这辆车来当作自己的游乐场。
这些众多的成人破坏者中,绝大多数都是穿着体面的白人。然而在Palo Alto,汽车在超过一周的时间里都没有遭到破坏。于是,Zimbardo自己去用锤子砸了一下。没过多久,路过的人也加入了破坏大军。在几小时之内,车子被翻了个底朝天,并且被彻底毁坏了。同样,这些破坏者中绝大多数是白人。
Bronx(布朗克斯)是美国纽约市的五个市区之一,是纽约市有名的贫民区,犯罪率在全国数一数二。20世纪70 ~ 80年代,该区住宅区时常发生纵火案,直到90年代初纽约市政府大力打击后才有所改善。——译者注
Palo Alto(帕罗奥多)是美国加州的一个城市,很多人将它称作为硅谷的中心,因为那里有很多高科技公司,斯坦福大学也在那里。——译者注
对于那些出来找乐子或者抢夺的人,甚至那些从未想过自己会做出这样的事情、并且觉得自己遵纪守法的人来说,无人照看的财产成为了一个公平的游戏。这得归咎于Bronx地区的生活状况,以及当地的人口流动,汽车被丢弃以及东西被损坏和偷盗的频率,加上过去“没人管”的生活体会,这些都使得破坏行为发生得更加迅速;而与之相比,Palo Alto就要好得多,那里的人们觉得私有财产是需要保护的,并且恶作剧是要付出代价的。但当公众的相互尊重和道德底线被“没人管”降低时,破坏行为将有可能发生在任何地方。
关于这点,甚至有一本书做了专门的描述。至于这本书,我觉得有趣的是它关于混乱的看法:即使是那些看起来完全不相干的、琐碎的不良行为,比如在墙上乱涂乱画或者轻微的破坏,都会导致进入一个最终走向混乱的恶性循环:
我们认为,那些被忽略的行为也会导致社区秩序的沦落。在几年甚至几个月的时间里,再稳固的邻里关系——关爱家庭,相互关心对方的孩子,抵制不受欢迎的入侵者——也会发生变化,最后社区会变成一个令人恐惧而不宜居住的地方。一些东西被丢弃,野草长了起来,一扇窗户被弄坏;大人们对吵闹的小孩置若罔闻,小孩们开始变得更加吵闹;一些家庭开始搬出去,陌生的人搬了进来;小年轻们聚在小店门口嬉戏,老板要他们走开,他们拒绝,于是发生了争斗;垃圾开始堆积,人们开始在杂货店门口喝酒;最后,一个醉汉倒在人行道上,睡着了,但无人过问;行人们开始碰到乞丐……
到这个时候,严重的犯罪行为将会发生,对陌生人的暴力袭击也变得不可避免。很多居民都会认为犯罪(特别是暴力犯罪)正在呈上升态势,他们会据此改变自己的行为。他们会尽量少地在街上走动;在街上的时候,他们会和路人保持距离,避免眼神接触,尽量不说话,并且走得很快,生怕被卷进什么事。对于一些居民来说,这样的情形对他们影响不大,因为邻里关系并不是他们的生活,而只是他们的寄生环境。
他们的兴趣在别的地方。他们可以四海为家。但对于其他人来说,影响却是重大的。除了生活的柴米油盐,他们更需要在当地生活的一种存在感和满足感。对于他们来说,如果没有几个可以信赖的朋友交流交流,这种邻里关系名存实亡。
编程是非常注重细节的!如果你不能够掌控这些细节,你就会有一种失控的感觉,而你的项目失控也只是一个时间问题。或许,我们就应该谨小慎微。