這是人月神話:軟體專案管理之道(20週年紀念版)的第十一章:失敗為成功之母(Plan to Throw One Away),簡體版譯作未雨绸缪,開場白有這一句常聽的諺語『There is nothing in this world constant but inconstancy.』,中譯為『這世界唯一不變的就是這世界一直都在變』,還有『It is common sense to take a method and try it. If it fails, admit it frankly and try another. But above all, try something.』,譯作『你得以平常心看待失敗,試試這個,如果行不通,就老老實實接受行不通的事實,再試試那個。總之,要成功,就得去試一試。』
在先導試驗工廠與擴大規模這節,我想學工廠經營的人都很清楚,先導試驗工廠(pilot plant),以及擴大規模(scaling up),在我們這一行裡,是講試產然後在量產,不過概念是一樣的,但是這個觀念用在軟體專案裡頭,好像搞軟體的不懂這一套,所以作者在這一節建議,『無論如何,把必然的一次失敗納入正式計畫之中(plan to throw one away;you will,anyhow)』,也就是這篇的主題!
第二節唯一不變的就是變,再套句諺語以不變應萬變,我想以這一句話這可以概括這一節了!
第三節使系統利於改變,這裡提到一些技術,呼叫程序(calling sequence)、表格驅動技術(table-driven)(就是把程式執行時所用到的參數或設定值存放在一個表格檔案中,而不是寫死在程式裡,當有需要改變時,就只要更改表格的內容即可,不必修改程式)、高階語言跟自我說明技術(self-documenting),還有版本的使用,這些都市目前軟體界常使用的技術,應該沒有多說明的必要。
第四節,使組織利於改變,一看到這一節標題,ㄚ琪就直覺難啊,果真文中也提到這樣的制度很難,但是文中提到IBM建立了一個雙梯式(dual ladder)的晉升結構,這倒是ㄚ琪從未見過的,不過Google一下還是可以找到,這應該屬於人資的領域,難怪ㄚ琪較少看過。
第五節進兩步,退一步,這一節討論到軟體的變動不會因軟體已經交付給顧客之後就終止,這一個階段我們叫做軟體維護(program maintenance),ㄚ琪對這種維護的經驗很多,有些人甚至會說為什麼不一次做好,我想不能一次做好的原因很多,除了課本上所題到的原因外,另一個原因是我們還要賺維護費啊,一次做好不僅費很多時間,而且之後你就別再想賺維護費了,你說是不,所以這是一種經營的策略,當然也是比較邪惡的,不過也是沒法度的事,但是為何會取這個標題名稱,課本是這樣解釋的,『軟體維護所遭遇到的一個重要問題,就是因修正錯誤而導致其他錯誤的可能性相當高(約20~50%),所以才叫進兩步,退一步,或許可能有人會像ㄚ琪不太明瞭。
所以要解決這樣的錯誤,『理論上,每修正一個錯誤之後,都應該將之前所有的測試案例(test case)統統拿來測一遍…要做到像這樣完整的迴歸測試(regression test),付出的成本是相當高的』,有鑑如此ㄚ琪其實偶爾會偷懶做這樣的迴歸測試,因為有時真的覺得太無聊了!
最後一節,進一步,退一步,這應該是軟體人深刻的體驗,ㄚ琪也這樣覺得,總之萬事萬物會趨於紊亂(entropy),歷史上多的是改朝換代,修改軟體最後不見得有用,最後唯一能做的就是重新設計,這樣週而復始,我的結論是ㄚ琪一直可以有工作做!哈ㄚ