最有價值的編程忠告
Rob Pike,目前谷歌公司***的軟件工程師之一,曾是貝爾實(shí)驗(yàn)室Unix開發(fā)團(tuán)隊成員,Plan9操作系統(tǒng)開發(fā)的主要領(lǐng)導(dǎo)人,Inferno操作系統(tǒng)開發(fā)的主要領(lǐng)導(dǎo)人。他是締造Go語言和Limbo語言的核心人物。下面是他分享給大家他在貝爾實(shí)驗(yàn)室工作的一段經(jīng)歷,這段經(jīng)歷改變了他對bug調(diào)試的思想認(rèn)識。
Rob Pike
Job的主要工作經(jīng)歷:
我在貝爾實(shí)驗(yàn)室工作了很多年。我在計算機(jī)科學(xué)研究中心,你會很詫異,這是個很小的實(shí)驗(yàn)室,但這里卻創(chuàng)造了Unix,我來到這里工作的時候Unix已經(jīng)發(fā)布了第七版。從2002年起我來到谷歌工作,主要開發(fā)一些系統(tǒng)基礎(chǔ)架構(gòu)。
最主要的成就:
我最為人所知的應(yīng)該是我和Brian Kernighan(Unix開發(fā)組的重要成員)合著的兩本書:《The Unix Programming Environment》 和 《程序設(shè)計實(shí)踐(The Practice of Programming)》 (30年后的今天仍在印刷出版!),影響范圍最廣的一件事應(yīng)該是我和Ken Thompson共同開發(fā)完成了UTF-8編碼格式。在其它方面,諸如計算機(jī)圖形,操作系統(tǒng),軟件開發(fā)工具等上也做了大量的工作,最近在給谷歌開發(fā)Go編程語言。
使用最多的編程語言:
長久以來,C語言是我編程的選擇,但在我的編程生涯里,我使用過很多種語言。而目前我開發(fā)d 東西基本上都是用Go語言,這是我見過的***效的一種編程語言,它在我的工具箱里已經(jīng)完全取代了C語言的位置。
忠告:
在我加入貝爾實(shí)驗(yàn)室一年多后,我開始和Ken Thompson一起在開發(fā)一個針對由Gerard Holzmann設(shè)計的很小的圖形化交換語言的即時編譯器上做結(jié)對編程。我打字比較快,所以我坐在電腦前,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)前出現(xiàn)問題的代碼,但如果你先思考這個錯誤,這個bug是怎么引入的?你通常發(fā)現(xiàn)和糾正一個更高層次的問題,進(jìn)而改進(jìn)了系統(tǒng)設(shè)計,防止了更多bug的出現(xiàn)。
我認(rèn)識到這種編程思考模式非常的重要。有些人癡迷于一行行的、使用各種工具來調(diào)試所有的東西。但我現(xiàn)在相信,思考——不看代碼的思考——是***的調(diào)試途徑,因?yàn)樗茏屇汩_發(fā)出更好的軟件。
原文鏈接:http://www.html5cn.org/article-3277-1.html
【編輯推薦】