软件在这个世界上已经有了几十年的历史,其本身也发生了巨大的变化。它使得计算机可以代替人类进行巨量、复杂的工作,并得出极精确的结果。几十年来,软件本身也变得极其复杂。
软件越来越复杂,可是生产软件的基础理论及方法却没有得到显著的改变。目前的软件工程学仍然停留在几十年前的水平。
几十年来软件变得越来越杂,其对开发者的要求,对资源投入的要求越来越巨大。可以直观地说:“开发软件的成本提高了”。而同时,生产软件的方式并没有改变。软件的生产力并没有得到提升。开发越来越复杂和庞大的软件产品唯一的出路就是投入更多的人力、物力、财力和时间。
首先,我们需要了解软件生产方式与生产力难以获得改进和提升的原因是什么?相比之下,为什么工业革命以来短短一百年中,社会生产力却能得到惊人的提升?
同样是生产,但为什么效率提升却有如此大的差别?并不是软件生产的效率没有提升,而是与工业生产力相比提升极其有限。如果我们能够找到软件生产与工业品生产的差别,是否就能找到提升软件生产力的钥匙?
让我们来回顾一下人类工业化的历史。工业革命的标志是蒸汽机的诞生。为什么蒸汽机对人类的工业化进程如此重要,以至于人类将蒸汽机的诞生标志为工业革命的起点。
在人类拥有蒸汽机以前,劳动的方式最先是纯手工的,人力是社会生产的主要动力。然后,人类开始驯养动物,畜力将社会生产力提升到了一个高度。接着,随着人们对大自然认识的进步,自身知识的丰富就开始利用自然资源作为动力。普通人最耳熟能详的莫过于水力了。
在英国的工业革命前期,社会对工业制品有着极大的需求。但是生产力却跟不上。当时的商品经济完全处于卖方市场,也就是说,不论生产多少产品都能卖掉,都能赚钱。当时典型的产品如英国的纺织品。
当时也出现了很多的先进的纺织机械,但是有一个非常大的局限是它们利用水力作为动力。也就是说,工厂主必须将纺织厂建在河边上。当然,天然河流提供的动力无法满足整个社会中人们对工业产品的巨大需求。众多的工厂主急切地盼望着新动力的诞生。
蒸汽机应运而生。它解决了人类社会生产力对天然、自然动力的依赖。人们对新型商品的渴望、商人对利润的渴望、国王对富强的渴望不断互动。终于促成了社会生产能力的巨量释放。
现在我们才开始进入正题,我们将讨论:“社会生产力巨量释放或惊人增长的基础”。
到目前为止,人类的生产活动只有一个模式,即:“投入->产出”。随着生产能力的不断提升,相伴而来的是社会分工的越来越细化,直至出现一个新的经济学概念“经济链条”。
但是这些经济学概念与“社会生产力巨量释放或惊人增长的基础”有什么联系呢?
这个“基础”是什么?这个“基础”是我们天天看到,天天接触却很少有人提及的东西。我不知道是经济学家故作不知,还是不认为重要,或者认为它超出了大众的理解力之外。反正很少人会提到它。
在英国经济学家亚当·斯密的著作《国富论》中反复提到两样东西,他认为与国家财富密切相关的两样东西:天然产物与劳动力。
在资本的活动中,或人类生产活动中“产出”是丰富的,而“投入”只有这两样,即:“天然产物”与“劳动力”。而我的表述是“自然资源”与“劳动力”。
在一件工业产品(其实包括任何产品)的成本构成中通常有不同的部分。其中比较易见的是“工人的工资”和“原材料”。当然还有很多不明显,或隐性的成本,但追本述源还是“自然资源”与“劳动力”。举个简单的例子:
海尔公司生产电冰箱,每台电冰箱的成本构成中包括了:
一、向上游供应商支付的零部件成本。
而零部件的成本包括了自“自然资源”与“劳动力”的成本。因为供应商也要向雇员支付工资。而人类社会的任何产品的“物质”原形均是“自然资源”。我们的电脑中有玻璃、塑料、金属。衣物是丝、棉、麻、化纤。食物更不用说了。
二、向员工支付工资。
而工资也包括了自“自然资源”与“劳动力”的成本。因为员工也会购买各种商品:包括、家电、食物、房子。购买各种服务:交通、通讯、再教育。
首先,员工作为一个活生生的人,至少需要维持生命的基本条件。包括食物、居所、衣物。
第二,员工作为社会成员,必然要与其它组织和个人发生关系。他需要交通、通讯。
第三,社会生产力的不断发展,对劳动力提出了更高的要求。这要求员工拥有更多的知识。员工需要购买图书资料、接受再教育、获得更多的信息(如上网、参加各种活动)。
因为一个员工除生活之外的时间都在工作,所以雇主必须为员工以上所有需求买单。如果一个人的工资只能维持衣、食、住、行。那么他也能工作,但能做一些简单的、不需要复杂知识的工作。当然这有一个致命的问题,工资全吃用光了,连孩子也养不起。那么几十年后的即使最廉价的劳动力也灭绝了。
现在我是一个软件公司的老板,我认为员工一定要甘心加班不能怕苦,少拿钱吃饱就行,技术全面永不淘汰。过一阵子我发现,水平好的都跑掉当老板了,水平差的宁愿去搬石头也不当白领了。
三、海尔将电冰箱运输到各个城市进行销售。
物流费用还是包括了自“自然资源”与“劳动力”的成本。首先动输工具的购买、折旧和报废(运输工具需要的钢铁橡胶归根结底还是“自然资源”);再者油料(自然资源)、保养(人工和自然资源)和税费(国家管理成本,可以理解为劳动力成本);最后是架驶员的工资。
架驶员工资的成本构成参考第二条。
以上只是一个很微观的例子,它描述了资本活动与生产活动的“投入”环节。简单的说,要想更多的“产出”就必须更多的“投入”。产量不够就购置更多机器,招更多工人。运输能力不够就修更多铁路、公路。购置更多汽车、火车、飞机、轮船,并让它们跑得更快。
这样我们就发现在社会财富、文明、生产力高度发达的今天,我们人类每天都消耗比工业革命时期更多的资源,更多的劳动力。
美国人也许会跳出来说:“不对!我们的生产力世界第一,一个人就可以创造大量的财富。”。那我会说:“你用高价工业、科技产品跑去非洲换木材、矿石、金属,去美洲换咖啡、可可、橡胶,不用来消耗难道是堆成山观赏吗?”。
好的,现在我们下一个简单的结论。
社会生产力巨量释放或惊人增长的基础就是--丰富的,可以源源不断投入的“自然资源”与“劳力力”。
而软件生产恰恰缺少这种可持续的、源源不断的投入。软件的生产完全依赖程序员(软件工程师)个人,或者他所在的整个团队。
首先我们来思考一下影响软件生产投入的各种因素。
一、程序员(软件工程师)的数量。这个很明显,数量的供应是不确定的。教育并不一定能提供足够拥有开发技能的人才。或者即使有人拥有很好的开发技能也不一定就去做程序员(软件工程师)。
二、程序员(软件工程师)的质量。这个也很明显,质量是不稳定的。它与社会的教育、文化,甚至个人的情绪都有关系。
如果社会教育质量高,可以培养更多高素质的人才,也包括高素质的软件人才。
文化环境是否有利于软件及相关科学的发展是非常重要的。比如现在中国的科学家就远没有包装精致的明星耀眼,收入也差很多。再者“专家”满天飞,我们遇到一个“专家”首先要想一下他是不是假货,是不是为即得利益说话来骗我钱。大众认为科学家离自己很远,不关心也不尊重科学家。中国一些“精英”总说,看看人家外国有本事的学者都想去名校做教授,中国人太爱钱了,太浮躁。是不是也要问一下,国外的教授是什么地位,国内的教授又是什么地位呢?或者再换个说法,中国的“精英”也是即得利益者,“精英”拥护的草根坚决反对。
对一个政治领导科学,外行领导内行的国家里五十多年不出一个诺贝尔奖的现像我深感庆幸。我终于在理论基础上找到了攻击这个国家一小搓人群的科学依据。
有一天,一个外行老板大骂了一个程序员(软件工程师),理由很简单,出问题了,造成损失了。程序员(软件工程师)觉得很委屈,我做得很好。并且我只能在自己的工作范围内负责。你不能把其它部门的压力推给我呀。因为销售部门的XXX有一个XX局的局长叔叔,我就得受这份气?得啦,得过且过,产品也不用改进啦,上班的时候赶快用不要钱的网找工作。
开发工作压力很大,经常加班,为了新项目还得不断学习。这样很少有时间出门,没钱谈恋爱,没钱买房子。公司也没什么很牛B的产品,根本不需要高手,我在这总是做很简单的东西,几年也没什么提高。再过几年一定会被能加班的小伙子顶掉,工作的时候也要多想想退路啊。
根据亚当·斯密的理论,生产力的发展有一个伴生现象。就是分工越来越细。同样的工作被分解,很多人合作,各自做很专一的工作。这样工人在长时间的工作中就会越来越熟练,同样时间内的产出越来越多。并且,由于专一的工作相对简单化,更容易发明新方法和新工具从而使生产力得到提升。
回顾软件生产的过程,没有没分工?有,但分工还远达不到传统产业的程度。事实上,一个软件产品越复杂,涉及到的知识就越多,要求的分工也越多,对项目管理的要求也越高。
但这时,我们会发现,任何一个环节都缺少资源。这是因为:得高品质的智力远比得到高品质的资源困难得多。
同时,会出现一个与传统产业迥异的现象。即使是在不同环节(分工)工作的人也要求拥有其它环节(分工)的知识。
人们很容易理解汽车的轮子该装在哪里;自来水龙头该装在哪里;连小孩子都能把乱七八糟的拼图拼起来,因为这些都是可以看见的。拼图虽然乱,但只要找到一致的形状就可以了。
而软件的各个部件(模块)是看不见的。假设一个开发小组四个人,合作开发一辆看不见的汽车。
A开发看不见的轮子;B开发看不见的底盘;C开发看不见的座椅、仪表等;D开发看不见的外壳。当他们都完成自己的工作需要将自己的工作成果组装成一辆看不见的汽车时,困难出现了。按装轮子的A根本看不见B开发的底盘。
为了解决这个问题四个程序员坐在一起讨论,为了让每个人都能理解其他三个人表达的内容,每个人都必须拥有其他三个人的知识。当四个人对车的外貌、按装等等达成一致时,这辆看不见的车就可以装配完成了。
这也是软件生产力不能有效提升到一个新高度的重要原因。传统产业由于分工极度细化而出现了产业链,产业链条可以认为是生产力发达的标志。比如汽车就要经过采矿、冶炼、模具、设计、零部件、组装。这一系列工作不但由不同企业完成,甚至是在不同国家完成。而软件生产的分工远没有达到这种程度。目前的概念也就是“上游厂商”、“下游厂商”之分。单个企业内部的分工也有限。当然软件巨头企业内部的分工就要细得多。比如微软、google就招聘了一些社会学家。并且他们还有足够的财力去企业外部寻找专业知识,这也相当于分工。比如微软有足够的钱为新操作系统海选开机音乐。
传统行业的产业链条还有一个特征是软件行业不具备的。以汽车行业为例,采矿企业将矿石卖给治炼企业,然后钢材销售给整车企业和零部件企业。汽车生产企业再向零部件企业采购零部件,最后完成整车。我们发现,产业分工有个基本条件,就是低等的产品经过链条不同环节的企业后最终变成最高形态。产品是在流通中不断增值,并使链条中的所有环节获益。
采矿企业将矿石采出来成本加利润卖给治炼企业,矿石增值了。治炼企业将钢铁卖给汽车生产企业和零部件企业钢铁增值了。零部件企业将零部件卖给整车企业,零部件增值了。整车企业将车卖给消费者,整车增值了。从而,分工后的每一个环节都获益。而分工带来效率的提高整车的成本得以降低。
而软件产业缺少这种“增值”的基础,从而不能进行更细致的分工。分工并不是生产力提高的结果,而是起因。因为人们意识到分工能提升效率,或者意识到分工能带来利益,所以产业分工才会越来越细致越来越专业化软件生产先天的局限使得这个行业的生产力不可能得到极大的提升。至少目前看起来是这样的。
正因为软件生产力和生产方式有如此多的局限,才使得它成为一个极具活力、生机、民主,甚至草根化的行业。并且这个行业天生就是制造奇迹的源泉。
我们知道很多行业中巨大的资本可以在竞争中建立极大的优势,形成行业进入的门槛。
大型超市的采购成本之低是普通小店无法相比的。
而在一些行业,前期投入巨大,也将小型资本排斥了。如半导体芯片的生产。
当一些企业发展到很大规模后,其规模效应开始显现,成本不断降低。使新入的竞争者感受到巨大的压力,新的竞争者必须拥有大量的资本才可以与之抗衡。
而软件行业业不是这样的,智力对企业的推动力和重要性远胜于资本。这个行业中,资本的力量被大大削弱了。大资本很难狙击新秀企业。而又由于这个行业生产方式的局限,生产效率并不高。即使是大型企业也不太可能形成规模效应(针对产品)。而创新型的小企业却可以在竞争中表现得极其顽强。
我们这样来理解,同样是一个很复杂的软件。大型企业用了很多人在开发,而复杂的软件对开发人员的要求非常高,可见工资是不可能少的。所以成本巨大。
而创业型的小型软件企业虽然资源匮乏,但只要有一个天才,大型企业的资本优势就将很难有所作为。在这个行业中,一个优秀的开发人员通晓多种技术,在效率上以一敌十绝不是笑话。
事实上一个大型软件企业也不是所有的开发人员都开发一个产品。一个产品可能也就是几十个甚至百来个人在做。而开发软件产品,人多并不一定是好事。人越多交流时出现的问题越多,必须让所有人达成一致才能将开发工作继续下去。
而一个通晓多种技术,熟悉开发各个环节的天才不需要与任何人交流,可以很顺利地将复杂的产品完成。如果他能找到一种加快开发效率的方法,开发效率上以一敌百完全可能。
这样同样的产品小公司的成本是大公司的百分之一。即使以大公司产品价格的一半推出,也能获得高额利润,同时低价对市场有着巨大的吸引力。
知识将给我们造就一个新的时代。希望所有的年青人都能把握这个时代成就自己的事业和人生。如果你有一个主意、一个创新的技术、一种别人不可替代的竞争优势。去创业吧!打工是可耻的!
但千万不要以为一个天才+一台电脑=一个神话般的公司。
获得成功需要付出的艰辛是寻常人难以想象的。创业者不但要技术过人,还要是个优秀的管理者。不但要懂计算机,还要擅长社会学科。
年青人,请好好保重身体。你需要清醒的头脑和充沛的精力。你需要发动战争,不断扩大自己王国的土地。
你迟早要面对那些拥有不同利益的人,你唯一的选择就是征服或屠杀他们。但不要忘了,一个孤独的英雄不能成为伟大的国王。你需要团结更多的勇士和魔法师,你需要强大的武装来建立崭新的王国。不要害怕鲜血和杀戮,在成为国王的征途上每前进一步都会遇到强悍的敌人。
不要害怕战争,你只是在玩一个更加逼真的网络游戏。你与不同的玩家争夺未来王国的领土。你需要坚强的毅力和永不动摇的决心。你需要诡诘的阴谋和圆滑的外交。你需要过人的胆识,战争是残酷和不择手段的。你不但要面对强大的法师和无数的骑士,更有不尽的阴谋和陷阱。你不但要挫败更要镇压敌人。
你要坚信自己终将胜利,统一人民的信仰,建立伟大的王国。
每一个年青人都可以铸就传奇。而那些伟大的国王将成为亘古传说。