小议手机软件平台开发 [转]

本人有幸在一年之内参与过某大型外企的两个手机软件平台的开发(首先申明,这两个平台既不是Symbian也不是Windows Mobile:) ),对这类平台的开发算是有点体会,有的话觉得不吐不快,于是在这里说说。

什么是手机软件平台?
大家可以把现在的手机想象成你现在看此文章用的PC机,PC之所以有这么丰富的功能,因为有操作系统,还有操作系统之上的软件,你的手机之所以能够炫酷之极,也是因为有其操作系统和软件。象Windows不光有基本的进程内存管理之类的基本功能,也自带很多实用的应用软件,M$还提供VS.net之类的工具让我们开发新的应用来扩充Windows的使用,Windows实际上就是一个PC上的软件平台。手机软件平台也类似,以我的理解:
1) 它基于一定的硬件架构之上。现在手机的硬件架构没有象PC一样有业界通用的标准,所以几乎特定的平台只能用于特定厂商的硬件体系。
2) 它提供对应用程序的基础支持,现在的手机不再只是只有打电话一个应用,必须提供对应用通用要求的支持,相当于一个操作系统或者一个虚拟操作系统。
3) 它自带一些应用,如打电话、发短信之类必备应用,还有摄像、IM之类新兴引用。
4) 最重要的,他能够方便的扩展,开发者能够方便的建立新的应用。

现在手机厂商之间竞争很激烈, 新品层出不穷,那个厂商要是有一个成熟的软件平台,技术上就等于有了一个稳固的后方,面对新的市场要求,在平台上加以扩展,就能够很快退出一个新的手机产品,就能在竞争中取得优势。

就我所知,各大手机厂商现在都在花大力气研发自己的软件平台,但是现在还算能拿得出手的也就是Symbian和WindowsMobile了(依我拙见),这个事情真的就这么难办吗?

我个人也不清楚别的公司为什么没有开创出优秀的软件平台,但是我对我所经历的两个平台的开发还是有点认识,教训大于经验,在这里写出来以飨天下:)

开发一个开放平台<script language="javascript" type="text/javascript"> document.title="小议手机软件平台开发(2) - 开发一个开放平台 - "+document.title </script>

要开发手机软件平台,一定要已开始就要确立这个平台将来是要开放出去的目标,也就是说,开发的这点东西,将来应该是给外面的人继续开发的。

我参加的一个手机软件平台就贯彻了这一点,遵从OSGi协议(这是一个现在很多厂商组织都在支持的协议,Eclipse 3.x开始也支持这种协议了)。这样的一个好处就是整个团队(往往是几百人)都有一个统一的vision,当出现技术决策的时候,考虑的是,我们做的东西将来拿出去给别人开发应用的时候方便不方便,软件设计者始终心存未来的开发者,设计的结构和接口都趋于合理。我参加的另外一个平台开发就没有这么高瞻远瞩了,搞Architecture的从来就没有想过要把这个平台拿出去在业界广泛使用,实际设计者为了赶工,很多技术解决方案于是就是权益之计,日积月累,hard-code越来越多,整个code趋于腐烂。

软件平台开发是一个大工程,需要建构很多component,几百人一起协作,每个component的开发者如果想的是,这个component不光是要给线在的component用,将来还要给第三方用,API一定会定义的合理。相反,如果component之间的通讯都用hard-code的方式,那将是后患无穷,不光是产生的互相依赖造成配置管理的问题,更严重的是,API趋于不合理。听说过一个比方,API是潘多拉的盒子,实现代码是瘟疫,如果盒子没有定义好,瘟疫就会传染给别的模块。

 模块化<script language="javascript" type="text/javascript"> document.title=" 小议手机软件平台开发(3) - 模块化 - "+document.title </script>

一个手机软件平台开发是一个大工程,包含底层驱动、类库,还有上层的基本应用,必定要分成很多个模块来分别开发,我参与过得两个平台都有几十个模块。需要模块化是常识,但是怎么样模块化就是需要功力了。

模块化首先需要分级别,这样易于管理,比如,操作系统级的模块是UI类库的基础,UI类库上层需要UI的应用的基础,这样可以比较合理的把模块分为3个级别。在管理上,每个级别的release都要把关,不然,会给依赖它的上层级别模块带来不必要的麻烦。

模块间的通讯也是一个问题,尤其是应用级别的模块间通讯。Windows Mobile可以使用com和.net方便的实现IPC,Linux操作系统本身缺乏标准化的IPC机制,基于Linux的QtE和GTK提供了IPC机制,但是感觉还是很有限,QtE的QCopChannel只能异步通讯,不能同步,GTK支持CORBA,但是还没听说在嵌入式设备上采用CORBA的,而且GTK2.x之后性能决定其不大适用于嵌入式。Symbian的工作机制不大了解,不知道有没有成熟方便的IPC。

我个人不同意用shared libray的方式解决IPC,这样dependent关系太直接。作为平台,应该建立一种应用见通讯(包括同步和异步)机制,不然,项目变大之后,这样的互相依赖变成网状,很难控制。

 开发平台需要CMM吗?<script language="javascript" type="text/javascript"> document.title=" 小议手机软件平台开发(4) - 开发平台需要CMM吗? - "+document.title </script>
简单的回答:不需要。
复杂一点的回答:非但不需要,CMM可能会成为平台开发的绊脚石。

说这话可能会得罪一些CMM的支持者,本人曾供职过一个某软件强国的CMM5/PCMM-4的企业,现服务于一家移动开发世界数二数三的公司,自认为对CMM和移动开发都有心得,不是睁眼说瞎话。

首先声明,我并没有贬损CMM规范的意思,CMM对某些应用软件的开发还是很有作用的,我只是说它不适用于手机软件平台的开发。

Why?

微软某高层说过:“如果某天一个CMM5企业要进入浏览器市场,我会半夜笑醒。“手机软件平台和浏览器一样,有研究的性质,需要的是灵活和创新,而CMM帮忙只会帮倒忙。

CMM规范的实施基于这样一个假设---“需求是明确的而且易于获得的”,但是手机软件平台不是这样的,平台是用来给开发应用的,很多需求都是摸索着获得的,不是象超级市场货架上的商品一样拿就行了。CMM这一点也导致它在很多别的应用开发中很尴尬。

软件平台开发更多的需要是作为王牌程序员的聪明才智,我就认识某个牛人一人完成一个嵌入式application framework(UI除外),而CMM实施带来的overhead是有目共睹,程序员往往就在繁冗的表单填写中丧失了激情。

CMM名为“能力成熟度模型”,但自身也有很多不成熟的地方,没法保证产生优秀的软件产品。CMM保证一个bug能够被track,但是bug如何被fix,就完全靠程序员的专业能力;CMM保证所有的文档都被review,但是没法保证review过得文档就是高质量的。我相信,很多成功实施CMM的企业,也不是完全依赖CMM,需要其他更重要的东西,比如好的人才招聘培养和挽留机制:)

这样做个实验,软件业这一二十年获得巨大的发展,列出十个觉得最伟大的软件,看看有几个是在CMM的监督之下成果的。我写的是
    Windows
    DOOM/Quake
    C++
    Java Platform
    Linux
    Warcraft 3
    Office
    .Net Framework
    Eclipse
    Starcraft
    呵呵,排名不分先后。
    伟大的软件总是会有很多的创新和突破,这是CMM无法做到的。
政治问题<script language="javascript" type="text/javascript"> document.title=" 小议手机软件平台开发(4) - 政治问题 - "+document.title </script>
不用多说,程序员也逃脱不了政治问题,尤其是公司内部的政治问题。

公司花钱开发手机软件平台,是用来赚钱的,不是为了花钱而花钱的,如果开发出来的东西不能赚钱,那就有被cut掉的危险。别忘了,有很多现成的成熟的手机软件平台,公司是买手机的,不是买平台的,最终用户夸也只夸手机号不夸平台好,骂也只骂手机烂不骂平台烂,所以一个平台不行,就换一个。

平台面对的是时间问题,现在手机产品层出不穷,隔一段时间就有新产品,如果平台不能跟上节奏,就会被淘汰,不管你使用了什么技术,公司是等不及了。

还是那句话:实用的技术就是好技术。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值