David Wood — Fredericksburg, Virginia, USA

完美執行的迷思#

許多開發者相信:只要足夠努力、夠細心,就能寫出無瑕的程式碼。這個想法雖然普遍,卻是一種根本的錯覺。

核心觀點: 軟體無法做到完全無錯。這不是態度或能力問題,而是理論上的必然

為何無法達到完美#

軟體的本質複雜性#

英國研究人員指出,軟體開發與傳統建築工程最大的不同在於:「程式的基本構件——語句、程序、物件——無法以可預測的方式組合。」

不像樂高積木能精準嵌合,程式元件的組合方式幾乎無窮無盡,難以窮舉所有可能的互動與副作用。這正是所謂**圖靈完備性(Turing Completeness)**的體現——軟體本質上是複雜的。

程式意圖的快速流失#

追蹤程式邏輯已屬困難,追蹤程式設計師的意圖更是難上加難:

  • 寫完程式碼幾天後,原作者自己也往往忘記當初的考量
  • 需求變更、文件不一致,使意圖更加模糊
  • 人員離職後,源碼成為唯一的線索,而線索本身也是不完整的

錯誤的多重來源#

Bug 不只來自邏輯錯誤,也來自:

  • 對程式語言特性的不熟悉
  • 需求衝突或溝通不清
  • 不同人對同一需求的不同解讀

修復 bug 的同時,也會注入新的 bug——這是一個持續循環的過程。

Lehman 的洞見#

Meir (Manny) Lehman 早在 1969 年就發現:軟體在其生命週期中會持續演化。多重回饋循環(包括衝突的需求與設計決策)影響著這個演化過程,使得「完美」成為一個不斷移動的目標。

補充: 圖靈完備性(Turing Completeness)以 Alan Turing 命名,指任何計算裝置的設計都能被通用機器模擬。真正的圖靈完備機器在物理上不可能存在,但這個概念說明了軟體複雜性的理論上限。

正確的應對態度#

接受「完美執行謬誤」,並不是放棄對品質的追求,而是採取更務實的策略:

  • 建立工具與流程,支援增量式重構(Incremental Refactoring)
  • 同步維護需求、實作與文件的更新
  • 將 bug 視為演化的一部分,而非失敗的象徵

技巧: 與其假設能做到完美,不如設計出能快速偵測、快速修復的開發流程。這才是面對軟體複雜性的成熟態度。