- 論壇徽章:
- 1
|
鑒于連日來(lái)各個(gè)版面都出現(xiàn)的一些問(wèn)題,
我本人就此說(shuō)一些我自己的一些觀點(diǎn)。
假如你還沒(méi)有讀過(guò)本文,請(qǐng)盡量抽出一些時(shí)間仔細(xì)地讀一讀它。
1,請(qǐng)?jiān)谀阌锌盏臅r(shí)候,多去讀一讀置頂?shù)木A目錄里邊的帖子,哪怕是你現(xiàn)在還沒(méi)有碰到什么麻煩,也請(qǐng)盡量去讀一讀它。精華通常是以前討論過(guò)的一些比較精彩的帖子,也許會(huì)對(duì)你的學(xué)習(xí)有所幫助。
2,平時(shí)有空了,多來(lái)幾次這個(gè)論壇,碰到別人討論某個(gè)自己比較熟悉的問(wèn)題的時(shí)候,請(qǐng)盡量參與發(fā)言。通常情況,你自己認(rèn)為是對(duì)的東西說(shuō)出來(lái)以后都會(huì)有人反駁,在辯論的過(guò)程中你會(huì)發(fā)現(xiàn)自己對(duì)相關(guān)知識(shí)的認(rèn)識(shí)會(huì)更進(jìn)一層。
3,假如你碰到什么麻煩了,請(qǐng)盡量回憶一下,精華中是否有相應(yīng)的內(nèi)容?如果沒(méi)有,再去發(fā)帖子。當(dāng)然了,如果第一步你做的比較好的話,你基本上都會(huì)很快做出判斷的。
4,置頂?shù)奶又杏幸恍⿻?shū)籍,都是大家公認(rèn)為比較出色的,如果你還有業(yè)余時(shí)間,請(qǐng)下載下來(lái)抽空閱讀一下,對(duì)提高你的水平大有裨益。
5,當(dāng)你通過(guò)論壇解決了自己的問(wèn)題之后,不妨把解決的方法寫(xiě)出來(lái),告訴大家。這樣會(huì)很方便后來(lái)的人。還有可能被版主加為原創(chuàng)精華哦!
為了盡量不耽擱大家的時(shí)間,我就僅僅提醒這些了。
如果你還有更多的時(shí)間,請(qǐng)務(wù)必閱讀一下《提問(wèn)的智慧》一文:
http://www.9238.net/stone/tiwendezhihui.htm
增補(bǔ):
1,大家發(fā)完帖子都順便看一看、看是不是發(fā)對(duì)了?
怎么有很多人發(fā)的帖子里邊亂七八糟一堆亂碼,然后就不管了?
不要一發(fā)完就跑到一邊兒玩去了,等過(guò)一陣子再刷新一下,看有沒(méi)有人回復(fù)。
2004.07.08 增補(bǔ):
今天看《一切從游戲開(kāi)始》,覺(jué)得其中這一段話不錯(cuò),特來(lái)共享給 BBS 上的朋友們。(注原文中的文字一個(gè)都沒(méi)有改,不知道為什么說(shuō)是五個(gè)方法而下面卻又列出6條。)
- 解決編程問(wèn)題的五個(gè)方法
- 1. 把問(wèn)題規(guī)范成一個(gè)普遍的形式,這樣更容易和別人交流以及找相關(guān)資料.
- 2. 自己嘗試找答案.
- 3. 在網(wǎng)上搜尋更好的答案.
- 4. 想一個(gè)方法來(lái)打敗這個(gè)更好的答案.
- 5. 翻查教科書(shū)或是文獻(xiàn),從基本開(kāi)始思考有沒(méi)有最好的解.這些書(shū)能被選成教本一定有它的原因.
- 6. 研究問(wèn)題的特殊情況, 也許會(huì)有別出心裁的巧妙方法.
復(fù)制代碼
2004.12.13 增補(bǔ):
《你的燈還亮著嗎?》一書(shū)中寫(xiě)道:
當(dāng)你為了尋找解決問(wèn)題的方法而累得筋疲力盡時(shí),不妨向后看看,看看你是不是已經(jīng)迷路了?你的問(wèn)題究竟是什么?
2005.01.29 增補(bǔ):
節(jié)選自 http://wiki.perlchina.org/main/show/brian%27s+Guide+to+Solving+Any+Perl+Problem
當(dāng)你的程序碰到了問(wèn)題時(shí),請(qǐng)?jiān)囍凑障旅娴乃悸诽幚硪幌拢?br />
這是個(gè)人問(wèn)題
別老想著是你的代碼。你可能覺(jué)得自己是個(gè)藝術(shù)家,但實(shí)際上就算是經(jīng)驗(yàn)豐富的大師也會(huì)寫(xiě)出很多垃圾。每個(gè)人的代碼都是垃圾,我的也是你的也是。要學(xué)著去喜歡它。當(dāng)你碰到問(wèn)題的時(shí)候,你應(yīng)該想:“噢,我寫(xiě)的垃圾代碼出了點(diǎn)問(wèn)題。”這說(shuō)明你不再去責(zé)怪Perl。不應(yīng)該變成個(gè)人性的問(wèn)題。
個(gè)人責(zé)任感
如果你的代碼出了問(wèn)題,那僅僅是——你——的問(wèn)題。你應(yīng)該盡最大的力量自己解決。記住,每個(gè)人都有自己的代碼,每個(gè)人都有自己的問(wèn)題。自己的作業(yè)自己做,在麻煩別人之前先盡自己最大的努力。如果你老老實(shí)實(shí)地按照這個(gè)指南做了所有能做的事之后,依然不能解決問(wèn)題,那么你已經(jīng)盡力了,應(yīng)該找別人來(lái)看看。
改變你做事的方法
改正之后不要再犯同樣的錯(cuò)誤。很可能是你寫(xiě)代碼的方法錯(cuò)了,而不是你寫(xiě)的代碼錯(cuò)了。改變你以前做事的方法,讓生活更容易些。不要指望Perl來(lái)習(xí)慣你,因?yàn)檫@是不可能的。你要習(xí)慣Perl。它只是種語(yǔ)言,而不是種生活方式。
解決第一個(gè)問(wèn)題先!
你從Perl中得到警告或者錯(cuò)誤信息之后,先解決第一個(gè),然后看Perl是否依舊報(bào)出其他錯(cuò)誤。因?yàn)楹罄m(xù)的錯(cuò)誤很可能是由于第一個(gè)錯(cuò)誤衍生而來(lái)的。
檢查錯(cuò)誤信息行號(hào)之前的代碼!
Perl在錯(cuò)誤已經(jīng)發(fā)生的時(shí)候才報(bào)錯(cuò),而不是在此之前。因此當(dāng)Perl報(bào)出行號(hào)時(shí)錯(cuò)誤已經(jīng)發(fā)生了,而出錯(cuò)的地方是在這之前。看看錯(cuò)誤行號(hào)之前的代碼和表達(dá)式是否有問(wèn)題。
那個(gè)變量值是你想的那樣嗎?
不要亂猜!在表達(dá)式中使用某個(gè)值的時(shí)候先檢查它是否正確。世界上最好的調(diào)試器就是print。
print STDERR "The value is [$value]\n";
我用括號(hào)括住$value的原因是因?yàn)檫@樣我可以看見(jiàn)開(kāi)頭和尾巴上是否有空格或者換行。
如果打印出來(lái)的結(jié)果不是你所期望的,那么移到前面幾句,再來(lái)!找到這個(gè)值最后正確的位置。
你用的函數(shù)是正確的嗎?
我寫(xiě)perl程序的時(shí)間已經(jīng)不短了,可我還是幾乎每天都要查perlfunc。有些東西我就是吃不準(zhǔn),而有時(shí)候我太缺乏睡眠了以至于沒(méi)了常識(shí),然后總搞不懂為什么sprintf()不打印到屏幕上。
你用小腳本測(cè)試過(guò)了嗎?
如果你在嘗試新的東西,或者覺(jué)得某一小段代碼很奇怪,你可以寫(xiě)一個(gè)最短的程序運(yùn)行一下這一個(gè)片斷。這個(gè)方法把所有其他的因素都排除在外。如果測(cè)試沒(méi)有問(wèn)題,那說(shuō)明問(wèn)題可能不在這段代碼里面。如果測(cè)試結(jié)果不對(duì),那你大概就找到了你的問(wèn)題所在。
你檢查環(huán)境了嗎?
有些東西是依賴環(huán)境變量的。你確定你的環(huán)境變量都是對(duì)的嗎?程序運(yùn)行的時(shí)候用到的環(huán)境變量是你現(xiàn)在看到的環(huán)境變量嗎?記住有些CGI程序或長(zhǎng)時(shí)間運(yùn)行的程序可能用到的環(huán)境變量和你在shell里看到的不一樣,尤其是在不同的機(jī)器上的時(shí)候。
Perl講環(huán)境變量存儲(chǔ)在%ENV里。如果你需要某個(gè)環(huán)境變量,就算是在測(cè)試的時(shí)候,也記住先提供一個(gè)默認(rèn)值,如果它原來(lái)不存在的話。
你試過(guò)Google了嗎?
你碰到一個(gè)問(wèn)題的時(shí)候,說(shuō)不定其他人也碰到過(guò)同樣的。用Google Groups(http://groups.google.com)搜索看看是不是有人在comp.lang.perl.misc上貼過(guò)什么。在新聞組里問(wèn)問(wèn)題的人和回答問(wèn)題的人的差別在于,他們使用Google Groups的能力高底不同。
你和小熊說(shuō)話了嗎?
把你的問(wèn)題大聲說(shuō)出來(lái)。把它變成語(yǔ)言。有幾年我很愉快地和一個(gè)很優(yōu)秀的程序員一起工作,他幾乎能解決任何問(wèn)題。當(dāng)我被什么問(wèn)題堵住的時(shí)候,我總?cè)フ?qǐng)教他,跟他解釋我的問(wèn)題。幾乎每次都是這樣的情況:我說(shuō)不到第三句,就停下來(lái),說(shuō):“噢我明白了,沒(méi)問(wèn)題了!彼看我捕际沁@樣。
你可能需要做太多次這樣的事情,所以我推薦拿一個(gè)長(zhǎng)毛絨玩具做為你的Perl臨床診斷家,這樣你就不會(huì)惹怒你的同事了。我的桌子旁邊就有一只小熊,我每次都把我的問(wèn)題解釋給他聽(tīng)。每次當(dāng)我自言自語(yǔ)的時(shí)候,我女朋友跟本都不會(huì)注意,她習(xí)慣了。
你認(rèn)真檢查自己了嗎?
如果到了這一步你還沒(méi)有解決的話,這說(shuō)不定是個(gè)心理問(wèn)題。可能你對(duì)某段代碼有特別的感情,所以不想改掉它。說(shuō)不定你覺(jué)得只有你是對(duì)的,別人都錯(cuò)了。當(dāng)你有這種感覺(jué)的時(shí)候,你沒(méi)有認(rèn)真考慮bug的最大來(lái)源——你自己。不要放過(guò)任何東西,保證它們?nèi)际菍?duì)的。
[ 本帖最后由 flw 于 2006-1-18 11:07 編輯 ] |
|