很多人都幻想软件可以工厂化,流水线化生产,但是这一天却从来没有到来。
软件和工厂模式的不同在于软件是研发出来,而工厂是研发出来后,持续生产。工厂中的生产阶段是重点,而软件的生产阶段只需要复制复制,可以忽略不计。所谓的流水线指的是工厂的生产阶段,所以软件很难出现所谓的流水线。
那么软件是不是无法扩大规模,无法标准化?那又不需要这么悲观,我认为软件大规模“生产”(研发)是有条件的:
一、组件化和接口标准化
二、服务和消费模型
三、可验证可测试
四、性能和功能可配置
其中核心是接口的标准化。一个大规模集成的环境下,标准接口是必须的,而这个往往是占山为王的思维下很难得到发展的一部分。
比如QQ的通信协议就是私有的,谁也别想用QQ的资源。然后新浪微博也不是想用就用,一切都是封闭的。
而比较成功的例子是电脑的设备接口,这些硬件正是因为有标准接口,品种繁多,而性能得到不断的更新换代。硬件厂家设计什么新的设备,首先考虑标准化接口,因为硬件市场不是靠谁就可以独占的,掌握接口标准的强势厂商的往往乐于分享。
一个理想的环境下,应该出现一堆行业标准接口,一个成功的产品应该是集成业界最先进部件的产品,而不是固执的使用自己出品的产品来构造一切。
新浪微博是优势产品,网易就应该使用,搜狐就应该使用,而不是各自产生对应的产品。当然,这不仅仅是软件的问题,也是商业环境的问题。
为何微软不山寨一个脸谱,和乐于合作?为何微软不搞cpu,而忠诚的和intel合作了几十年?这些都是商业环境的原因。只有每个开发者,乐于分享,乐于使用,才能有标准接口出现,而标准出现又极大地调配合优化了社会的资源,让软件可以以最佳的速度发展和产生最佳的创意。
说完宏观的,微观上,我们开发软件也应该在自己力所能及的层面上,使用标准化的接口,让各个组件得到充分的复用,减少复用组件的条件约束。