预测未来通常是困难的。一场足球比赛还没进行的时候,一百个人可以预测几十种结果。但是当终场哨子吹响,”正确预测“结果符合比分的人被称为“先知”,而不是“事后诸葛亮”。但是,要是结果就这么些可能性,并且有足够的人做预测,总有那么一个结果事后看来是正确的。还有一类算命预测的秘诀是采用近乎天书充满歧义的语言,比如“推背图”,任凭五百年后的人们随意解释,也貌似准确。
未知的未知事先是未可知的,预测总有可能失败。我们能不能减少失败的机会呢?换句话说,怎样减少未来的不确定性呢?
软件开发领域就有这么一些“锦囊妙计”,总结出来,供大家借鉴,探讨,或者改良。
“算无遗策”
把软件所有可能的功能穷举出来,完全实现。这样,也许现在用不上的功能将来会派上用场。微软的办公套件就是典型。有谁敢说知道Word的所有功能?通常大家能够用上2分之一的“常用”功能和10分之一的“特殊”功能就不错了。从用户角度,把它全部装上,以备不时之需。从开发者角度,只要能够想得到的功能都包括了,就可以“不变应万变了”。
缺点:软件功能和体积膨胀,浪费大家的资源:用户抱怨买了没用的功能,开发者也不知道功能有没有用。
“充分定制”
通用软件的特征是,没有想不到的,只有做不到的。与其穷举所有的功能,不如归纳出规律,总结为规则。然后设计一个程序设计语言(或者领域专属语言),能把使用的配置描述出来。某种意义上说,一个通用程序设计语言就是“万能胶”,可以写出图灵完备的程序来,这样你就能“按需”定制,以不变应万变了。硬件方面借鉴了这一做法的例子也有,比如“三维打印机”和“瑞士军刀”。
缺点:过于通用的语言其实并不易用,等于把软件编程的全部困难转嫁给用户。
“即插即用”
把软件的基本功能做好,然后允许高级用户“锦上添花”,在规定的时间和地点,增加没有规定的功能,就可以好像设计了一个通用的插口,只要未来有需要,就可以追加新的功能,而不影响到已有的基本功能。这方面的例子有
Eclipse开发套件,网页浏览器,Linux内核等等。
缺点:基本功能决定了软件未来的需求大方向,不能推倒重来。
“草船借箭”
再好的团队也有资源山穷穷尽的时候。这方面聪明的公司就设计一个平台,比如苹果的应用商店,微信的小程序,阿里巴巴的电商平台,让别人为生态系统添砖加瓦。这样,不费一兵一卒,就可以借鸡生蛋,借钱还债。当然,前提是你能把开发人员吸引到平台周围,给他们足够的甜头,欲罢不能。开源软件,像Linux系统,某种意义上也是这样的软件平台。
缺点:前期投入巨大,需要有额外的号召力,天时,地利,人和。
“原子化”
既然“大而全”不是对未来的最好准备,“小而精”就有用武之地了。把软件功能拆小,拆细,只做一件事情,并且做到最好,并为其它用户服务,即便今天还没有来,明天用户迟早会来的。现在的集装箱化(Docker),微服务化,API经济,都是在向这个方向努力前行。当然,这个能力要成功需要互联网标准化达到极致,服务充分可互换。
缺点:酒香还怕巷子深,如果你不能让客户找到自己,颇有内涵的功能,在外延上就大打折扣了。
“社交忽悠”
接下来,自然你就想到,怎样让客户找到自己,做广告是最直接的手段。当然,今天的广告已经碎片化,跟用户的需求场景紧密相关的服务才能得到最好的连接。所以,推销自己的最佳方式不仅是靠“说”,不仅是靠“做”,更是要靠“口碑”。让用户把你的好带给别的用户,这样的效果最好。
缺点:广而告之缺乏精准,对客户的影响随着社交距离迅速衰减。
说了这么多,我想该总结一下了。如果你想现在就做到将来会需要的功能(应对各种变化),那么就要维护好“不变性”,真正掌握什么是你的服务,与时俱进,才能开好“百年老店”,常青不衰!这样得到的才是你的核心需求。
参考文献是一些体现这一思想的论文,读完后请回答哪些“锦囊妙计”得到了运用,回答得好有红包。
一句话导读:维护“模型驱动代码生成”开发过程中的模型和代码之间的不变性
Yijun Yu, Yu Lin, Zhenjiang Hu, Soichiro Hidaka, Hiroyuki Kato, and Lionel Montrieux. 2012. Maintaining invariant traceability through bidirectional transformations. InProceedings of the 34th International Conference on Software Engineering(ICSE '12). IEEE Press, Piscataway, NJ, USA, 540-550.
一句话导读:怎样让自适应软件的控制参数与时俱进,控制不确定性因素
Bihuan Chen, Xin Peng, Yijun Yu, Wenyun Zhao, Uncertainty handling in goal-driven self-optimization – Limiting the negative effect on adaptation, Journal of Systems and Software, Volume 90, April 2014, Pages 114-127, ISSN 0164-1212, http://dx.doi.org/10.1016/j.jss.2013.12.033.
一句话导读:怎样用搭积木的方式支持物联网软件的开发
Akiki, Pierre A.; Bandara, Arosha K. and Yu, Yijun (2017). Visual Simple Transformations: Empowering End-Users to Wire Internet of Things Objects. Transactions on Computer-Human Interaction (In Press).
一句话导读:很多非功能需求和功能需求是正交的,把它们提炼出来单独维护可以降低维护的不确定性。
Yijun Yu, J. C. S. P. Leite and J. Mylopoulos, "From goals to aspects: discovering aspects from requirements goal models,"Proceedings. 12th IEEE International Requirements Engineering Conference, 2004., 2004, pp. 38-47.
网友评论