軟體開發中的「無緒」
無緒 (Cluelessness) 由 Martin Rinard 提出。他在演講時指出: 在開發和維護軟體系統時,應該避免讓開發人員深入了解系統。 因為人的大腦可以處理的資訊有限。若要建立一個日益變大的應用程式,就必須學習「 如何讓每個開發人員在不了解整個應用程式的情況下,也能完成軟體開發 」。 “無緒” 並不是一個貶義詞。它用來區別兩種層次的理解水平。 1. 淺層理解 :指對事物的了解程度僅限於掌握使用方法即可。 2. 深層理解 :指對掌握了事物背後的原則、規律、原理。 在日常生活中的“無緒” 生活中我們通常只需要用到 淺層理解 。例如,刷牙不需要知道化學式。不需要理解冰箱原理就可以冷凍食品。當然,也有一些人需要了解更深入的內容。像是冰箱的維修人員就要了解較深入的領域知識。但即便如此,維修人員所需要的知識仍屬於 淺層理解 ,因為他們也不需要了解事物背後的每個小細節和原理。 當然也可以學習每件事物背後的知識原理,但是必要性與 CP 值通常不大。因此大多數人在日常生活中只需要 淺層理解 就足夠了。 軟體開發中的“無緒” 在軟體開發中,“無緒” 也表示大部分的時間中,開發人員只需要 淺層理解 就足以應付工作。這裡的 淺層理解 並不是指開發人員不需要懂得編寫程式。以下舉個例子來說明軟體開發中的 淺層理解 與 深層理解 之間的差異。 「電子商務網站」: 某天 PM 告知下一個專案是「電子商務網站」。那麼,實作這個網站有兩種做法: 實作方法一: 在專案初始階段,我需要打開 HTTP 協定的文件,解析 HTTP 傳輸格式、 研究如何實現 POST、GET 請求....等等。 此外還要閱讀 RFC 文件,並實現文件中的各項內容。 全部都搞定後才能開始打造「電子商務網站」。 實作方法二: 在專案初始階段,在作業系統中下載並安裝 Apache、PHP、MySQL, 設定妥當後即開始打造「電子商務網站」。 相信 實作方法二 才是大家熟悉開發的方式,因為現代軟體都是基於組件組裝出來的,沒有人需要獨自從頭到尾完成所有內容。在一個作業系統上安裝 Web 服務並開始編寫 HTML,對現在的開發人員來說是易如反掌。但事實上光是 Web 服務就已經複雜到極點,應該沒人敢說自己了解 Web 服務的所有內容。這