价值观、原则、模式与最佳实践

在软件开发思想和技艺的的“道”与“术”方面,存在着各种不同抽象程度的层级。在软件开发——以及其他一切行业——方面,指导我们的方向和选择的,从抽象到具体依次是:

价值观 => 原则 => 模式 => 最佳实践

越往左越抽象,越往右越具体。越往左内涵越少、外延越大,越往右内涵越大、外延越小。越往左数量越少,越往右数量越大。越往左违反的代价越大,越往右违反的代价越小。

本人认为价值观和原则属于“道”的范畴,模式和最佳实践属于“术”的范畴。欢迎拍砖。

价值观

什么是价值观?价值观(Value)就是当你面临两难选择时取舍的标准,即在你眼中何者更有价值的问题。它就是“鱼,我所欲也;熊掌,亦我所欲也。二者不可得兼,舍鱼而取熊掌者也。”的问题,也是“我和你妈同时落水,你要先救谁?”的问题。

软件开发中时刻面临着重要的抉择:是要按时交付质量尚可的产品,还是延期交付高质量的产品?是锁定客户的需求不允许变更,还是到最后一刻都欢迎变化?我只把开发当做一份养家糊口的职业,还是要通过我的努力打破世界上一切的墙,让人们生活的更加美好?

例如敏捷联盟的价值观是:

个体和交互        胜过    过程和工具
可以工作的软件     胜过    面面俱到的文档
客户合作          胜过    合同谈判
响应变化          胜过    遵循计划

左边是熊掌,右边是鱼。媳妇和妈呢?谁在左边?谁在右边?

极限编程(XP)的价值观则是四个:简单、沟通、勇气和反馈。与复杂相比,简单更好;与传递文档相比,面对面沟通更好;与隐藏缺陷保住面子相比,暴露无知让别人帮助自己成长更好;与“阿婆还似初笄女,头未梳成不许看”相比,小步前进及时获取反馈更好。

原则

价值观确定之后,我们就可以确定支撑这些价值观的少数几个基本原则。原则(Principle)是价值观的具体化,价值观通过原则来体现。

左右为难时,选择左边

有这么一个佛教故事。有个和尚修禅,他有个为人处世的根本原则——永不说谎。一天他正在树下打坐,有一个人急急忙忙跑过来,对和尚说:有人在追杀我,我要在树上躲一躲,等会追我的人问你,你就说我已经向那个方向跑了。和尚不答,那个人就躲在树上了。一会儿,追杀的人果然来到,问和尚有没有见到逃跑的人?和尚认为自己不能说谎,就把眼睛望向树上。追赶的人会意,就把那人抓到杀了。后来和尚圆寂了,却因为这件事没能成佛。他的灵魂问佛祖?我坚持我的原则,不讲假话,为何不能成佛?佛说:你坚持不说谎的原则是为了个人的自我完善,却为此戕害了别人的性命。你把个人的圆满放在别人性命之上,有什么资格成佛?

与人命(价值)相比,是否说谎(原则)已经一点都不重要了。要知道啥是西瓜,啥是芝麻。虽然在多数时候,价值观、原则、模式和实践是一致的,但是还是有不相容的时候。此时要记住,宁可放弃模式,不可违反原则;宁可放弃原则;不可违反价值观。壮士可断臂求生,烈士可以舍生取义。与跑得快相比,跑对方向更重要。

面临两难抉择时,向上一层寻求答案

有的时候,在同一个层面的多项选择之间往往会互相矛盾,使我们面临取舍。取舍的标准是什么?请向上一层寻找。如果我们不知道采用哪个设计模式,请问问我们的原则是什么。如果我们不知道该坚守哪条原则,请拷问自己的价值观。