未来的需求,今天实现

预测未来通常是困难的。一场足球比赛还没进行的时候,一百个人可以预测几十种结果。但是当终场哨子吹响,”正确预测“结果符合比分的人被称为“先知”,而不是“事后诸葛亮”。但是,要是结果就这么些可能性,并且有足够的人做预测,总有那么一个结果事后看来是正确的。还有一类算命预测的秘诀是采用近乎天书充满歧义的语言,比如“推背图”,任凭五百年后的人们随意解释,也貌似准确。

未知的未知事先是未可知的,预测总有可能失败。我们能不能减少失败的机会呢?换句话说,怎样减少未来的不确定性呢?

软件开发领域就有这么一些“锦囊妙计”,总结出来,供大家借鉴,探讨,或者改良。

“算无遗策”

把软件所有可能的功能穷举出来,完全实现。这样,也许现在用不上的功能将来会派上用场。微软的办公套件就是典型。有谁敢说知道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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,205评论 25 709
  • 社交红利阅读笔记 书名:社交红利(修订升级版) 作者:徐志斌 出版社:中信出版社 正文前笔记: 推荐序1摘要 社交...
    凫水阅读 12,938评论 4 26
  • 特别特别难过,只有难过,哭、发火,每天只有这两件事,想想过去那些,那么多让我悔恨一辈子的事,我改变不了,也走不出来。
    苹果茉莉阅读 923评论 0 0
  • 在我这个年纪,法定上已经属于晚婚。本该结婚生孩的年纪,而我却还是孤身只影,看得父母亲戚朋友都替你着急。现在的...
    Noller阅读 1,872评论 0 1
  • 突然发现一个现象:很多人习惯于把一些事情的原因归结为外界导致的,而不习惯从自己身上找原因。比如上班迟到这件事,其实...
    就想简单点儿阅读 3,226评论 0 0