David Wood — Fredericksburg, Virginia, USA
完美執行的迷思#
許多開發者相信:只要足夠努力、夠細心,就能寫出無瑕的程式碼。這個想法雖然普遍,卻是一種根本的錯覺。
核心觀點: 軟體無法做到完全無錯。這不是態度或能力問題,而是理論上的必然。
為何無法達到完美#
軟體的本質複雜性#
英國研究人員指出,軟體開發與傳統建築工程最大的不同在於:「程式的基本構件——語句、程序、物件——無法以可預測的方式組合。」
不像樂高積木能精準嵌合,程式元件的組合方式幾乎無窮無盡,難以窮舉所有可能的互動與副作用。這正是所謂**圖靈完備性(Turing Completeness)**的體現——軟體本質上是複雜的。
程式意圖的快速流失#
追蹤程式邏輯已屬困難,追蹤程式設計師的意圖更是難上加難:
- 寫完程式碼幾天後,原作者自己也往往忘記當初的考量
- 需求變更、文件不一致,使意圖更加模糊
- 人員離職後,源碼成為唯一的線索,而線索本身也是不完整的
錯誤的多重來源#
Bug 不只來自邏輯錯誤,也來自:
- 對程式語言特性的不熟悉
- 需求衝突或溝通不清
- 不同人對同一需求的不同解讀
修復 bug 的同時,也會注入新的 bug——這是一個持續循環的過程。
Lehman 的洞見#
Meir (Manny) Lehman 早在 1969 年就發現:軟體在其生命週期中會持續演化。多重回饋循環(包括衝突的需求與設計決策)影響著這個演化過程,使得「完美」成為一個不斷移動的目標。
補充: 圖靈完備性(Turing Completeness)以 Alan Turing 命名,指任何計算裝置的設計都能被通用機器模擬。真正的圖靈完備機器在物理上不可能存在,但這個概念說明了軟體複雜性的理論上限。
正確的應對態度#
接受「完美執行謬誤」,並不是放棄對品質的追求,而是採取更務實的策略:
- 建立工具與流程,支援增量式重構(Incremental Refactoring)
- 同步維護需求、實作與文件的更新
- 將 bug 視為演化的一部分,而非失敗的象徵
技巧: 與其假設能做到完美,不如設計出能快速偵測、快速修復的開發流程。這才是面對軟體複雜性的成熟態度。