這應(yīng)該是每個程序員每天看到最多的圖片了。
這就是程序出Bug了。
先把問題看懂
辦公室小明剛來的時候涛酗,遇到bug經(jīng)常來詢問我這個老員工,讓我去幫他解決偷厦,久而久之商叹,發(fā)現(xiàn)他出現(xiàn)的問題很多都是重復(fù)的,前兩天剛出現(xiàn)的問題只泼,今天又來找我去幫他解決剖笙。他再來找我的時候,我就問他出了什么問題请唱,他說“我也不太清楚弥咪,你過來看一下吧过蹂。”聚至,原來每次出Bug的時候榴啸,他都不去仔細(xì)分析問題提示,所以相同的問題再出現(xiàn)的時候也不知道晚岭。
程序出bug時編譯器給出的錯誤信息鸥印,但大部分編譯器的提示都是英文的(漢化的除外,比如vs)坦报,很多人就不愿意去仔細(xì)分析錯誤信息具體是什么库说,或者說粗略一看而理解錯了。然后就直接找人幫忙片择,或者直接把錯誤提示拷貝到搜索引擎里潜的,大部分的問題都可以用這種方式解決,而這種簡單解決問題的方式又使得很多人不愿意去費力理解問題本身字管,所以導(dǎo)致問題錯誤出現(xiàn)時啰挪,很多人甚至沒有發(fā)現(xiàn)這是重復(fù)的問題。
先分析問題嘲叔,這必須是解決問題的第一步亡呵。
先思考,后搜索
借用一張網(wǎng)上的神圖
如果僅僅是看懂了問題硫戈,還是不夠的锰什。就像寫代碼一樣,很多人把問題復(fù)制進(jìn)搜索引擎丁逝,然后將搜索到的結(jié)果粘貼在代碼里汁胆,問題可能就解決了。然而這種做法只是進(jìn)行了體力勞動霜幼,并沒有進(jìn)行腦力勞動嫩码。在查詢或者向別人請教之前,要先獨立思考這個問題罪既,當(dāng)確定在自己的能力之外后铸题,再尋求幫助,但同樣要對得到的結(jié)果進(jìn)行分析萝衩,以發(fā)現(xiàn)自己技能和思維上的不足回挽。
真正的經(jīng)驗是不斷思考出來的。
用谷歌猩谊,不要用百度
這一點很多人提過千劈,大部分也都知道,但最終也沒有多少人能做到牌捷。在編程世界里墙牌,百度和谷歌的距離涡驮,就像中國和美國的距離,中間隔著一個太平洋喜滨。Google查詢最大的優(yōu)勢是捉捅,會給你搜stackoverflow的結(jié)果,github的issue討論等虽风,這些百度直接屏蔽了棒口。
差距其實很簡單就能看出來,比如在百度中輸入一個C++或者Python辜膝,第一條都是某某學(xué)習(xí)網(wǎng)无牵,某某培訓(xùn)班,在谷歌中搜索厂抖,它會直接給你該語言的官網(wǎng)茎毁,當(dāng)搜索一個問題,百度經(jīng)常像是大海撈針忱辅,需要從查詢結(jié)果中去找自己的答案七蜘,而且前幾條總是重復(fù)的,基本上都是相互轉(zhuǎn)載的結(jié)果墙懂,在谷歌中只要搜索關(guān)鍵字別差太遠(yuǎn)橡卤,一般會搜到想要的,而且不光能解決問題垒在,還能告訴你為什么蒜魄。還有一點是扔亥,其實國內(nèi)很多優(yōu)秀的技術(shù)文章或者思路都是從英語翻譯過來的场躯,但往往翻譯的不夠準(zhǔn)確,或者不完整旅挤。舉個例子踢关,大學(xué)的時候在百度搜 jquery mobile,我印象中搜索結(jié)果最多不超過2頁粘茄,而 google 上資料已經(jīng)非常全了签舞。
當(dāng)然google查詢結(jié)果是需要花點時間去翻譯了,但同時柒瓣,使用google也意味著:能限制獲得知識的唯一障礙就是自己的求知欲儒搭。
問題總結(jié)
對于程序員來講,Bug是絕佳的學(xué)習(xí)機會芙贫。每當(dāng)修復(fù)一個棘手或有趣的 bug時搂鲫,都應(yīng)該花幾分鐘寫下一些這個 bug 的信息和相關(guān)的總結(jié)。不斷創(chuàng)造問題磺平,解決問題魂仍,然后總結(jié)問題拐辽,這就是學(xué)習(xí)編程的過程。