軟體開發專案管理的經典。雖然已經成書40年,但經典還是有可看之處;反過來說,資訊軟體界變化之快,40年前遭遇的困難有不少現在已經有工具可以幫助我們了。
即使是軟體開發,整個專案團隊依舊是人所組成;因此,只要與人有關的問題,這本書依舊擲地有聲。團隊會遇到的問題如團隊的組成,管理與技術職是否分開,溝通方式,進度,預算等等,各種專案中狗屁倒灶的到今日也沒少過。甚至不只軟體開發,其他由人組成的團隊與專案也多少都有類似的問題。
另一方面,純資訊軟體的部分,1970年代和今天已經天差地遠,作者提到的可能是銅子彈,問題解決方案的高階語言之一 Ada 語言幾乎已經被時代所淘汰。時至今日,各種高階物件導向語言,版本控管,自動註解等工具,專案經理的訓練與工具,以及專為軟體開發的思考如敏捷式開發這數十年慢慢出現,也慢慢被程式人所接受。這部分除非對電腦與程式語言歷史有興趣,不然其實可以不看。
大體上來說,這本書前面數章節討論人,還是值得看,中間幾章看過每章開頭就夠了,後面的故事與例子 (如IBM709, OS/360這類阿公級的電腦) 可以跳過,直到最後兩章,20年或30年的回顧再看就夠。
另外分享書中兩個概念: 外科手術團隊。如真實世界動手術的團隊有外科醫師(主刀醫師),助手(也是醫師),刷手護理師,麻醉醫師,麻醉護理師等等所組成。軟體開發與外科手術一樣,經驗豐富的程式設計師/架構師產出遠勝過普通人或新手,所以如外科手術團隊中不是每個人都拿手術刀,軟體開發團隊也不是每個人都直接寫程式。書中建議的軟體團隊包含
首席程式設計師 (surgeon/chief programmer):如同外科醫師,是整個專案的技術負責與決策都是這個人。負責定義功能,規格,架構,測試方法等,也負責撰寫程式。
副手 (copilot):首席的分身,能夠擔負首席的工作,只是經驗不足。負責撰寫程式,參與技術討論評估,也是首席的備位。
行政助理 (administrator,或者現在比較流行的稱呼 專案經理):負責所有人事,財務,法務,等等各式後勤。
其他人如文書助理,程式語言專家,測試員等等。時至今日,許多職位都有工具可以取代,這裡就不提了。
另一個概念就是書名「人月神話」的由來。一個人十個月的工作,找十個人也不會一個月就搞定。十個人生孩子還是要十個月。當專案吃緊時增加人力可能反而會拖累進度,唯一的例外是新加入團隊的高手正好是專案需要的,如經驗豐富,或者正好有特殊的專業技能知識符合專案需求。外科醫生團隊與人月神話這兩概念,我想不只軟體開發,許多高專業的專案或任務應該也適用。