作者  fcamel (飛啊!起舞的小駱駝)  看板   P_fcamel
 標題  [SE]   Book ~ 人月神話, note 3
 時間  Sat Sep 18 14:20:41 2004


從16章開始就是20週年紀念版新加的東西了, 於1995年出版,
這一篇論文很理論, 我的感受度比起其它章節低很多 ~"~

ch16 No Silver Bullet --- Essence and Accident in Software Engineering ( 此篇為作者在1986的論文 ) 軟體創作包含本質性工作和附屬性工作(essesntial task and accidental task), 本質性: 抽象的概念結構, 像是演算法, 資料結構, 想法 附屬性: 實現的程式語言, 工作環境 除非附屬性占了工作的9/10, 否則即使把附屬性工作成本降為0, 也無法使整個工作的開發成本提升一個數量級 (10倍) ( 作者沒提出分析數據, 但他不認為會高到9/10 ) 以往(~1986)的重大突破都是針對附屬性, 比方高階語言的誕生 * 本質性困難 複雜性: 這不像數學或物理, 可以用簡單的模式推導出現象的特性, 數學物理在某些領域的複雜行為, 是可以抽離的, 它們是附屬性 配合性: 軟體需要配合人類制度和系統介面, 隨介面和時機而有所變化, 因為軟體要配合的東西是是人設計的, 不是上帝 易變性: 更動一個上市且穩定的軟體是常見的事, 這不像房屋, 汽車, 因為更新軟體是很容易的(比起俱實體的產品), 使得軟體本質上有這樣的困擾 隱匿性: 軟體無法用幾何抽象表示, 如同數學物理, 或是電路圖, 只能使用有向圖交疊在一起表示流程和相依, 不能算是二維也很少有階層性, 要由圖形建立概念很困難, 阻礙溝通 Brooks預測10年內(1986~1996)不會有"銀彈"的產生 (意指解決軟體開發的必殺技), 並提出對當時一些樂觀想法的觀點, 比方OOP只能解決附屬性, 不是本質性, OOP仍然不是銀彈 <沒有銀彈>不代表本質性無解, 而是要循序漸進地改變, 不可期望會一瞬間有重大突破, 如同人類承認細菌造成生病而非惡魔, 於是和細菌相關的研究漸漸地累積, 改善醫療問題 本質性上大有可為的作法 外購: 不要自己寫, 買個現成品可以打聽口碑和有豐富的文件, 成本也不會比養一票人一年來得多 快速原型制作: 當今最大的錯誤假設, 就是能預先界定完整的規格, 以此進行專案喊價直到開發完成並安裝 漸進式開發: 軟體是發育而來, 是build而非write, 先完成能執行的程式, 即使呼叫一堆空的副程式, 執行後什麼也沒有也無所謂, 接著填副程式, 呼叫一堆空的模組, 再來加上模組內容, 一點一滴地充實 Brooks向軟工實驗課的人員提倡後, 見識到驚人的效果, 並且可以鼓舞士氣, 持續看到成果使士氣維持良好 這些小案子得到的效果, 亦可用在大型專案 [NOTE] XP的理念和漸進式開發是一樣的, 自從我改變理念為"先能動就好"後, 寫程式愈來愈順手, 不斷地加功能, 重整, 看到成果, 使我有動力繼續完成其它事, 也可避免overdesign, 反之, 一開始定詳盡但不見得正確的設計後, 最後是沮喪地結束什麼也沒有的專案 偉大的設計師 回顧歷史可以得知, 真正激勵人心, 擁有廣大愛好者的軟體系統, 往往出自少數偉大設計師的構想, 每個組織都必須下定決心培養偉大的設計師, 並宣示他和偉大的管理者同樣要, 他們擁有同樣培訓和報酬, 包括薪水, 特權, 辦公室大小, 助手等 [ to be continued ]