去年年底,我离开了就职了近十年的通讯行业,加入了淘宝(中国)软件有限公司从事淘宝浏览器的软件开发工作,至今已有好几个月了。在过去的这些日子体会着互联网行业的不同,也让我逐渐地理解加入该行业前的一些疑问。下面,我就自己的一些感悟做一点分享,由于个人经历有限,所以局限性难免。

首先,理解两个行业软件产品的运营特点具有非常重要的意义。通讯企业(指通讯产品制造商,后同)的产品是卖给象中国移动这样的运营商的,由运营商通过使用它来为用户提供服务(比如提供手机业务)。如果通讯企业的产品存在问题,将直接导致运营商的经济损失。运营商为了降低这种损失,会制定各种规则将之转嫁给通讯企业。比如,我在UTStarcom工作期间得知,那时公司为了解决产品问题而进入运营商的机房将以每次百万美元的费用支付给日本的某运营商(具体数目我记不清,但当时公司为此遭受了巨额损失)。显然,这种转嫁是带有一定的惩罚性的,其额度也谈不上是否合理,个中不合理性也反映了通讯行业是买方市场。

在这种背景下,对于通讯企业来说,产品缺陷的严重性和数量与所带来的损失是显式正相关的,因而企业对软件缺陷有着更为严格的控制。我在多家通讯企业工作的最大感受是,她们对于软件开发的规范性要求很高,其中以Motorola最甚。我认为Motorola的质量管理虽低效,但却有效 —— 她能做到在项目初期计划好的时间内发布产品。

反观互联网行业,其产品大多由企业自身所运营(例如,直接通过CDN发布)。当产品出现缺陷时,开发团队可立即进行线上修复。这种模式的特点是,产品缺陷所带来的损失更有可能降到最低,且由于无人统计缺陷的真实损失、也不存在象通讯行业那样的惩罚性费用,而使损失成为隐性的,进而容易让人忽视而忘记采取甚至是必要的缺陷预防措施。

两个行业的产品运营特点能很好地解释为什么通讯行业大多采用较“重”的流程,也能理解为什么通讯行业对于软件测试的要求在整体上更重视。

其次,我们亦可从两个行业的发展水平去发现区别。相比互联网行业,通讯行业更成熟,其成熟体现于运营商通过强制各厂商的通讯产品遵守象3GPP、ITU 和IETF这些标准化组织所制定的规范,以保证它们间能实现互联互通。值得强调的是,标准化组织所制定的规范左右着产品的业务逻辑是通讯行业很突出的一个特点。由于通讯行业有着几十年的发展历程,因而其规范的规模非常庞大,这就造成掌握相关规范需要花费很大的努力,这也解释了为什么通讯行业一定需要有系统架构师和开发架构师的存在。

反观互联网行业,其并不存在象通讯行业中的3GPP这样对业务流程进行规范化的组织(W3C是很重要的组织,但她仍没有规范象电子商务的业务逻辑这些内容),这在某种程度上减小了软件开发的前期投入成本,也从另一个侧面反映了目前互联网行业的开放性(通过相互开放API的方式解决了不同公司产品间的互联互通问题)。另外,也由于互联网行业不存在象通讯行业那样庞大的规范体系,因而对软件架构师的作用在认识上也会相对弱。

再次,我们可以从各自产品开发方式的差异找到两个行业的不同。互联网行业是开放精神的体现,存在大量的开源(基础)软件,也使得很多终端产品有机会基于之上去构建。然而,通讯企业的软件系统几乎自成一体,很多软件(基站软件最为典型)完全是根据标准化组织的规范自主从无到有开发的,因而对企业层面的软件开发水平(架构师水平、项目管理水平)从整体上提出了更高的要求。对比互联网行业,企业(或开源组织)的开发水平具有明显的两极分化。处于开源软件阵营的往往具有很高的开发水平,因为这些项目能吸引业内的优秀人才,且这些人才当中不乏对软件的复杂性本质有着深刻认识之士;处于另一方的企业阵营,其软件开发的特点更多地体现于集成(开源软件)、定制与调优,开发水平则逊色不少(但技术水平可能很高)。就所接触的Chrome浏览器开源项目来看,我认为该项目团队的开发水平高于我所就职过的、包括UTStarcom、Motorola、NSN在内的通讯企业。对于这样的结果,如果我们知道大型开源项目大多运作得比企业项目好就一点都不感到奇怪了。

这里提到通讯企业的软件开发水平在整体上要求更高,很容易让人简单地以为是通讯行业的软件规模更大所至,但根本原因并非如此简单与直观。身处通讯行业的同仁可能会认为3GPP那么复杂,要实现它其难度可以想象;而互联网行业的同学也可以举出象Chrome这样的项目,其压缩后的项目代码超过2G,其中包含WebKit、V8引擎等,复杂度更不用说。说实在的,要认真、严肃地比对两个行业的规模并非易事,甚至很难拿出让人信服的结论,或许我们可以从另外的角度去考虑。通讯行业最大的复杂度在于基站子系统,可以说一个通讯系统的开发中,大部分的人力被投放到了基站、网关这些质量要求很高的嵌入式设备的开发上。互联网行业中虽有象Chrome这样恐龙级的项目,但投放到这类项目的人员与整个互联网行业相比并非大头,大部分人其实是对其进行定制、优化或集成,或实现互联网产品的业务逻辑。

最后,从产品的特点同样可以发现两个行业的差异。互联网行业产品最大的焦点在于用户体验和数据吞吐率:前者的工作内容表现为UI的设计与软件的配合实现,这类软件很难实施软件行业广为认同的单元测试等质量保证手段;后者的工作内容则表现为软件系统的集成和调优,由于受制于所采用开源软件的现有实现,同样难以实施相应的质量保证措施。通讯行业的产品在高可用性、互操作性和安全性上的要求更为突出,由于关键设备是一个独立的嵌入式系统且软件实现更加自成一体,因而就有可能采用象单元测试这样的质量保证手段。相信读者从两个行业产品的特点上能解释不少行业间令人困惑的现象。