文章

人月神話

tar-pit

成書至今 35 年的《The Mythical Man-month》 (人月神話),至今讀來仍然不老,可見書對程式設計和軟件工程有透徹的了解,明白這一項工作的本質、涉及人事、流程等等,有什麼特質和局限,所以才能直擊要害,成為經典。

我們通常會說「這項目一共花了十個月的 man-month」,可是 Man-month 是一個神話,其估計永遠不準確。因為編寫程式不同耕田種菜,那些工作只要技巧上了手,工人們就可以獨立工作,所以要增加生產力,直接加人就可以了。可是編寫軟件卻不能這樣算,因為除了技巧,溝通也很重要。軟件涉及不同部份互相合作,各部份資料如何傳遞、格式如何,需要成員間的溝通。在一個趕頭趕命的軟件項目裏增加人手,並不能加快生產,反而要花更多時間作訓練、溝通。「人」與「月」是不可互換的。

寫程式是一項心智活動,程式員有很大的自由,能將意念化成文字指令讓機器執行。偉大的建築或音樂,可以只有一個設計者,作品強烈反映個人意志。但軟件通常時間迫切,總是需要很多人手加入規劃設計。如何將不同人的設計意念統一、實作、測試、付運,就成為軟件工程的最大課題。這裏面,要訂立很多不同架構、規則、流程、工具、文件等等。

此書亦收錄後來作者一篇《No Silver Bullet》,引起爭議最大。書中預測:十年內沒有任何技術,可以幾何級數增加軟件生產力。這預言是應驗了。這當中,作者討論軟件開發的本質:複雜、不一致、易變、無形。軟件各部份各異,無一相似,又有超多狀態,所以複雜。軟件開發總是要面對不一樣的問題,帶來不一樣的複雜,這並無任何一致性可言。因為軟件本身很容易被修改,引至用戶要求、排程、實作、測試等等活動,都經常處於改變之中。與實物不同,軟件是無形的,結構不受空間限制,也沒有任何一大圖表能夠代表整體 (要多張才可以)。

而在那時一些技術,如高階語言、時間分享、統一開發環境等等,都不能直擊這些本質問題。及至日後的一些技術,如 OO、AI、圖形編程等等,也沒有成為 silver bullet。

雖然如此,還是有些東西可以做到的。作者預測了一系列改變也正在發生,如由買軟件代替開發專用的 (組合使用 spreadsheet、word 等解決問題)、以不斷修正需求快速試作來開發、「生長」軟件等等,都可以減輕我們開發軟件的負擔。我讀此書是二十週年版,也就附有一篇作者在二十年後的回顧,詳細地察看自己的預測的異同及其因。

Software is hard。寫程式如寫詩一樣,自由度很大,卻又可以做出實際的東西, 猶如魔法 。可是自由越大,也越易出錯,加上要協調不同人事,就更複雜。我們需要各種各樣的規則流程方法,才能做出可靠的產品,這在現在越來越依賴電腦的世界,尤其重要。

回應

  1. 做软件,暂时是不可能像工厂一样进行量产的。
    每次接手一个项目,都会掉好几斤肉。与人沟通,已经排除以外情况,都是非常非常耗精力的!

*