魔法大锅炉
——
制造业的错觉
 
Eric Raymond (1999年六月)
[AKA]rover HansB iasc等翻译



3.制造业的错觉


  我们需要注意的是计算机程序和其他类型的工具和资本货物一样,都有两种经济价值:使用价值和销售价值.


  程序的使用价值就是它作为工具的经济价值;销售价值是它作为作为商品的价值.(用经济学的专业说法,销售价值是产品最终价值,使用价值是产品中间价值)


  当大多数人说到软件产业时,总是按照拥有下列特性的"工厂模式"经济来分析:


  1.大多数开发者的劳动由销售价值的收入来支付


  2.软件的销售价值与开发成本(例如,功能复制所需的资源花费)和使用价值成一定比例.


  换句话说,人们有很强的思维惯性去假定软件具有标准工业品的特性。但是这两个假设都错了。


  首先,编写用于出售的代码只是编程行业的冰山一角.在微机世界前期,大家普遍认为世界上90%的代码在银行和保险公司内部编写.这虽然已经不再是事实--现在其他行业也越来越加大了软件开发的力度,金融行业所占的比例从而下降--但是短期内我们仍将会看到大约95%的代码是公司内部编写.


  这些代码包括大多数为中等或大规模公司所定制的MIS,金融和数据库软件.包括象设备驱动这样的专业技术代码(几乎没有人靠卖设备驱动赚钱,这一点我们将会在后面讨论);包括日益增长的数控机器的各种嵌入式代码--从机械工具和喷气客机、汽车、微波炉甚至烤面包炉.


  大多数这种内部代码与其环境集成在一起,复制和再利用十分困难(不论环境是商业办公室的程序套件还是联合收割机的加油系统)。因而一旦环境变化,需要做许多工作使软件与之同步.


  这种工作称为"维护".任何软件工程师或系统分析员都会告诉你这就是程序员的大部分工资的来源(超过75%).因此,大多数程序员工时花费在编写和维护更本不能卖的内部代码上(当然大多数程序员以此为生)--读者们也许乐意去查查报纸上的"诚聘信息"部分的编程工作列表检验一下.


  我强烈的希望读者试试浏览本地报纸的招聘信息,看看编程.数据处理,和包含软件开发工作的软件工程项目等等.将这些工作按照其目的是使用还是销售进行分类,你将深受启发.


  很明显,即使为"销售"定义了最大范围,20人中还是至少有19个由使用价值资助(作为产品中间价值).这就是为什么我们认为软件工业中以销售价值驱动的部分只占5%原因.注意,本文中其他部分的分析并非完全倚赖于这个数;即使这个数字达到15%甚至20%,在经济上的推论结果仍然八九不离十.


  (当我在技术讨论会上演讲时,我经常由讨论两个问题开始:听众为写软件付多少钱,和有多少薪水是依赖于软件的销售价值的.第一个问题应者甚众,而第二个问题则寥寥无几,大而且量的听众对这个问题十分诧异)


  其次,经过对实际客户行为的调查,软件销售价值与其开发和升级成本相关的理论很容易被推翻.开发和升级成本相关的商品(对打折之前来说)占很大比例--食品,汽车,机械工具,甚至有许多无形的产品--例如,音乐、地图或数据库资料的复制权.这产品在生产者倒闭后仍然能保持甚至增加其销售价值.


  与上述形成鲜明对比的是.当一个软件产品生产者歇业时(或者如果产品开发被终止),几乎没有客户愿意为其花钱,而不管它理论上的使用价值或同样功能产品的开发费用有多高.(要检验这个说法,去你附近的软件商店打折柜台看看吧:-))


  在生产者失败时,零售商的行为很有启示.他们知道一些生产者不知道的东东.他们深知:客户愿意花费的价格在很大程度上由卖主未来可以提供的服务决定.(这里的'服务'被广义的理解为完善,升级和后续产品).


  换句话说,软件主要是一个稳定的服务性行业,认为它是制造性行业是没有理由的错觉.


  另外,检查一下我们为什么会有这些惯性思维也很有益处.它们也许来自于软件生产者大力宣传的销售类产品,这些是的软件业一小部分,也是宣传的唯一的一部分,大多数明显和重头的广告宣传的产品是昙花一现的短期产品,就像游戏,他们几乎不需要提供后续服务(合同规定的除外)


  另外,值得注意的是,制造业错觉所倡导的价格体系事实上会越过保持开发预算不崩溃的底线.既然(像一般认为地)超过典型软件产品周期花费的75%在维护,调试和扩展上,那么通常的那种只采用高额售价,极低相关服务费用的定价策略,只会导致各方面都差的服务.


  用户的损失在于,即使软件是服务性行业,工厂模式促使生产者减低服务质量.如果生产者靠出卖比特挣钱,大量的努力是制造比特并将它们推销出门;帮助服务部分,因为不是利润的中心,将会成为只付出的一点点努力和资源,为了避免激怒用户所设的垃圾站.


  另一方面是大多数生产者使用这种工厂模式会导致长远的失败. 为满足无限的售后服务和技术支持需要的固定价格产品提供资金,只有在那些膨胀足够迅速的市场里 --其过去的销售和未来的收入能够满足支持和生存周期的花费--才能存活.一旦市场成熟和销量下降,维持生计,大多数生产者除了消减单独产品的开支之外没有别的选择.


  不管是直接(废止产品)还是间接(支持很差),都会把客户推给竞争对手(因为这些行为损害了依附于服务产品的期望值).短期来看,可以通过将修订过bug的版本发布为新产品避免这个陷阱.而长远来看,避免陷阱的唯一可能是对行业进行有效的市场垄断.最终,只有唯一的幸存.


  事实上,我们一再的看到这种缺乏支持的模式害死一些市场环境中很强大的竞争者,(这种模式对那些那些经历过计算机发展史幸存下来的人尤其深刻,包括个人操作系统,字处理,通用财务程序或商业软件).这种不正确的动机来自于工厂模式导致的赢家通吃的态势,而且最后即使你是赢家的客户也会遭殃.


  如果不是工厂模式,那又是什么?为了有效的控制软件生存周期真实的花费体系(同时在经济学和非正式场合的意义上的"有效"),我们需要一个建立于服务合同,合约,和买卖双方持续交易基础上的价格体系.所以,在以效益为目的的自由市场条件下,我们能管窥大多数成熟的软件工业最终遵循的价格体系.


  为什么说开放源码软件的地位日益增长,不仅仅是技术,也是经济上对主流秩序的挑战?上述内容给我们一些启示.软件开发的"free",会将我们推向以服务支配的世界,同时暴露出一直依赖销售封闭源码产品的方式有多脆弱.


  "free"的概念很容易被误解为其他含义。降低产品花费会导致支撑软件业的整个基础投入增长,而不是降低。只有汽车的价格降低时,汽车的需求才会上升--这也是为什么在开放源码世界中,另外那5%的根据销售价值付酬的程序员不好受的原因.在free的变革中,有损失的不是程序员而是那些没看清形势而将赌注押在封闭源码策略上的投资者。