# 十二、軟件開發中的5個世界
有一件重要的事幾乎在所有程序設計和軟件開發文獻里都沒提到,所以我們之間有時會有誤 解。 你是個軟件開發者,我也是。不過我們的目標和需要可能并不相同。事實上軟件開發有幾個 不同的世界,而且每個世界的規則都不一樣。 去找一本關于UML模型的書來看看,里頭完全不會提到UML不適合用于驅動程序。或者你去讀 另一篇說「20MB執行時期鏈接庫[.NET要用的]并不是問題”的文章,它也并沒有指出明顯的 事實:如果在只有32KB ROM的呼叫器上寫程序,這絕對是個問題!
我認為這里頭有五個世界,雖然偶而有重迭但通常都不會。這五個分別是:
1. 熱縮封膜(Shrinkwrap)軟件
2. 內部用的軟件
3. 嵌入式軟件
4. 游戲軟件
5. 用后即丟的軟件
當你讀最新的極限程序設計書藉或Steve McConnell最好的書,或是Joel on Software或軟 件開發雜志,會看到很多有關如何開發軟件的聲明,不過幾乎都不會提到所討論的開發類型, 這實在是很不恰當,因為有時候世界不同,做事的方法也會跟著變。
讓我簡短的介紹這些類型。
熱縮封膜軟件是「外頭」很多很多人要用的軟件。可能是用玻璃紙封好在CompUSA販賣,也 可能是透過Internet下載的。可以是商業軟件或共享件,也可以是開放源碼或GNU或其他型 式-重點是該軟件會被成千甚至數百萬人安裝使用。
熱縮封膜軟件由于兩個特性而衍生出特有的問題:
1. 由于使用者很多而且通常都有代替商品,所以用戶接口必須比一般水平更容易才會成功。
2. 由于軟件會在很多的計算機上執行,所以程序對計算機間的差異要格外有彈性。 上星期某人寄了一封電郵給我,內容是CityDesk—個只在波蘭版Windows出現的問題,原因 是那個操作系統會用右邊的ALT鍵輸入特殊字符。我們測過Windows 95、95OSR2、98、98SE、Me、NT 4.0、Win 2000還有Win XP。也測過安裝了 IE 5.01、5.5或6.0的狀況。我們也測了 美國、西班牙、法國、希伯來文、和中文各種語文的Windows。可是就是還沒測到波蘭版。
熱縮封膜軟件有三個主要的分支。開放源碼軟件通常是不支薪的人開發的,而這些人的動力 經常會劇烈變動。舉例來說,在全都是志愿者的團體中,被認為不「好玩」的事通常沒人會 做。另外也如Matthew Thomas所指出會降低可使用性。開發動作很可能是分散在各地進行,
導致團隊溝通的質量參差不齊。在開放源碼世界很少會面對面在白板旁一邊畫著框框和箭頭 一邊討論,所以這類項目在需要畫圖溝通的設計決策上通常都做得很差。因此這種地域分散 團隊在復制現有軟件時做得會好很多,因為抄現有的軟件就不太需要設計了。
顧問軟件是另一種熱縮封膜軟件分支,由于需要很大量的客制化和安裝,所以得用恐怖的價 錢請一整批顧問來安裝。客戶關系管理(CRM)和內容管理系統(CMS)軟件通常都屬于這一類。 有些人會覺得這些軟件其實什么事都做不了,只不過是找一群顧問進來每小時付300美元的 借口罷了。雖然顧問軟件裝得像熱縮封膜軟件,不過由于安裝啟用的成本太高,其實比較像內部用的軟件。
像Salesforce.com或eBay之類的Web商業軟件還是必須容易使用并能在很多瀏覽器上執行。 雖然開發者比較幸運,能或多或少控制所部署的環境(位于數據中心的計算機),不過還是得 處理各種瀏覽器間廣泛的差異,以及大量的使用者。因此我認為它基本上算是熱縮封膜軟件 的一支。
內部用軟件只考慮一種狀況,在一家公司的計算機能跑就好了,因此開發起來容易多了。你 可以對執行環境做各種的假設。你可以要求某個版本的Internet Explorer或微軟Office或 Windows。如果你需要幽圖表,呼叫Excel來幽就好了;我們部門里每個人都有Excel。(不過 在熱縮封膜軟件這樣做的話,潛在客戶大概會跑掉一半。)
在這里可使用度并不重要,因為必須使用的人數有限,反正也沒有其他選擇就只能將就。開 發速度會更加重要。由于開發投入的價值只局限于一家公司,能用的資源相對上也少了許多。 微軟花得起五億美元開發一套對一般人只值80美元的操作系統。不過當Detroit Edison(譯 注:能源公司)開發一個能源交易平臺時,投入的成本就必須適合單一家公司。要得到合理 的投資報酬率就不能像熱縮封膜軟件一樣花錢。所以很悲哀的,很多內部用軟件都爛到不能 再爛。 嵌入式軟件具備一個特性,它會被放在硬件里而且幾乎都不能更新。這可是個完全不同的世 界。由于沒有第二次機會,質量要求比平常高出許多。你可能得用一顆比一般桌上型處理器 慢上許多處理器,所以得花很多時間做優化。程序漂不漂亮沒關系,跑得快才重要。可用的 輸入及輸出裝置可能也很少。 上周租的車上有裝全球定位系統(GPS),不過上面的輸入/輸出很差,幾乎不能用。你曾試過 用這種玩意輸入地址嗎?他們在屏幕上畫了一個「鍵盤」,你必須用箭頭鍵從五個小矩陣(每 個里面各有9個字母)選出要的字母。(我自己車上的GPS有觸控屏幕,使用接口就好很多多。 不過離題了。)
把游戲軟件獨立算一類有兩個原因。首先游戲開發的經濟是打擊導向的。有些游戲擊出安打, 更多的游戲被三振,如果你想在游戲業賺錢就得了解這一點,然后確定你有多個游戲,才能 用大賺的錢去平衡失敗的損失。這其實比較像電影業而不是軟件業。
游戲開發更大的問題是只能有一個版本。當使用者玩完毀滅公爵3D版本,并不會因為修正了 某些問題或増加新武器而升級成毀滅公爵3.1D。除了少數例外,一般玩完一個游戲后再重玩 是很無聊的。所以游戲的質量要求和嵌入式軟件相當,又要有足夠的錢一次就把東西做好。 熱縮封膜軟件開發者就幸福多了,如果1.0版不符合大家的需求,再出個2.0版或許就可以了。
最后用后即丟軟件是只為了得到其他東西而暫時創造的軟件,當你達到目的之后永遠都不會 再用到。舉例來說,你可能會為了其他需要,寫一個小命令腳本把某個輸入檔案轉成需要的 格式,這就是只用一次的操作。
或許還有其他我忘記的軟件開發類型。
這里要講一件重要的事情。當你閱讀那些由專業軟件開發大師或顧問撰寫的程序設計方法書 時,可以放心認定書里說的都是企業內部用的軟件開發。不是熱縮封膜軟件,不是嵌入式軟 件當然也不會是游戲軟件。為什么呢?因為這些大師都是企業在請的,是企業在付他們的薪 水。(相信我吧,id software是不會請Ed Yourdon去教結構化分析的。)
上星期Kent Beck聲稱如果實施極限程序設計的話,就不需要錯誤追蹤系統。因為成對程序 設計(持續進行程序代碼檢視)和測試導向開發(保證100%的自動測試涵蓋率)的結合,讓你幾 乎不會出現問題。這我可就聽不懂了。于是就到我們自己Fog Creek的錯誤追蹤數據庫里看 看究竟都是在忙些什么問題。
瞧,我發現這些問題絕少能被成對程序設計或測試導向開發找出。我們很多的「問題」基本 上就是XP所謂的story,只是功能要求。我們用問題追蹤數據庫來記錄要實作的大小功能和 改善,并且用它來管理這些工作并排定優先級。
其他很多問題都是只會在外頭經過大量使用后再會發現。比如波蘭鍵盤的問題。這種東西成 對程序設計是不可能發現的。還有那么我們未曾發生,把不同功能一起運作時才出現的邏輯 錯誤。程序愈大愈復雜,功能間的未考慮到的互動就會愈多。一個很少出現的特別字符序列 (`{${?`,如果你一定要知道的話)讓字匯分析器錯亂了。有些ftp服務器在刪除不存在的檔案 時會出錯(我們的ftp服務器不會有事,所以我們從來沒遇到過。)
我很小心的看過每一個問題。在CityDesk更新版所修正的106個問題中,只有5個可以藉由搭 擋程序設計或測試導向設計來預防。事實上我們知道而且覺得沒關系(這只能讓我們的客戶 來指正!)的問題遠比XP方法能抓到的要多。
不過就其他開發類型來說Kent是對的。就大部份的企業開發應用而言,上面這些東西都不算 問題。輸入不合法時程序會當掉?重新執行一次,這次注意不要輸入{${?了!另外我們只有 一種FTP服務器而且全公司都沒有人在用波蘭版的Windows。
不管在做什么項目,大部份軟件開發的事情都是一樣的,不過并不是每件事都是。當某 人告訴你某個方法并認為可以用于你正在做的工作時。先想想這個家伙是打哪來的。Steve McConnell、SteveMaguire還有我都來自相同的小角落:一個在華盛頓州雷蒙撰寫客戶眾多 的電子表格應用程序的世界。因此我們對容易使用有很高的要求,同時要求問題的數目要少。 其他方法論大師的工作是企業內部開發的顧問,所以他們會說那些話。不管如何,我們都應 該能由對方身上學到一些東西。
- 第一部分 位與字節:編程實踐點滴
- 一、語言的選擇
- 二、深入底層
- 三、joel測試:改進代碼的12個步驟
- 四、每一位軟件開發人員必須、絕對要至少具備UNICODE 與字符集知識(沒有任何例外!)
- 五、輕松寫就功能規格說明書 - 第1節:為什么煩心?
- 六、輕松寫就功能規格說明書 - 第2節:什么是規格說明書?
- 七、輕松寫就功能規格說明書 - 第3節:但是……如何?
- 八、輕松寫就功能規格說明書 - 第4節:技巧
- 九、輕松制訂軟件進度表
- 十、每日連編是朋友
- 十一、難伺候的故障修復
- 十二、軟件開發中的5個世界
- 十三、稿紙原型開發
- 十四、不要被太空架構師所嚇倒
- 十五、開火與運動
- 十六、人員技能
- 十七、源于計算機學科的三個錯誤思想
- 十八、二元文化
- 十九、自動獲取用戶故障報表
- 第二部分 開發人員的管理
- 二十、面試游擊指南
- 二十一、重金激勵害多利少
- 二十、二不配備測試人員的五個首要(錯誤)原因
- 二十三、任務換人有害無益
- 二十四、絕不去做的事情,第一部
- 二十五、冰川下的秘密
- 二十六、漏洞抽象定律
- 二十七、程序設計界的LordPalmerston
- 二十八、評測
- 第三部分 Joel對常態問題的遐想
- 二十九、RickChapman解讀愚昧
- 三十、在這個國家狗是干什么的? 我們有多么天真?
- 三十一、作為哼哈二將,只管去做事
- 三十二、兩個故事
- 三十三、巨無霸麥當勞與天才廚師JamieOliver
- 三十四、沒有什么像IT看起來那么簡單
- 三十五、提防非自主開發綜合癥
- 三十六、策略I:BEN&JERRY公司與AMAZON
- 三十七、策略II:雞與蛋問題
- 三十八、策略III:讓我回去!
- 三十九、策略IV:大件與80/20神話
- 四十、策略V:公開源代碼的經濟因素
- 四十一、墨菲法則肆掠的禮拜
- 四十二、微軟公司是如何敗北API之戰的
- 第四部分 對.NET稍多的評說
- 四十三、微軟精神失常了
- 四十四、我們的.NET對策
- 四十五、請問,我可以使用連接程序嗎