我是这么利用数据:西红柿炒鸡蛋2014-06-06 cnblogs 欢乐的财神这绝对是一道神奇的菜,上大学的时候,我和舍友总是抱怨为什么西红柿炒鸡蛋里面全是西红柿而没有蛋!现在世道可是真的变了,西红柿因为营养丰富而不断价格上涨,如今再去餐馆点这道菜,会毫无悬念的发现:全是鸡蛋,没有了往日的西红柿!啊!西红柿炒鸡蛋,鸡蛋炒西红柿,让你哭笑不得的是:谁便宜,谁就是主角!其实软件开发也一样,只是很多人没有发现,或者还没有发现,但总有个模糊的印象:如果开发速度是个西红柿,那么开发质量就是鸡蛋!如果功能丰富是个西红柿,那个界面简洁美观就是个鸡蛋!等等等等。只是我们自己还没有形成这样的开发理念,顽固而又执着的觉得:软件是个不可分割的整体!殊不知它就和西红柿炒鸡蛋一样,是个混合物!今天我想和大家分享一点点我在“搅拌”这道软件大餐方面的心得。首先,让我们做一点划分的工作。我们把客户需要的功能点(业务功能、模块功能、数据集成功能等等),以及固有的功能点(比如:美观的界面、人性化的设计、性能卓越的反馈等等),一一的在看板上列出来,尽可能全面而详实。然后,让大家选出功能最相似的两项,给最相似的两项起个综合的新名字,然后以新名字继续这个过程,不断的寻找最相似的项,直到所有的项被合为一类。(学过数据分析的同学也许看出这是:聚类)然后,美妙的事情发生了,每次合并都是两个相似项合为一类,请注意是二合一,像极了西红柿和鸡蛋,不是么?让我们把两个大项里面各自的最后一个以单元素存在的项作为第一个实现的功能(理解这句话需要耐心!其实就是:最孤僻的那个项!),他们作为首批实现是有原因的,作为差异较大的项目,他们更容易特例化,而不必左思右盼的考虑通用性!而随着更多的相似性的加入,自然而然的归类总结,产生通用的部分!让我们继续,看看上面的过程产生了什么?注意到两个功能差异足够大,可以综合的安排两队人马并行开发,最后汇聚到一起,准确的说是“炒在一起”!于是,每时每刻客户看到的就都是一盘调配均衡的“西红柿炒鸡蛋”,否则,不论你是西红柿多还是鸡蛋多,用户都会抱怨,他们会认为你什么便宜上什么,无论事实如何,你左右都是错,不是么?还产生了什么?由于子项之间的差异依然足够大,这让开发的视角更符合科学,从特例到一般,平稳的进化,让你的开发人员仿佛不费力气就找到了通用模块。同时,尽管我们强调足够大的差异让特例化成为可能,但实质上,我们还是把相似引入了进来,让不同区域的功能划分到了一起,更容易同步创意,让他们很自然的结合在一起,共享开发团队的想象力的洗礼!不知你看出来了没有,这样的一个功能划分几乎是完美的,让我们强调一下:1、 手头马上要做的两项总是差异足够大,让客户不会产生厚此薄彼的感觉,最大程度的让他们以为你们团队能hold住全场!2、 同类要做的两项差异足够大,让开发人员深入浅出的理解业务,先做一个特例,看看效果,再做更宽泛一点的,再宽泛一点,开发人员就是这样才能没什么压力,又以超乎想象的速度融入业务。3、 不丢失前面2条的同时,看板上的聚类图把同类功能放在了一起,更能够激发创意,也就是说:策划人员从内往外看,一层一层的突破思维束缚!开发人员从外往内做,层层深入!两队人马里应外合、两面包抄,齐活了!好了,故事本该结束了,按惯例,我想点一点数据思想。大家注意看今天的分享,在往常我会捎带着讲解人为管理信息的缺点,捎带着表明:要让信息数据化,参与模型计算,参与分析,今天只字未提,其实这个例子也是要这么做的,不要忘了分析功能点,分析反馈就好了!想说点什么呢?纵观现在的数据分析以及所谓的数据挖掘,大都介绍那些看着名字都会背的算法,不是说这些算法不重要,而是看完这些东西之后很尴尬的发现:“尼玛,用不上!”他们不是需要超大量的数据积累,就是需要牛X的大型计算机或是分布式集群。醒醒吧,这离我们太远了,我也常常阅读这样的文章,刚开始很激动,后来很不屑,感觉就像看科幻片,因为我实在买不起那么贵的玩意儿!让我们玩点小的,就像今天的聚类,把功能点聚聚类,产生点能玩的小东西,把数据分析带入寻常百姓家,这才是我们的菜,不是么?来吧,来盘正宗的西红柿炒鸡蛋!