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

2.1 隱喻的重要性

重要的研發成果,時常產自於類比。藉由將你不太理解的東西和一些你較為理解且十分類似的東西做比較,你就能對這些不太理解的東西產生更深刻的理解。

這種使用隱喻的方法叫做「建模(modeling)」。

科學發展的歷史並不是一系列從「錯誤的隱喻」到「正確的隱喻」的轉變 而是從「不是很貼切的隱喻」到「更貼切的隱喻」

2.2 如何使用軟體隱喻

隱喻的作用更像是個啟示(heuristic),而不是個演算法(algorithm)

  • 演算法:有明確的路徑會走向答案
  • 啟示:將對的提示,你要自己找到可能的路徑,才會到達目的。

對於程式設計來說,最大的挑戰還是將問題概念化( conceptualizing ),程式設計中的錯誤都是概念性的錯誤。

問題概念化:找出問題的屬性(可以解釋問題的屬性) 概念整體性:以程式來說,一個 function 的命名 getUserId 如果 return UserName ,就是不符合概念整體性。

以上面的例子來說 getUserId return UserName 偷渡了 userName 這個概念,破壞了這個概念完整性。 概念整體性,能夠幫助你收斂問題,以上面的例子來說,他就是用來拿取 user id ,不會有其他的可能(如果你沒有偷渡其他概念)

該如何使用軟體中的隱喻呢?你應該用它來提高你對於程式設計的問題和程式的洞察力。

我認為所謂的洞察力是指你能不能找出實際問題的關鍵部分,然後將他的特徵轉換為程式碼

2.3 常見的軟體隱喻

軟體建構(Software Construction):建造軟體(Building Software)

定義問題 -> 軟體架構設計 -> 軟體細節設計 -> 建構 -> 最佳化 -> Review

適當的引申隱喻的含義,你能從其蘊含的深刻啟發中受益。但若過分或錯誤的引申其含義,那它也會誤導你。

所以你覺得軟體設計的隱喻是什麼呢?