我是这么利用数据:鱼和熊掌2014-06-06 cnblogs 欢乐的财神刚刚开始参与编程的时候,就听说过这么一个段子:某程序员病危,久久昏迷不醒,各种药物治疗,均告 无效。家人百般焦急之时,有位同事来看望他,只是轻轻说了一句:“尼玛,需求又变啦!”该程 序员立马被吓醒了!我们不止一次感叹:需求猛于虎,改需求则猛于母老虎!于是这些年软件行业发展了无数的技术,用以抵 御这样或那样的变化,了解其中一些确实对编写程序有帮助,但现实却冷冷的告诉每一个经历过的人:那些都 是治标不治本的玩意儿,照样忙的跟某人类的朋友一样!不过,世界上居然还存在着一些锦囊妙计,今天我和 大家聊一聊如何淡定的面对。让我们从一个简单的小故事说起。小明的妈妈给孩子买了水果(请问这个孩子叫什么名字?),有桔子、 梨子、苹果等等,小明自然都很喜欢吃,由于贪吃,小明想要每样吃一个,妈妈考虑冬天哪能一下吃那么多凉 的东西,于是:妈妈跟小明说:想吃梨么?小明回答:想!妈妈又说:那么想吃梨的话,就不能吃桔子和苹果了!小明想了想:那我还是吃苹果吧!妈妈接着说:你刚刚都说想吃梨了,你看,妈妈都准备给你削梨了,咱们下次吃苹果好不好?让我们停一停,看看这个小故事,实际上我刻意安排了一些对话模式,我们来详细的看一看。首先就是妈 妈的第一个问题“想吃梨么?”,其实她也可以这么问“想吃苹果还是桔子还是梨啊? ”但是显然不如第一种问法,妈妈首先把一个带着诱惑导向的问题抛给了小明,而不是上来就让小明陷 入选择,由于妈妈知道小明可能最爱吃梨,于是直接是这么个问法。当收到肯定的回答之后,妈妈立即封堵了 其他的选择,孩子表现出犹豫,想要改变主意,这时是徘徊期,千万不能助长这些念头,一定要及时的用某些 理由婉约的拒绝,于是,这次决定吃什么就很有可能完美搞定了!一个水果是小事,犯不上这么使用心计,但是工作上的事,倒是值得稍微用上一点小技巧的,我想你自己 可以完成这个类比,让我们继续说接下来的内容。初次定下来的需求,后期改个不停怎么办呢?可能你已经猜到了,我们又要说一说数据这个万能的东西在 防止需求变化上的作用啦!为了方便,我们继续说故事。比如某人很贪吃,拿了个碗过来夹菜,有肉、有鱼、有龙虾,但是他的碗就 那么大,为了夹龙虾,他得把肉放下,为了夹肉,他得把鱼放下。无论他多么纠结以及贪吃,最终他只能吃着 一样。这就是今天这个方法的根本:创造互相制约的条件,使得需求的提出者需要考虑得失,因为有了A就不 能有B,为了保住B,他会慎重考虑要不要A。怎么创造互相制约呢?如果方案本来就有AB面,那是最方便啦!但是在没有明显的AB两面时,最简单的方 案就是:利用数据把规则拔高一层!比如某客户非常纠结好几个选项到底谁放第一的问题,你就加入选项被选 择的历史记录,谁被选择的最多,就让谁成为第一个。于是,问题从“谁是第一”,变成了: “让最多选择的选择项成为第一”,规则更为高层次,要想变这个需求,就总觉得有点奇怪,而且 很难描述这种奇怪,仿佛就是:本来,如果说让A成为第一,我就攻击A,说它不能成为第一!如果说B成为第 一,我就攻击B,说它不能成为第一,但是,你现在说“最多选择的项”成为第一,我攻击谁呢? 没人可攻击,我就全都否定吧,但我还是不知道我否定的是谁!这样,我只能攻击这个规则,比如我说 “不能只考虑选择的次数最多的!”,哦,我们停一停,看看我们怎么制约住了众多选项!也许你 看出来了,任何选项和规则都是矛盾的,因为规则趋于动态,而选项就是静态,他们必然矛盾,可贵而神奇的 是,规则最终的选择还是源自这些选项之一(这里需要很强的理解能力,如果你没看懂,请再读上几遍,读懂 之后,你也许就不会怕需求了!),如果类比于武术的话:天下最厉害的盾,是无形!规则被拔高一层,想要再改,逼急了我就再拔高,我们都知道层次越高,可变性就越小,慢慢的扑腾不了 几下,轻易改不动这个结论了!好了,故事本该结束了,按着惯例,我点一点数据的思想。这里提到一定要使用数据把规则拔高一层!这 是为什么呢?其实你可以用任何东西拔高层次,甚至你可以凭空想象,但是基于数据有无限的魅力1、数据可读,又不可读!可读是说单条数据真实存在,小规模数据可汇总看效果,但实际规模的数据千变 万化,用户以为自己看懂了,其实他远远看不透,数据规模大了会发生质变,并且数据无时无刻不在变化,引 导你的程序稳中自动求变,非常得体!2、数据基于自然积累,无需花心思构造,你本来就是想省事,这如了你的愿不说,还能够让规则更易于描 述,省的还要讨论规则的依据是什么,基于数据就是基于事实,都是事实了,还要什么依据,哎呀,说起来可 掷地有声了!3、数据更利于拔高层次,数学本来就是立志于抽象,张口就来一串串的概念,什么最多,什么最近频繁, 什么比例达到,多了去了。这玩意天生的强生的,羡慕不了。4、更多的,你自己探索吧。来吧,矛盾不都是那么尴尬,因为尴尬的不是你自己,问问有着三高的客户:鱼和熊掌,你要哪个?