軟體的未來其實在很大程度上要指望軟體介面的前景如何。我們知道,電腦世界裡的介面這兩個字具有兩種眾所周知的含義:其一是指軟體本身的狹義“介面”,比如各種軟體開發API等。其二則指的是人與軟體之間的互動介面。我們把這種人-軟體之間的介面稱作“使用者介面”,也就是“UI”。
這裡要討論的前一種定義: 軟體不同部分之間的互動介面。通常就是所謂的API——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,才能實現恰當的使用者介面,才能讓不同人設計的不同軟體部分良好地整合。