藉由隱喻進一步理解軟體開發#

在軟體開發的領域中,重要成果往往依賴於「類比」的運用。
透過熟悉、具體的概念,映射到陌生且抽象的軟體概念上,我們能更深刻地理解問題本質。
這種過程,我們稱為建模(Modeling)

隱喻的力量:是啟示而非演算法#

模型的威力在於其生動性,能幫助我們捕捉事物的神韻。
在軟體工程中,隱喻(Metaphor)的角色更像種啟示(Heuristic),而非死板演算法(Algorithm)。

啟示 vs. 演算法

  • 演算法:給予明確指令,保證得到特定結果
  • 啟示(隱喻):輔助你尋求答案,但告訴你目的和結果

由於程式設計中的問題與概念往往獨特且多變,我們很難找到一條能解決所有問題的通用規則。然而,隱喻能指引我們思考方向,幫助我們想出更好的做事方法。

常見的軟體隱喻:軟體建構(Software Construction)#

用「建造建築物(Building)」來類比「軟體建構」是個非常貼切且經典的隱喻。兩者在流程與邏輯上有著驚人共通處:

共通點說明
前期準備至關重要如同蓋房子前需勘查地形,
軟體開發初期的 定義問題(Problem Definition) 非常重要
設計先行動工前,須先與 建築師(Architect) 討論整體架構設計
藍圖繪製需劃出詳細藍圖與施工承包商討論,對應到軟體的細節設計
由下而上從穩固地基開始建構(Construction)
軟體也需從核心基礎模組開始撰寫
修飾與優化主體完工後需要進行外觀的美化與最佳化(Optimization)
品質控管最後需要請監察人員進行整體的檢查(Reviews / Inspections)
成本結構兩者的成本浪費主要都源自於人力資源的消耗
組件重用為了效率與品質,
應盡量用已完成的現成元件(Prefabricated components)來組成系統
規模效應蓋狗屋與蓋摩天大樓的方法截然不同;
同樣地,軟體工法的複雜度也會視專案規模而調整

智力工具箱(Intellectual Toolbox)#

除了建築隱喻,我們也可以用「工具(Tools)」來理解軟體技術與知識。

軟體工程師的成長過程,就像是在充實腦中工具箱。學到的知識越多,工具箱裡的工具就越豐富。
更重要的是,資深工程師不僅擁有工具,更知道 何時(When)以及如何(How) 正確地使用它們。

總結#

隱喻並非互斥,它們可以互相組合並適當引申其含義。
善用這些隱喻,能讓我們在面對複雜軟體難題時,獲得極具價值的啟發。

要點#

  • 建模本質:利用已知概念來理解未知事物
  • 隱喻作用:作為啟示(Heuristic)引導思考,而非作為標準答案
  • 核心隱喻:將軟體開發視為「建築工程」,強調規劃、架構與規模適應性
  • 技能累積:將技術視為「工具箱」,重點在於靈活運用與情境判斷