人月神話
[美]弗雷德里克·布魯克斯/著(Frederick Phillips Brooks)
汪穎/譯
人月這個詞組是一個考察工作量的度量單位,一個人月也就是一個人在一個月能夠完成的工作量。在軟件工程里,經常用多少個人月來估算項目的工作量。
作者用了一個孕婦生孩子的案例說明了人月這個單位混淆了工作量和進度這兩個概念。一個孕婦生一個孩子需要10個月,那么為了加快生孩子的過程,我們是不是可以讓10個孕婦在一個月里就把孩子生出來呢?顯然不行。
同樣,很多軟件項目管理人員總是希望通過加入更多人手來加快軟件工程的完成進度。然而實際情況並非如此,因為軟件工程的各項工作之間往往有一個前后沉積的關系,得完成一項,才能進行另一項,加進來的人手並不能馬上就開展后面的工作,所以想要通過增加人手來縮短工作時間其實只是一個神話。人月神話所反映出的是軟件開發在項目管理中遇到的難題。管理人員因為盲目樂觀,對項目開發中的困難沒有充分認識,在計算工作的工作量和交互時間上,采用了錯誤的計算方法,忽略了細節對整體的巨大影響,這就很可能導致項目延期。
比如說很多工作路徑上的事情是無法分解的,往往只能一個人完成,即使有些工作可以拆解,但是一個人做事情和很多人做事情的模式是不一樣的。一個人工作時需要的溝通很少,想怎么做就怎么做。但是人一多,就需要持續的溝通交流,需要了解彼此的工作習慣和工作內容,然后這些人才能團結協作,完成同一個目標。這就是需要花費很多時間去開會和交流。
歸根結底,軟件行業是一個知識密集型的行業,團隊中人員數量很多,角色也很多。這些角色使用的語言和思維方式都是不一樣的,要讓這樣一群人形成有戰斗力的團隊,流暢的溝通是必須的。而要達到流暢的溝通,一段時間的磨合期是必須的。
作者在書中通過多篇文章為我們提供了相應的方法和舉措。
首先,作者建議以小團隊的方式進行合作,以類似外科手術的團隊組織結構來開展工作。調查表明,最好成員和最差成員工作的效率是10比1,作者認為應該讓優秀的人作為整個團隊的核心來開展工作,團隊中其他人各司其職作為輔助來完成整體工程。這就是外科手術團隊的奧秘。
作者提出了項目管理建議是防微杜漸,提出了很多具體可行的建議。
軟件工程是一個非常復雜的項目,這不是一個簡單的相加的項目,因此,項目管理人員一定要認識到防微杜漸的重要性,對於項目中的延遲和意外要有充分的警惕性。千里之堤,潰於蟻穴。很多項目的失敗,其實都是源於一個個很微小的延遲和意外,這些微小的延遲和意外本來確實沒有很嚴重的后果,但是藏在這些工作人員背后的僥幸心理才是最致命的。
為此,作者提出了很多建議。
項目推進過程中,要設立一些關鍵的節點。作者把這稱為里程碑事件,一旦有了目標,項目團隊成員就有了明確的目標可以前赴后繼,想方設法達成目標了。里程碑事件的關鍵在於保證百分之百的完成度。
還有一部分問題是無法徹底解決的。
人月神話中的一些問題,根源在於軟件工程本身的特性,是無法徹底解決的。這是書中最有名的故事,沒有銀彈。
銀彈就是銀做的子彈。在西方神話中,為了殺死狼人,必須使用白銀做的子彈,這里的銀彈是指一種徹底解決問題的招數或技能。作者說在軟件工程管理上沒有銀彈,也就是說在軟件工程的項目管理中總會遇到無法解決的困難,任何時候都不可能是從頭到尾一帆風順的。
作者從兩個方面解釋了原因,其一,計算機技術的發展太快了,計算機硬件與軟件迅速發展,工作人員需要不斷地學習新的知識技能。其二,軟件研發本身的內在特性也制約了軟件工程的進展,作者用四個詞概括了這種特性,復雜性,一致性,可變性,不可見性。
盡管人月神話無法達到,但可以通過一系列的方法無限趨近這一神話,幫助軟件開發者進行有效的項目管理。
軟件工程可能是人類創造出的最錯綜復雜的一項工作,甚至這種復雜度還在不斷增加,人們能做的只有不斷學習更新的技術,探索更好的管理方法,