藉由隱喻進一步理解軟體開發#
在軟體開發的領域中,重要成果往往依賴於「類比」的運用。
透過熟悉、具體的概念,映射到陌生且抽象的軟體概念上,我們能更深刻地理解問題本質。
這種過程,我們稱為建模(Modeling)。
隱喻的力量:是啟示而非演算法#
模型的威力在於其生動性,能幫助我們捕捉事物的神韻。
在軟體工程中,隱喻(Metaphor)的角色更像種啟示(Heuristic),而非死板演算法(Algorithm)。
啟示 vs. 演算法
- 演算法:給予明確指令,保證得到特定結果
- 啟示(隱喻):輔助你尋求答案,但告訴你目的和結果
由於程式設計中的問題與概念往往獨特且多變,我們很難找到一條能解決所有問題的通用規則。然而,隱喻能指引我們思考方向,幫助我們想出更好的做事方法。
常見的軟體隱喻:軟體建構(Software Construction)#
用「建造建築物(Building)」來類比「軟體建構」是個非常貼切且經典的隱喻。兩者在流程與邏輯上有著驚人共通處:
| 共通點 | 說明 |
|---|---|
| 前期準備至關重要 | 如同蓋房子前需勘查地形, 軟體開發初期的 定義問題(Problem Definition) 非常重要 |
| 設計先行 | 動工前,須先與 建築師(Architect) 討論整體架構設計 |
| 藍圖繪製 | 需劃出詳細藍圖與施工承包商討論,對應到軟體的細節設計 |
| 由下而上 | 從穩固地基開始建構(Construction), 軟體也需從核心基礎模組開始撰寫 |
| 修飾與優化 | 主體完工後需要進行外觀的美化與最佳化(Optimization) |
| 品質控管 | 最後需要請監察人員進行整體的檢查(Reviews / Inspections) |
| 成本結構 | 兩者的成本浪費主要都源自於人力資源的消耗 |
| 組件重用 | 為了效率與品質, 應盡量用已完成的現成元件(Prefabricated components)來組成系統 |
| 規模效應 | 蓋狗屋與蓋摩天大樓的方法截然不同; 同樣地,軟體工法的複雜度也會視專案規模而調整 |
智力工具箱(Intellectual Toolbox)#
除了建築隱喻,我們也可以用「工具(Tools)」來理解軟體技術與知識。
軟體工程師的成長過程,就像是在充實腦中工具箱。學到的知識越多,工具箱裡的工具就越豐富。
更重要的是,資深工程師不僅擁有工具,更知道 何時(When)以及如何(How) 正確地使用它們。
總結#
隱喻並非互斥,它們可以互相組合並適當引申其含義。
善用這些隱喻,能讓我們在面對複雜軟體難題時,獲得極具價值的啟發。
要點#
- 建模本質:利用已知概念來理解未知事物
- 隱喻作用:作為啟示(Heuristic)引導思考,而非作為標準答案
- 核心隱喻:將軟體開發視為「建築工程」,強調規劃、架構與規模適應性
- 技能累積:將技術視為「工具箱」,重點在於靈活運用與情境判斷