Rob Pike談“我收到的最佳程式設計建議”

高翌翔發表於2012-08-17

Rob Pike現在是Google的傑出工程師,曾是貝爾實驗室(Bell Labs)Unix團隊成員之一,此外他還參與開發了Plan 9Inferno兩款分散式作業系統。他是建立Go及Limbo兩款程式語言的中流砥柱。Rob分享了在貝爾實驗室工作時的一段往事,從此改變了他的除錯方法。

姓名:

Rob Pike

Rob Pike Avatar

工作經驗:

我曾在貝爾實驗室(Bell Labs)工作多年。我就職於計算科學研究中心,正是該(規模小得驚人的)實驗室建立了Unix,不過直到Unix第7版釋出(1979年)以後我都不在那裡。自2002年以來,我一直在Google,從事與各種零散的基礎設施、以及基礎設施之基礎設施相關的工作。

最顯著的成就:

在我的著作中,或許最為人所知的就是與Brian Kernighan合著的《UNIX程式設計環境》(The Unix Programming Environment,於1983年11月01日出版,至今將近30年了仍在重印)、以及《程式設計實踐》(The Practice of Programming)。我做過的應用最為廣泛的成果就是與Ken Thompson一起研發的UTF-8編碼。不過我在以下方面也完成了重要工作:計算機圖形學、作業系統、軟體工具,並在最近幫助研發了Go程式語言

最常用的程式語言:

由於使用了太久,在這裡不得不承認C語言是我最常用的程式語言,不過在我的職業生涯中我曾使用過許多不同的語言。如今,幾乎我所編寫的一切都是用Go語言完成的;Go語言是我使用過的最具生產力的語言,而且它已經徹底取代了C語言在我工具箱中的位置。

建議:

那是在我加入該實驗室一兩年後,當時我正在與Ken Thompson結對程式設計開發一款即時編譯器,該編譯器用於一種由Gerard Holzmann設計的小的互動式圖形語言。由於我打字速度更快,因此當我們程式設計時,由我執掌鍵盤,而Ken則站在我的背後。當我們緊張工作時,一旦哪裡出了問題通常都是看得見的——畢竟那是一種圖形語言。每當某些地方出錯時,我會本能地開始探究那個問題,如檢查堆疊跟蹤、新增列印語句、呼叫偵錯程式等等。不過Ken卻只是站在那裡思考,無視我以及我們剛剛寫下的那些程式碼。經過一段時間,我注意到一種模式:Ken經常會先於我理解問題所在,還會突然宣佈,“我知道是什麼錯了。”他一般都是正確的。我意識到,Ken為那些程式碼構建了心智模型,一旦哪裡出了問題必定是該模型中出現了錯誤。通過思考怎樣有可能發生那個問題,他會憑直覺知道此模型在哪裡出了錯,或是我們的程式碼在哪裡必定沒有滿足此模型。

Ken Thompson Avatar

Ken Thompson

Ken教導我,除錯前的思考十分重要(thinking before debugging is extremely important)。要是你一頭鑽進錯誤,你就會傾向於修復位於程式碼中的片面問題,但是如果你首先琢磨該錯誤,考慮該錯誤是怎麼來的,你通常會發現並修正程式碼中更高層次的問題,那將會改善設計並防止進一步的錯誤發生。

我承認這很大程度上是風格問題。有些人堅持以逐行工具驅動的除錯方法來處理一切錯誤。但是,現在我相信,思考——不看程式碼——是最好的除錯工具,因為它會導致更好的軟體。


檢視英文原文:"The Best Programming Advice I Ever Got" with Rob Pike

來自更多程式設計師的建議參見“我收到的最佳程式設計建議”(The Best Programming Advice I Ever Got)系列文章

“我收到的最佳程式設計建議”系列譯文

  1. 千萬別碰其他人的程式碼!——Russ Olsen
  2. 在你讓程式碼可重用之前,應該先讓程式碼可用。——Bill Wagner
  3. 在著手對程式碼進行額外修改之前,應該花點兒時間去理解位於異常/堆疊跟蹤頂部的錯誤訊息。——Obie Fernandez
  4. 除錯前的思考十分重要——Rob Pike
  5. 編寫更少的程式碼。——Russ Olsen
  6. 閱讀的資料一定要比你編寫的內容多得多,而且要堅持閱讀高質量的資料。——Danny Kalev
  7. 翻譯中……

相關文章