軟件的未來其實在很大程度上要指望軟件接口的前景如何。我們知道,計算機世界裡的接口這兩個字具有兩種眾所周知的含義:其一是指軟件本身的狹義“接口”,比如各種軟件開發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,才能實現恰當的用戶接口,才能讓不同人設計的不同軟件部分良好地集成。