在我進入貝爾一到兩年後,我跟 Ken Thompson 是 pair programming 的搭檔,我們在寫一個由 Gerard Holzmann 設計的小的互動圖像語言(graphics language)專案。我打字比較快,所以我都是在鍵盤前面, Ken 站在我後面。我們寫得很快,然後有地方出錯了,在圖像語言通常都可以用「看」的看到。當有地方出問題時,我都反射性地開始深入問題,測驗 stack traces、查看 print 結果、使用 Debugger 等等。但 Ken 只是站著然後思考,不管我跟我們寫的程式。過了一陣子之後我注意到一個模式:Ken 總是比我先了解問題,然後會突然表示:「我知道哪裡出錯了。」,他通常是正確的。我了解到 Ken 在腦袋裡建立了程式碼的 model,如果有地方出錯,那就是這個 model 有地方有錯誤。因為思考問題是怎麼發生的,他會意到這個 model 哪裡有錯或是程式碼沒有完全遵照這個 model。
Ken 教我在 Debug 前要先思考是非常重要的。如果你專注在 Bug 本身,你會修復一個程式碼的問題,但如果你先思考這個 Bug,這個 Bug 是怎麼來的,通常你會找到更高層次的問題,這會提升整個程式的架構避免以後有更多的 Bug。
我知道這是作法的不同。有些人堅持使用一行一行的 Debug 方式,但我現在認為不去看程式碼的思考,是最好的 Debug 工具,因為這會產生更好的程式碼。
原文:"The Best Programming Advice I Ever Got" with Rob Pike