忠告:
在我加入貝爾實(shí)驗(yàn)室一年多后,Gerard Holzmann設(shè)計(jì)了一個很小的交換式制圖語言,我開始和Ken Thompson一起在開發(fā)針對這種語言的即時編譯器上做兩個人同時編程。我打字比較快,所以我坐在電腦前,Ken站在我身后看我編程。我們開發(fā)的很快,但經(jīng)常會遇到問題,而且可以看出來出錯了——畢竟這是一個圖形化的編程語言。當(dāng)程序出錯時,我本能的一頭扎進(jìn)問題,檢查報錯跟蹤信息,添加調(diào)試打印語句,啟動調(diào)試器,等等,但Ken只是站在那思考,完全不理會我也不查看我們寫的出問題的代碼。一段時間后我發(fā)現(xiàn)一個規(guī)律,Ken經(jīng)常會比我先找到問題出在什么地方,而且會突然的喊一嗓子,“我知道什么地方的問題了?!泵看嗡呐袛喽己軠?zhǔn)確。我認(rèn)識到,Ken已經(jīng)在腦海里構(gòu)建了代碼的模型,當(dāng)有問題出現(xiàn)時,那是他腦子里的模型出了問題。在思考為什么會發(fā)生這些錯誤時,他能憑直覺找到模型中什么地方不對或發(fā)現(xiàn)寫的代碼跟這個模式什么地方有出入。
Ken教會了我一個極其重要的習(xí)慣:糾錯前先思考。如果你一頭扎進(jìn)問題中,你只能解決當(dāng)前代碼的問題,但如果你先思考這個錯誤,這個bug究竟為什么會引入?你會發(fā)現(xiàn)并且糾正一個更高層次的問題,進(jìn)而改進(jìn)了系統(tǒng)設(shè)計(jì),防止了更多bug的出現(xiàn)。