心態:相信問題能被解決#

軟體系統極其複雜——Linux kernel 有九百萬行程式碼,遠超 A380 客機的四百萬個實體元件。面對如此複雜度,你的心智需要一切可能的協助。

首先,你必須相信問題可以被找到並修復。心理學家稱之為 perceived challenges 與 skills 之間的匹配。如果你不相信自己能解決問題,你的思緒會游移不定,最終只是修補表面症狀而非根本原因。

除錯時你擁有兩大利器:

  • 存取所有資料:問題表現、log、原始碼,甚至機器指令
  • 強大的運算能力:可以撰寫工具或腳本來篩選大量資料、定位罪魁禍首

預留充足時間#

除錯是高度消耗腦力的活動,比寫程式更複雜,因為你必須同時在腦中維持程式的邏輯和底層效果。你還需要設定環境、breakpoints、logging、測試案例等。

不要在找到 bug 之前就半途而廢,否則之前投入的時間全部浪費。至少要確認自己已經完全理解需要做什麼。

排除干擾,進入 Flow 狀態#

除錯需要進入 flow(心流)狀態——一種完全沉浸在活動中的心理狀態。根據 Mihaly Csikszentmihalyi 的研究,flow 可以提升毅力和表現。

以下干擾會打斷 flow 狀態:

  • 彈出訊息、電話
  • 社群網路更新
  • 同事來問問題

關閉不必要的應用程式,開啟手機靜音模式,在螢幕上掛「請勿打擾」標示。

讓困難問題「睡一覺」#

研究發現,睡眠期間大腦神經元會在看似無關的路徑之間建立連結。這對除錯很有幫助——你可以藉此跳脫看似死胡同的困境。

要讓這個方法生效:

  • 睡前要認真投入問題,給大腦足夠的素材
  • 睡飽,讓意識層能有效接收潛意識的建議

堅持不懈#

電腦在最底層是確定性的(deterministic),所以你一定能追查到錯誤。高層引入的非確定性(如 threads)也可以透過大量重複執行來突破。除錯的死胡同通常源自不夠堅持——遺漏的測試案例、忽略的 log 檔、未探索的切入角度。

投資你的環境、工具和知識#

作者回顧自己最常犯的除錯錯誤就是在建置除錯基礎設施上投資不足,例如:

  • 沒有準備好精簡的測試案例
  • 沒有自動化重現步驟
  • 沒有寫腳本分析 log
  • 沒有深入了解 API 或語言特性的運作方式

一旦下定決心投資於必要的準備工作,除錯效率會大幅提升,往往能在幾分鐘內精確定位 bug。

重點回顧#

  • 相信問題可以被追蹤和修復
  • 為除錯任務預留充足時間
  • 安排不受干擾的工作環境
  • 對困難問題「睡一覺再想」
  • 不要放棄
  • 持續投資你的環境、工具和知識