软件的未来其实在很大程度上要指望软件接口的前景如何。我们知道,计算机世界里的接口这两个字具有两种众所周知的含义:其一是指软件本身的狭义“接口”,比如各种软件开发API等。其二则指的是人与软件之间的交互界面。我们把这种人-软件之间的接口称作“用户界面”,也就是“UI”。
这里要讨论的前一种定义: 软件不同部分之间的交互接口。通常就是所谓的API——应用程序编程接口,其表现的形式是源代码。API的发明和发展大大促进了计算机产业的进步,同时API几乎决定着日常运算的各个方面。
大多数程序员秉承为软件用户设计优秀的用户界面思想,这一点早已深入人心。可是,另一方面,如何实现合理的软件API却只为少数人所重视。历史证实,所有在应用上获得成功的软件或者Web应用无一不是首先在API的设计上满足了用户的需求,即便这些用户几乎从不直接使用这些API!
早在上个世纪的70年代,Digital Research公司的Gary Kildall为微型计算机首创了世界上第一个实用的软件API。这个初生的API大致上有20多个对操作系统的简单函数调用组成,这个操作系统就是CP/M——那时可是相当的简单和粗糙,而同样简单的API却让整个计算机世界发生了重大变化。Kildall这个很有才气的计算机专家希望自己设计的API能被其他科学工作者采用。至于商用方面的考虑可是想都没想。而且,我们现在的产业现状也证实:仅让科学家们俱欢颜是不会在商业中赚到一分钱的!好在,比尔·盖茨熟悉到,用于应用程序开发人员而不是科学家的API绝对是商业软件获得成功的要害之一,这样一来,情况就很不一样了。
随后由比尔·盖茨等开发的MS-DOS操作系统全盘拷贝了CP/M及其API,并在这些API的基础之上又增加了一些简单特性,务实的比尔·盖茨将Kildall的发明变成了巨大的商业应用并马上让MS-DOS的API在软件开发中占据了主导地位。
然而,当微软公司推出Windows操作系统的时候,系统的庞大API族就没有拷贝Kildall的成果了,可是,事实证实这些微软自己折腾出来的Windows API实在是糟糕的可以:丑陋的代码、混乱的结构等等不一而足。但是,Windows采用了实用的伪多线程技术和高效的内存治理,非凡是简单易用的图形界面马上俘获了一般用户的忠心。大量的程序员也就随之投入到Windows程序的开发中来,这些糟糕的API自然当仁不让了。微软花费了5年多的时间改进和发展早期的Windows并在最终垄断了全球桌面操作系统市场。今天我们谁也离不开Windows API了,除非你不打算编写支持Windows的软件!
1988年,微软购买了Alan Cooper开发的可视编程语言:Ruby。随后微软把Ruby和垂死的QuickBASIC语言组合起来创建了Visual Basic。Alan Cooper方面的Ruby实现了名为VBX的软件API,这种API可以让程序员动态地扩展Visual Basic功能,这一事实再次证实了软件接口具有多大的重要性。VBX接口也就是目前火热的组件对象模型COM的前身。
在为微软的势力之外,Unix世界也发明了自己的API,这就是TCP/IP,有了它,网络之间就可以自由地通信了。TCP/IP首先在大学里获得了普遍的欢迎,然后,到了20世纪90年代,Marc Andreessen瞄准那些不是程序员却很想从使用计算机获得好处的年轻人推出了世界上第一个Web浏览器:Mosaic,后来在此基础上诞生了Netscape Navigator,可以说,正是Web和浏览器的发明,我们终于被带到了信息时代。
最早的Navigator所能作的不外乎就是查找和显示文件,这和Macintosh Finder乃至Windows EXPlorer也没什么两样,但是,正因为有了TCP/IP API,Netscape 就可以放眼于本机之外查找和显示其他网络上的其他计算机中的文件。新世界豁然洞开。
整个90年代,Netscape就象流感病毒一样满世界到处扩散。到了现在计算机之间在通用API的努力下可以非常方便地相互通信,但几乎没有一个用户会直接和这些TCP/IP接口交互。
假如没有优秀的、符合时代潮流的API,什么先进的技术都可能会不得不寂寞很长一段时间以等待命运的垂青。一旦成熟的API出现,软件的前景也就能大致看到轮廓了。
举个例子,不管是你身上的手机还是随身携带的PDA——比如PalmPilot,它们其实都是处理能力不同的计算机而已,这两种设备都装备了短距无线(通常是红外线)通信端口。可是,它们如何才能通过这些端口实现相互之间的通信呢?假如这些设备之间缺乏公用的API,你的手机就不可能和你的PDA实现通信。
今后会产生一种所谓的“生疏人服务”API,比方说,当你走在大街上的时候,你的手持设备,不管是手机、PDA还是笔记本电脑或者车载导航设备就会自动地和四周设施通信,商店、办公室、售货机和其他人等等。
目前有几家公司已经在致力于开发以上的通用API,其中最有希望的或许是Sun公司的Jini。但是,Jini的定位和以前的CP/M一样,也是更多的把目标放在了计算机科学家而不是解决方案服务商上。
我们今天的软件开发很大一部分是开发Web应用程序,驱动Web进步的是交互设计和商务模式而不是技术创新。从技术上说,Web领域的大开发商不会对Web本身挖掘太多,他们缺乏编写大型、复杂程序的耐心。但是,反过来,这些大型厂商可以把其他开发商预先编写的软件组件组合起来,这样,他们就比以往更多地依靠于为其编写的软件API。
总而言之,不管我们设计什么API,最重要的是首先要弄明白我们在为什么目标或者为谁在设计。这是一定要记得的要害点。只有在我们理解目标受众的需求之后,我们才可能创建有用的API,才能实现恰当的用户接口,才能让不同人设计的不同软件部分良好地集成。