软件业是重要的一个产业,这个道理谁都明白,但是,这么多年来软件业的发展一直都不尽如人意,特别是国内软件业。几乎所有的软件企业都在艰难的挣扎,常常为一个很小的单子争破头,我也思索了这个问题。
技术对于软件业来说绝对不成为问题,虽然软件工程还不很成熟,但这并不影响我们做好一个软件;市场需求也不成为问题,我们有着巨大的软件需求,大到*机关,各种企业,小到学校医院,家电维修店,都有需求。既然有着巨大需求和绝对优势的技术,为什么我们还经常能听到一个个软件开发失败的案例呢?
第一个原因是盗版横行。社会上也都普遍认同这一点。大家都希望免费得到别人的东西,同时又能高价卖出自己的东西。后者做不到,通过盗版却能做到前者。结果就是你盗我的版我盗你的版,最后大家一起玩儿完。有一句很流行的话,叫做“没有盗版就没有中国计算机的普及”。普及虽然普及了,却扼杀了我国软件产业的发展。当然,盗版同样影响国外软件和国内软件,甚至对国外软件的影响还要大一些,我们用的盗版软件大部分都是国外的。国外软件并不完全依赖我国市场,虽然失去了我国市场,并不会导致其无法生存,而且还乐得十几亿人来捧个“人场”,有了“人场”“钱场”也自然随着看涨。对国产软件就不同了,失去了唯一赖于安身立命的国内市场就别无活路了。这也是我们连盗版大都只能盗国外软件的原因吧,因为国内软件厂家根本等不到成熟就被盗版扼杀了。
防止盗版的方法目前还没有一个能奏效,就连最牛的微软也对此一筹莫展,注册码、在线激活各种招数都用了,仍然挡不住盗版的泛滥。话虽如此,我国仍然有大量的软件企业存在着,只是活的很累。大家都意识到无法和盗版相抗衡,只能想办法避开他。为了避开盗版对自己的打击,所有的软件企业都做的是行业专用软件,比如用友的财务软件。或者为企业量身定做专用软件,这就是我们的大部分软件企业在做的事情,接到什么样的单子就做什么样的软件,做完一遍就不做了。这类软件因为不具有通用性,盗版对此不感兴趣。再有就是靠*采购存活的,比如国产的各种Linux产品,还有一些office软件。 其实每个软件厂家都有一个愿望,把自己的某一个项目做成一个优秀的通用产品,不再为项目单子东奔西走,不再为了卖出两套linux而看各种大小官员的脸色,但又有谁能实现这个愿望呢?早期一些国产软件如WPS等,产品化的非常好,然而也已经成为了昨日黄花。杀毒软件好像是一个例外,我们现在市场上产品化最好的软件就是各种杀毒软件了,我想这得益于人们心理上对病毒的恐惧和盗版的不太放心吧,其实有必要吗,我认为没有,盗版的杀毒软件和正版的一样正常工作,所谓盗亦有道,如果真的有人想用盗版来攻击你的系统,任何软件作为载体都是等价的。但不管怎么说,大众的这种无知心理无意中做了好事。
虽然盗版横行,近年来开源运动却开展的红红火火,这使我想起了一句话:“打不过他,就加入他”。盗版是一种非法行为,而开源则是一种合法的行为,但其结果是一样的:大家可以免费使用软件,让那些靠卖软件生存企业死掉。用过开源软件的人都知道,版本间不兼容和缺乏技术支持常常令人头痛无比。这一点上绝对比不上盗版。开源软件的文档往往非常差,“源代码是开放的,需要什么可以自己去代码里找”成为文档差的一个理由。但是,对开发者而言,需要知道的只是一个软件能做什么,怎么使用,并不是想去了解其内部如何写出来的。如果每个人都忙于了解现有软件是如何写出来的,就不可能会有新的软件产生。
第二个原因我认为是小农思想。就是自给自足的思想,自己生产自己需要的全部东西。现今的社会是一个分工合作很普遍的社会,软件业却停留在原始的小农时代。大家可以想一想,自己的公司是不是曾经专门开发过一个曲线显示窗口、一个网络通信模块、一个命令输入窗口。其实这些都早就有人开发过了,而我们却经常重新来过。这种思想在小公司存在,在大公司也存在。在我呆过的一个大型国际软件公司里,从来不在自己的软件产品里使用其他公司的产品组件,如果要使用,那么就先收购这家公司。如果要使用某些开源的代码,也一定要先对这个开源项目进行注资。在现在一切注重效率的年代不使用专业的第三方组件而耗费大量的精力去重复发明车轮,实在是不明智的行为。自己重新开发的组件往往因为时间和经验的原因,不如专门的组件公司提供的稳定,好用。很多年来,大家都在梦想着一个中间件市场,一些专门做中间件的软件厂商以出售专门的中间件为生。在Java语言的EJB诞生时,曾经把Bean的开发环节进行了仔细的划分,对开发着也进行了各种角色划分。包括定义者、开发者、调用者、部署者,等等。EJB技术的发明者对中间件市场充满了极大的憧憬,这些划分都是假设EJB的开发和使用是在不同的公司间进行这个前提下进行的。如今,EJB基本上被认为是一个失败的技术,这与中间件市场没有如期出现有极大的关系。试想你自己是一个软件设计人员,软件的全部设计都在你的控制之下,所有的接口都可以由你自己定义,你会放弃简单的函数调用方法而改用复杂低效的EJB调用吗?我个人认为,WebService技术难免也要重蹈覆辙,可能还不如EJB更能得到认可,尽管微软也在大力倡导。不过XML作为一个数据格式将会长期存在。
重新发明车轮这种行为可能是大家从节约成本这个角度考虑的,但这会形成一个恶性循环,前面说过,自己开发的组件往往因为时间和经验的原因做的不够好,这会影响整个软件产品的质量,从而影响最终产品的市场。没有市场就没有销售额,没有销售额就愈要压缩成本。另外,重新发明车轮这种行为延长了开发时间,会大大减缓产品的上市速度,这也应该成为软件工程里软件经常不能如期交付的一个原因吧。
其实在和软件开发非常类似的一个领域-硬件电路设计领域,组件设计的原则就贯彻的非常好。如果某一个芯片在市场能买的到,绝对不会有哪个设计者会用晶体管去搭一个已有电路,不管这个电路复杂还是简单。这些成本的增加并没有影响其最终产品的销售,相反,电路产品的销售者们往往还要标榜自己使用的是某某著名的芯片。我想,这是值得软件设计师们借鉴的。
最后一个观点:软件收费并不会影响计算机的普及。计算机本身是要钱的,这并不影响人们升级自己的CPU,内存,显卡等等设备。因此,有理由相信,如果有一个好办法使软件能收费使用,必将使软件业得到巨大的发展,更重要的,人们能用上更好的软件产品。