Rob Pike談“我收到的最佳程式設計建議”
Rob Pike現在是Google的傑出工程師,曾是貝爾實驗室(Bell Labs)Unix團隊成員之一,此外他還參與開發了Plan 9及Inferno兩款分散式作業系統。他是建立Go及Limbo兩款程式語言的中流砥柱。Rob分享了在貝爾實驗室工作時的一段往事,從此改變了他的除錯方法。
姓名:
Rob Pike
工作經驗:
我曾在貝爾實驗室(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
Ken教導我,除錯前的思考十分重要(thinking before debugging is extremely important)。要是你一頭鑽進錯誤,你就會傾向於修復位於程式碼中的片面問題,但是如果你首先琢磨該錯誤,考慮該錯誤是怎麼來的,你通常會發現並修正程式碼中更高層次的問題,那將會改善設計並防止進一步的錯誤發生。
我承認這很大程度上是風格問題。有些人堅持以逐行工具驅動的除錯方法來處理一切錯誤。但是,現在我相信,思考——不看程式碼——是最好的除錯工具,因為它會導致更好的軟體。
檢視英文原文:"The Best Programming Advice I Ever Got" with Rob Pike
來自更多程式設計師的建議參見“我收到的最佳程式設計建議”(The Best Programming Advice I Ever Got)系列文章。
“我收到的最佳程式設計建議”系列譯文
相關文章
- Obie Fernandez談“我收到的最佳程式設計建議”NaN程式設計
- Erik Buck談“我收到的最佳程式設計建議”程式設計
- Danny Kalev談“我收到的最佳程式設計建議”程式設計
- Russ Olsen談“我收到的最佳程式設計建議”程式設計
- Bill Wagner談“我收到的最佳程式設計建議”程式設計
- 谷歌大牛 Rob Pike 的 5 個程式設計原則谷歌程式設計
- 我曾得到的最佳程式設計建議程式設計
- 我給所有新手程式設計師的建議程式設計師
- 我曾經得到的一個最好的程式設計建議程式設計
- 《碼農群英傳》連載(一) —— Go 語言之父 Rob PikeGo
- 程式設計幾點建議程式設計
- Google前美女面試官談程式設計師面試的技巧和建議Go面試程式設計師
- 學習Java程式設計的建議Java程式設計
- 自學程式設計的朋友,我想給你們這 5 個建議程式設計
- 我給程式設計師新手寫簡歷的一些建議程式設計師
- 池建強:我的人生超程式設計(圖靈訪談)程式設計圖靈
- 程式設計漫談(二十):如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- PHP 安全程式設計建議PHP程式設計
- 程式設計師:開始程式設計生涯的5個建議程式設計師
- java程式設計的一些建議Java程式設計
- 一個老程式設計師的建議程式設計師
- 程式設計師跳槽的10個建議程式設計師
- Midway 後端程式碼的設計建議後端
- 老程式設計師的10條中肯建議程式設計師
- 提高程式設計能力的7條建議程式設計
- 關於 iOS 64位程式設計的建議iOS程式設計
- 給未來精英程式設計師的建議程式設計師
- 雷軍給程式設計師的五點建議程式設計師
- 寫給未來程式設計師的建議程式設計師
- 給新程式設計師的10條建議程式設計師
- 提高程式設計技能的11個建議程式設計
- 給新人程式設計師的 10 點建議程式設計師
- 給新手程式設計師的幾點建議程式設計師
- 學習Java程式設計的三個建議Java程式設計
- Go 創始人 Rob Pike 反對在 Go 1.18 標準庫中引入泛型支援:建議不要改動 Go 1.18 中的標準庫Go泛型
- 程式設計師從書本學習程式設計的 5 個建議程式設計師
- [分享]2021 年對 React 前端程式設計師的 10 個程式碼最佳實踐建議React前端程式設計師
- 祖克伯關於程式設計的建議:若不是從小玩遊戲,我絕不會學程式設計程式設計遊戲