智能手机的开发,骑士与兵团 / 2010-07-27


昨天我的一位好友写了一篇文章,名为《骑士时代的回归》(点击阅读),这篇文章给了我很大的感触。对于我来说,作为一位软件工程师,也是经历了骑士至兵团再至骑士的这么一种历程。在此,我想对这个骑士与兵团之间的历程来一次浅谈。为什么是浅谈呢?我在几乎所有的智能手机平台下都做过开发,但是除了 WM 和 Android 外,其他的都未深入,对某些平台难免会有偏见或误会,这些当然也是由未深入了解所产生的。所以本文不谈具体技术,当然就是浅淡了。
智能手机,似乎从来都是由兵团操控的,这要追溯到1999年的MOTO A6188,如果没有记错的话,它是全球第一款智能手机,使用 PPSM (Personal Portable System Manager)操作系统。它开创了手机开发史上的里程碑,把 PC 上的开发理念搬到了手机上,包括著名的事件驱动机制等。更值得一提的是,PPSM 还是支持触摸屏,支持蓝牙的,同时在其开发包中,提供了对程序界面的可视化设计,在 1999 年这个年代,只能用神奇两字来形容,MOTO 在那时的理念是绝对超前的。

下图是一个 PPSM 系统的手机界面,年代久远了,还是黑白屏

也许大家早已淡忘了那个年代,当时为它做开发的同学也许还记得,为了那个仅 16MHz 的 CPU,为了那个仅有 4M 的内存,一个小小的程序往往得改上几天几夜,才能解决一个因为内存不足而引起的问题。当然,这些事情,都是一个骑士可以完成的。经过一段时间的磨炼后,一个熟练的开发人员可以在一周内完成一个五子棋的游戏,并且不需要调试!
而真正引起兵团时代的,可能是诺基亚。第一款S40的手机是 Nokia 7210,上市于 2002 年。这款手机可以说是革命性的,因为它支持 J2me,换言之,一个 Java 程序员可以花很小的代价转向手机的软件开发。这比以前前进了一大步,S40 的可用软件一下子就多了起来,虽然 J2me 要直接设计手机的软件界面并不是很方便,并且也有一些由于屏幕分辨率而带来的麻烦,但是终究比 PPSM 好得太多了。你高兴自己来管理程序使用的内存吗?现在你说不高兴也可以了。

但是对于 Java 来说,毕竟还是适合多人合作的。除去代码不说,其推荐的 MVC 设计模式,就已经把程序拆成了几层。开发人员面面俱到固然可以,但是那个时候已经产生了分歧,有些人专攻后台网络传输,有些人专攻 UI 显示,甚至有一批人开始了手机开发框架的研究。这些固然都不能对最终的开发造成多大的影响,但是骑士时代已经渐渐的退去了。
“一个人做不了好项目”,这句话虽然被现在的我们所熟知,但是其出处与时间也一直是不详的。我不想去考证这句话倒底哪里来的,但是这句话的产生,与 2002 年 S40 的爆发有着直接或间接的关系。

而后来 S60 的推广,更是带来了一个大规模的兵团时代,从 Symbian C++ 出生的那一刻起,在手机上以骑士的方式作战就变得无比的困难。一个实用的程序往往需要几个人一起研究,一方面塞班的开发资料很少,另一方面,开发包实在难 用。一个很简单的例子,如果你想控制程序界面上的字体,控制行距,那么你不得不使用超过6个类,而且在编码上异常的复杂。我向来很佩服一个人完成一个塞班 应用的,因为他们把原本该一个兵团来做的事情,一个人包揽了。

到目前为止的 S60 V5,整个塞班的开发依然没有改善,也难怪现在越来越多的开发者从塞班转向了 IPhone 或 Android,而塞班本身的应用,特别是多媒体和移动互联网方向的应用非常匮乏,这也将导致其越来越被网络时代所排斥。
再来看 Windows CE 到 Windows Mobile,这个发展历程可以说是非常经典的。WinCE 是完全的兵团模式,虽然当年还是可以使用 .NET 1.1 来开发,但是深入的做一些事情,就会发现 .NET 1.1 的无力。我们的解决方案是 EVB 和 EVC,于是问题就来了,因为没有用于移动平台的 MFC,所以我们只能退而求其次的选择 WTL。这个拥有着大量全局对象的庞然大物,让 WinCE 的程序苦于为其管理各项事宜。这当然不是一个人可以完成的工作。
而 WM 就是一个优秀的转机了,随着 .NET 在移动平台上的完善,它发挥了越来越大的威力,后来的程序员们发现,.NET 几乎可以在 WM 上做任何的事情。骑士从那个进候开始回归。

智能手机的开发,骑士与兵团

微软在移动开发上的理念,也经历了这样的转换,从开始的多人合作模式,转为单人模式。因为他们发现,在移动平台上多人协作,其实意义并不大,移动平台受硬件所限,无法像 PC 那样为一个应用来设计出优秀的架构。就那么一个小小的屏幕,做那么几件小小的事情,解决由硬件产生的种种问题才是正途,而不是把精力花在无谓的软件结构上。所谓的良构,是适合多人合作中,多人一起维护代码,显然手机的应用完全不需要这么做。

我很早就说过,在手机的开发中,执行效率第一,功能第一,至于其他的架构,代码可读性之类都是其次。不可能为了代码能让别人看懂,就牺牲掉程序的效率。事 实上,手机程序的效率将能够决定这个程序是否被用户所接受,而用户是永远不会来看你代码的。在手机开发过程中,代码写的再难看,只要效率上去了,那就是好 代码,这也是为什么需要手机开发的骑士。一个人做,怎么做都行,一群人做,每个人都受限。
最后谈谈 IPhone 和 Android,似乎已经完完全全的进入骑士时代了,许多优秀的应用都是一个人独立完成。一个人有什么优势呢?不受他人左右,创意无限发挥,想怎么玩就怎么玩,自己的钱自己赚。所以,在现今这个智能手机已经充斥着我们的生活的年代,开发者没有理由不成为一名骑士。

最后,借用原文的一句话来收尾:为骑士欢呼!