《人月神話》,焦油坑與外科手術隊伍
人月神話作者將過去幾十年的大型系統開發比作焦油坑,很多大型和強壯的動物在其中劇烈掙紮,他們中大多數開發出了可運行的系統,但是不得不承認只有極少數的項目滿足了目標、進度和預算的要求。因為在各種團隊中,無論是大型的或小型的,龐雜的或精煉的,一個接一個地淹沒在了焦油坑中。
車庫裏生產的是什麽
在IT行業裏,車庫成為了傳奇誕生地一般的存在,但人月神話的作者認為“兩個程序員如何在經過改造的簡陋車庫中,編程超過大型團隊工作量的重要程序”這種事是不存在的。作者在焦油坑章節強調了一個事實:並不是所有的產業化隊伍都會被這專註的二人組合所替代,我們需要看產出的是什麽,程序、編程產品、編程系統、編程系統產品完全不是同一個概念和層級。車庫作業的程序員生產出來的只能說是程序,它本身是完整的,可以由作者在所開發的系統平臺上運行,但如果吧平臺上升一個層次,那它就是不完整的。
所謂的編程產品,它可以被任何人運行、測試、修復和擴展的程序。它可以在多種操作系統平臺上運行,供多套數據使用。要成為通用的編程產品,程序員必須按照普遍認可的風格來編寫,特別是輸入的範圍和形式必須廣泛地適用於所有可以合理使用的基本算法。接著,對程序進行徹底的測試,確保它的穩定性和可靠性,使其值得信賴。這就意味著必須準備、運行和記錄詳盡的測試用例庫,用來檢查輸入的邊界和範圍。此外,要將程序提升為編程產品,還需要有完備的文檔,每個人都可以加以使用、修復和擴展。經驗數據表明,相同功能的編程產品的成本,至少是已調試的程序的成本的3倍。這就是車庫程序員所生產不出來的東西(或是要廢相當大的力氣)。
此外還有概念就是編程系統、編程系統產品,這個在我印象中就好像Windows系統或者像高級編程語言這類程序,他們有著各式各樣的接口,在功能上能相互協作、具有規範的格式、可以進行交互的程序的集合,並且可以用來組裝和搭建整個系統
這就是作者布魯克斯最早認識到設計程序、開發軟件的差別,這也就是為什麽他把他過去幾十年的大型系統的軟件開發工作比作焦油坑——過於樂觀而越陷越深。
外科手術隊伍
要說我最喜歡的章節,那就是這一節。一個團隊需要什麽?
在開發小組中,最好和最查人員生產率比在10:1,在運行效率和空間上5:1驚人差距。如果一個200人的項目中,有25個最能幹和最有開發經驗的項目經理,那麽開除剩下的175名程序員,讓項目經理來編程開發。
小型敏捷的中小型團隊可以保持最高的效率,但對於大型軟件系統卻不得不投入更多的人力資源來換取進度的提前。一位首席程序員、類似於外科手術隊伍的團隊架構提供了一種方法——既能獲得由少數頭腦產生的產品完整性,又能得到多位協助人員的總體生產率,還徹底地減少了溝通的工作量。這就是一種具有效率的工作模式。
對我來說,成為首席外科醫生是我的理想,能在一個團隊裏成為頂梁柱會是我的目標,所以我會一直努力下去。
《人月神話》,焦油坑與外科手術隊伍