UI 開發雜談 (1)

July 5th, 2007

話說美好的 90 年代,只要學會 GW-BASIC 或 dBASE III,就算是電腦高手了,那真是令人懷念的時光啊 :p 那時候 80×25 的終端機螢幕,應用程式的 UI 只要會動就好,使用者必須自己想辦法搞懂要怎麼樣叫出什麼功能,真是程式員的天堂。是的,你若不知道按 / 就可叫出 Lotus 1-2-3 的選單,那肯定是你學藝不精,不會有人說是 Lotus 的程式寫的不好。

很可惜的是,這種好光景並沒有持續太久,事實上它也不可能持續太久,因為這樣的 UI 先天有許多缺陷

  1. 它是給專家用的,專家 = 少數買主 = 市場小,這個絕對會被股市唾棄
  2. 它有鍵盤這個天險,Baby boom 或 Echo boom 年代的人鍵盤熟練度不高
  3. 賣相不好,不夠親善 … 族繁不及備載 …

軟體業要擴張,所以軟體一定要想辦法讓普羅大眾都來買,都來使用,也因此圖形介面是必然的趨勢,滑鼠的發明以及 processor power 的進步使得這個必然終於開花結果。商業競爭下最後是微軟 Windows 幾乎主宰 PC 市場,過程我們宅男師程工不研究,對我們來講怎麼寫賣的出去的程式才是最重要的。Windows 的 look-and-feel 雖然逐漸演變 (3.1 -> 95 -> XP -> Vista),不過了不起 (或是沒進步) 的是,你還是可以用 Windows 95 年代完備的 Win32 API 來開發可供今日使用的 UI。我們底下就來談談這種傳統式的 Windows UI 開發。

微軟很早就提供了 Windows SDK 讓程式開發者可以寫作 Windows 的程式。早期由於 Microsoft C compiler 很鳥 (大家都用 Turbo C),Win16 SDK 實在問題多多 (這是非戰之罪,286 CPU 就是那樣而已),因此涉獵的人也少。進入 32 位元時代後,386 保護模式總算提供了較像樣的 preemptive execution,Microsoft C compiler 也進步許多,Win32 SDK 基於 Win16 的經驗做了很好的修正,終於讓整個開發的流程穩定下來。可是呢,純粹使用 SDK 來寫是寫的出來,但會非常繁瑣,於是微軟就推出 MFC,利用 C++ 的語言特性來降低程式開發的複雜度。

MFC 雖然較之 SDK 好用一些,但隨著各種新的 UI control 的推出,它也變得越來越難用 (例如 ListView),而且 MFC 開發之初,C++ 語言規格本身不完備 (沒有 template,沒有 exception handling),加上一堆奇怪的遷就和相容性問題,MFC 就變得越來越肥,效率上就不甚好了。這讓 MFC 處於一種尷尬的境地,特別是在 Visual Basic (VB) 出現之後。

VB 很多人罵,因為它肥,它慢,它是 BASIC,它是比爾蓋茲加持的。不過呢,我個人認為,VB 是一套革命性的語言。世界上的軟體並不是只有套裝軟體,有很多時候大家只是想要一個很快可以兜出來的東西而已,特別是企業內使用的客製化軟體,大部份來講這些軟體的 time-to-market 會遠比 UI performance 來的重要很多,這時 VB 的威力就顯現出來了。VB 最大的優點是讓程式開發者可以花更多的時間在處理 business logic 上,而不是把他們寶貴的精力拿來和 message loop 或 NMH_* 鳥蛋 message 奮戰用的。

.Net 出現後,微軟曾推出過 Windows Form,還找了 Charles Petzold 等名作者出書力拱。但這並不能掩飾 .Net Windows Form 的失敗。平心而論,.Net Windows Form 骨子裡就是 VB,應該有其市場,但微軟並未意識到 VB 式 UI 必然逐漸沒落的理由:

  1. 大型企業逐漸由 client-server 環境轉移到 multi-tier,為了樽節管理成本,VB-based rich-client 必然為更易管理的 thin-client (web-client) 取代
  2. 中小企業客製化軟體需求逐漸降低,這是拜現在的 SMB 軟體很好用之賜 (例如 QuickBook、PeachTree、ACT! … 等等)
  3. 套裝軟體宥於 download size (因為 XP 並未內建 .Net framework) 或 look-and-feel (.Net form 初期限制太多),必然投向 native application 的懷抱,而不會使用 .Net 來開發

另一個時機不對的產品,最後變成 open-source,沒錯,就是 WTL。WTL 我個人將它視為 MFC-done-right,它好好利用了現今 C++ 語言提供的種種功能,將 SDK 薄薄地包一層起來,又小又快又好寫。不過呢,除了少數軟體廠商之外,用的人很少。沒辦法,這也有其必然性,因為 VC++ 並未內建,而且程式開發者有其他的選擇,未必會走 Win32 UI 這條路,這個就等下回分解了。

PS. Java AWT 或 Swing 除了跨平台能力外,其實也可視為 VB 類型的開發工具,以小弟的觀點,它們也是註定要沒落的 😀

Windows, 技術文章, 無責任評論 | Comments Jump to the top of this page

Comments are closed.

隨便寫寫大家隨便看看的不出名小格子

舊文索引

站內管理