童子军是美国社会针对未成年人的一种教育实践制度,加入童子军的小朋友都要学习并遵守一些规则,然后获得各种各样的勋章。其中一条规则是离开宿营地前进行清扫活动的原则,简洁明了:
Leave the campground cleaner than you found it.
假设某个小朋友来到某个宿营地,不幸发现地上有两处垃圾,然后他自己在接下来的日常活动中制造了一处垃圾。那么当他离开时,不仅要清理掉自己的垃圾,还有处理早先小朋友留下的两处垃圾。他不可以找老师告状,去揪出是那个坏蛋留下了垃圾不打扫。但是他也可以偷点儿懒,那两处垃圾只清理其一,剩下的一个留给下一个不走运的小伙伴。
由此可以看出这条原则的两个有趣的特点:
它强调主动承担起更多的责任,只可以变好,不能变坏,也不可以去追究别人的错误,自己做一个”好人“就行了。
它并不要求as best as possible,只要能多做贡献即可,多做多少,任由发挥,内心不必惶惶不安,担心自己做的还不够好。做一个不够好的”好人“是完全可以的。
如果说第一个特点有点不合情理 - 谁会心甘情愿的帮助纠正别人的错误呢,那么第二个特点却又非常体贴。假设有个小朋友极其的不走运,走进一个到处是垃圾的宿营地,那么按照这个原则,离开时他并不需要清理所有这些垃圾,甚至他可以选择只清理最小的那堆垃圾,依然完全符合这个原则,获得荣誉勋章。而后来的小朋友即使每个都这样"偷懒“,垃圾的总数依然会持续下降。事实上,如果所有的小朋友都遵守这个原则,很难会出现”垃圾遍地“的极其恶劣的状况,除非是初始状态(软件项目中,例如遗留代码的质量低下),或者异常情况比如某个小朋友制造出大量的垃圾,最后离开时却生病了(或者装病,呵呵)不能执行清理行动(软件项目中,例如赶工,或者新手技术能力不够等)
第二个特点投射到软件开发中,还有特殊的指导意义。当实现新的功能需要修补过去的代码时,修补的范围应该限制在一定的范围,不轻易的做大规模的重构或重写。因此,”偷懒“不再是遮遮掩掩的行为,而是被鼓励甚至强制的。
那么是不是因为这个原则有其”体贴“的一面,小朋友就会自觉遵守了呢。这样的想的话就太小看人的惰性了,无论小朋友或者成人,都很难做到人人遵守,愿意遵守的人,也很难次次遵守。而一旦有某个人遵守的不好,负面效应就会被传染放大,其他人会越来越难遵守下去。
因此,在一个集体中要推行童子军原则,还需要配套的措施。对于小朋友们,有一个指导员即可,负责检查小朋友的清洁成果。对于一群心智成熟的程序员,游戏规则要稍微复杂一些。