软件4大定律

软件是个非常特殊的产品, 学过软件工程的都知道, 软件工程的理想就是生产软件像福特公司生产汽车流水线一样,源源不断的自动生产软件出来。这样我们就不需要那么多的软件工程师来写代码了。 事实上我们发现今天的软件工程师的岗位越来越多了,而不是越来越少了。这说明软件工程没有帮助我们解决软件自动化生产问题,它绝不像汽车可以在流水线上生产出来! 其实流水线是个产品复制的过程, 不适合脑力劳动的活动如设计,研发,探索。而软件开发恰恰是脑力劳动的成果。 而软件的复制则要比汽车流水线简单多了。 软件复制的成本几乎为零,或者说5元钱的成本-一张光盘。 所以我们认为软件是个特殊的产品。 对于软件的研究已经有许多著作了, 基于几十年的软件开发和软件市场推广的经验, 总结了软件的一些的特点和规律—— 形成了这软件4大定律:

 

软件只能证明有错,不能证明无错

软件是个特殊的产品, E.W.Dijkstra j 说过:  “程序测试能证明错误的存在, 但不能证明错误不存在“。其中一个比较著名的例子就是程序里有一个逻辑上的死循环(Dead Loop), 我们无法知道它是个死循环还是在等待地球爆炸。 还有在并行软件开发中,我们常常会遇到racing-condition引起的bug问题。

 

 

什么叫racing condition引起的bug?据个例子来说,比如A开车上午10点路过马甸桥,同一天B开车上午10点恰好也路过马甸桥和A擦身而过引发了一个错误(bug)。这和时间顺序,地点,环境相关的问题就是racing condition问题, 而且很难重现这个问题。  这也就是为什么凡由软件控制的机器和设备, 我们是没法证明其100%正确的, 发生错误是个概率问题。 前段时间特斯拉刹车门事件, 尽管特斯拉公布了数据,舆情消停了许多。 最近又有车主报告特斯拉后座车门打不开,检查结果是软件认为车在行驶中,故而车门上锁了,但是车主的车就停在那儿了,所以可能是传感器问题, 也有可能是软件问题。

 

数据也不是万能的, 它也有可能是错的!这里需要告诫的是, 凡有软件的地方,就不能假定100%的正确可靠, 出了问题我们要用软件的知识和规律来思考。 

 

2:8定律,软件功能开发20%成本,而让软件成熟需要花80%成本

在软件规律中有不少二八原则, 称为帕累托法则(The Pareto Principle or The 80/20 Rule) 。比如 20% 的努力产生了80% 的结果;20% 的工作创造了80% 的收入;20% 的错误导致了80% 的崩溃;20% 的功能导致了80% 的使用量。这里我们想表达的是如果一个成熟,可靠的软件产品共投资了1亿美元, 那么开发实现其功能可能只要花2000万美元,其余8000万美元是花在了让产品成熟和可靠。为什么会这样呢?

 

 

在我们软件开发中对QA测试的投入是大量的, 微软甚至软件开发人员和QA人数是1:1的。有人统计过,如果在研发过程中纠正一个错误(Bug)的代价是5美元,同样的错误如果发生在用户现场,你可能要花几千甚至几万美元去改正(fixing)它。而有些错误是公司不能承担的, 比如芯片在Cut后发现问题, 那么所有Cut的芯片只能都报废,当汽车发现致命缺陷是,只能召回,公司蒙受巨大损失。 

 

关于招投标,在许多场合客户都会采用招投标的方式来采购软件产品。 但是我们发现恰恰软件是不适合招投标的,因为一般招标文件罗列的需求都是软件功能, 而软件的成熟度和可靠性很难量化指标。 问题是招投标考量的是那20%投入的功能, 哪个傻瓜还会去投入80%的钱让产品成熟起来呢? 这或许是为什么我国很难出现世界级的软件公司和产品的一个因素吧。

 

软件成熟度不由开发者的投入决定的,而是由客户数和时间决定的

这和定律1有关联, 定律1说软件无法证明正确性, 只能证明有错。为了让产品向正确方向更加靠近, 我们采用的方法就是不停的测试,抓bug。当我们再也抓不到bug,是不是说明软件是正确的呢?理论上是成立的, 但是实际上很难做到。  

 

我们经验是在开发者环境里,我们很难穷举和想象出用户使用产品的各个场景, 也就是说,无论我们研发团对QA如何测试,也是替代不了市场和客户实际使用的过程。但是这不等于说公司内部QA测试就不重要了, 你该记住内部测试纠错5美元的事,到了产品发布后期在用户现场纠错,成本可能是几千或几万美元的事了。

 

一个软件产品证明其成熟度和可靠性唯有市场实际使用者的多少以及使用的时间来衡量。这和技术成熟度曲线(The Hype Cycle & Amara's Law)规则有点类似。 

 

 

我们倾向于过高估计技术在短期内的影响,并低估长期效应。新技术的引入会引发一阵浪潮, 技术团队会很感兴趣采用这些新技术,但是不久会碰见一大堆问题对结果感到失望。但是迈过了这个技术不成熟坎,迎来的是未来稳步的发展。 

 

这也就引申出了另外一个话题,目前许多企业尤其是比较大型的国企在纠结自己使用的软件是找第三方软件公司呢?还是自己招人研发,有些公司在这方面反反复复的, 钱花了不少,系统还是不好用。 理论上来说软件是典型的“造船不如买船, 买船不如租船”的行业。

 

因为开发一个软件只给自己用肯定是个亏本买卖,除非企业开发这个软件是公司核心挣钱的工具,比如那些BAT互联网公司。 从行业的健康发展来看, 社会需要很好的分工, 不要走别人路让别人无路可走, 最后自己也无路可走。 还有就是要改改重硬轻软的毛病, 不让软件厂商健康发展, 最后所有软件都得自己开发, 结果一定是得不偿失。 

 

软件免费定律

不同于传统产品,软件是可以免费的,而原厂商可以活着,甚至活的更好。这是因为软件的复制成本几乎为零。 以前软件产品刻在光盘上,成本大概是5元人民币,和软件价值比,这个成本微不足道,但是随着网络,互联网的发达, 我们可以在网上下载软件,光盘业省了!这在其它行业是不可想象的。“世界上相同的软件,只要一份就可以了”。

 

传统行业比如汽车,复制成本不是个小数。汽车行业的竞争不可能是一家汽车厂商免费提供汽车而把其它竞争者逼死。但是软件可以-免费是其大杀器。大家还记得网景公司(Netscape)在1994年10月发布了他们的旗舰产品Navigator(导航者,网景浏览器)。但是很快Netscape的优势就被削弱了, 因为微软在这个时候匆促的购入了Spyglass公司的技术,改成Internet Explorer并绑定在其Windows中,说白了就是免费了。掀起了软件巨头微软和网景之间的浏览器大战,如今我们已经看不到Netscape了。

 

 

还有中国公司360周鸿祎靠一招免费杀毒软件干掉其它行业的巨头。 当初周鸿祎发现别人的杀毒软件卖200元,自己卖25元还是做不过别人, 连第四,第五都排不上。所以换个思路,软件免费。 真是因为软件的复制成本为零, 周鸿祎这么做不至于赔钱,但是这让其它竞争者无钱可赚。 有意思的是自从360免费后,电脑病毒似乎一下子消失了, 这个非常耐人寻味。 还有一个问题, 既然你把软件免费了,你靠什么挣钱?答案是你得从其它地方挣钱,这就是人说的“羊毛出在猪身上”。 

 

 

推荐阅读 

在线咨询 MESSAGE

姓名 *

电话 *

邮箱 *

咨询意向 *

公司名称

所属行业

需求概述 *