程式員要面對的變數非常多,這導致程式員會遇見各種各樣的問題,為了節約時間提高效率,詢問在這一方面有經驗的程式員是個好主意,但如果想得到想要的 solution,你需要學習如何提問,
關于這個問題已經有了非常好的答案,原文鏈接
這里轉載,方便按目錄翻閱和記憶,
提問之前
在你準備要通過電子郵件、新聞群組或者聊天室提出技術問題前,請先做到以下事情:
- 嘗試在你準備提問的論壇的舊文章中搜索答案,
- 嘗試上網搜索以找到答案,
- 嘗試閱讀手冊以找到答案,
- 嘗試閱讀常見問題檔案(FAQ)以找到答案,
- 嘗試自己檢查或試驗以找到答案,
- 向你身邊的強者朋友打聽以找到答案,
- 如果你是程式開發者,請嘗試閱讀源代碼以找到答案,
提問時
選擇合適的論壇
小心選擇你要提問的場合,如果你做了下述的事情,你很可能被忽略掉或者被看作失敗者:
- 在與主題不合的論壇上貼出你的問題,
- 在探討進階技術問題的論壇張貼非常初級的問題;反之亦然,
- 在太多的不同新聞群組上重復轉貼同樣的問題(cross-post),
- 向既非熟人也沒有義務解決你問題的人發送私人電郵,
Stack Overflow
搜索,然后 在 Stack Exchange 問,
近年來,Stack Exchange community 社區已經成為回答技術及其他問題的主要渠道,尤其是那些開放原始碼的專案,
因為 Google 索引是即時的,在看 Stack Exchange 之前先在 Google 搜索,有很高的機率某人已經問了一個類似的問題,而且 Stack Exchange 網站們往往會是搜索結果中最前面幾個,如果你在 Google 上沒有找到任何答案,你再到特定相關主題的網站去找,用標簽(Tag)搜索能讓你更縮小你的搜索結果,
Stack Exchange 已經成長到超過一百個網站,以下是最常用的幾個站:
- Super User 是問一些通用的電腦問題,如果你的問題跟代碼或是寫程式無關,只是一些網路連線之類的,請到這里,
- Stack Overflow 是問寫程式有關的問題,
- Server Fault 是問服務器和網管相關的問題
網站和 IRC 論壇
本地的使用者群組(user group),或者你所用的 Linux 發行版本也許正在宣傳他們的網頁論壇或 IRC 頻道,并提供新手幫助(在一些非英語國家,新手論壇很可能還是郵件串列), 這些地方是開始提問的好首選,特別是當你覺得遇到的也許只是相對簡單或者很普通的問題時,有廣告贊助的 IRC 頻道是公開歡迎提問的地方,通常可以即時得到回應,
使用專案郵件串列
當某個專案提供開發者郵件串列時,要向串列而不是其中的個別成員提問,即使你確信他能最好地回答你的問題,查一查專案的檔案和首頁,找到專案的郵件串列并使用它,有幾個很好的理由支持我們采用這種辦法:
- 任何好到需要向個別開發者提出的問題,也將對整個專案群組有益,反之,如果你認為自己的問題對整個專案群組來說太愚蠢,也不能成為騷擾個別開發者的理由,
- 向串列提問可以分散開發者的負擔,個別開發者(尤其是專案領匯入)也許太忙以至于沒法回答你的問題,
- 大多數郵件串列都會被存檔,那些被存檔的內容將被搜索引擎索引,如果你向串列提問并得到解答,將來其它人可以通過網頁搜索找到你的問題和答案,也就不用再次發問了,
- 如果某些問題經常被問到,開發者可以利用此資訊來改進說明檔案或軟體本身,以使其更清楚,如果只是私下提問,就沒有人能看到最常見問題的完整場景,
使用有意義且描述明確的標題
在郵件串列、新聞群組或論壇中,大約 50 字以內的標題是抓住資深專家注意力的好機會,別用喋喋不休的幫幫忙、跪求、急(更別說救命啊!!!!這樣讓人反感的話,用這種標題會被條件反射式地忽略)來浪費這個機會,不要妄想用你的痛苦程度來打動我們,而應該是在這點空間中使用極簡單扼要的描述方式來提出問題,
一個好標題范例是目標 —— 差異式的描述,許多技術支持組織就是這樣做的,在目標部分指出是哪一個或哪一組東西有問題,在差異部分則描述與期望的行為不一致的地方,
蠢問題:救命啊!我的筆記本電腦不能正常顯示了!
聰明問題:X.org 6.8.1 的滑鼠游標會變形,某牌顯卡 MV1005 芯片組,
更聰明問題:X.org 6.8.1 的滑鼠游標,在某牌顯卡 MV1005 芯片組環境下 - 會變形,
撰寫目標 —— 差異 式描述的程序有助于你組織對問題的細致思考,是什么被影響了? 僅僅是滑鼠游標或者還有其它圖形?只在 X.org 的 X 版中出現?或只是出現在 6.8.1 版中? 是針對某牌顯卡芯片組?或者只是其中的 MV1005 型號? 一個黑客只需瞄一眼就能夠立即明白你的環境和你遇到的問題,
總而言之,請想像一下你正在一個只顯示標題的存檔討論串(Thread)索引中查尋,讓你的標題更好地反映問題,可使下一個搜索類似問題的人能夠關注這個討論串,而不用再次提問相同的問題,
如果你想在回復中提出問題,記得要修改內容標題,以表明你是在問一個問題, 一個看起來像 Re: 測驗 或者 Re: 新 bug 的標題很難引起足夠重視,另外,在不影響連貫性之下,適當參考并刪減前文的內容,能給新來的讀者留下線索,
對于討論串,不要直接點擊回復來開始一個全新的討論串,這將限制你的觀眾,因為有些郵件閱讀程式,比如 mutt ,允許使用者按討論串排序并通過折疊討論串來隱藏訊息,這樣做的人永遠看不到你發的訊息,
僅僅改變標題還不夠,mutt 和其它一些郵件閱讀程式還會檢查郵件標題以外的其它資訊,以便為其指定討論串,所以寧可發一個全新的郵件,
在網頁論壇上,好的提問方式稍有不同,因為討論串與特定的資訊緊密結合,并且通常在討論串外就看不到里面的內容,故通過回復提問,而非改變標題是可接受的,不是所有論壇都允許在回復中出現分離的標題,而且這樣做了基本上沒有人會去看,不過,通過回復提問,這本身就是曖昧的做法,因為它們只會被正在查看該標題的人讀到,所以,除非你只想在該討論串當前活躍的人群中提問,不然還是另起爐灶比較好,
使問題容易回復
以請將你的回復發送到……來結束你的問題多半會使你得不到回答,如果你覺得花幾秒鐘在郵件客戶端設定一下回復地址都麻煩,我們也覺得花幾秒鐘思考你的問題更麻煩,如果你的郵件程式不支持這樣做,換個好點的;如果是作業系統不支持這種郵件程式,也換個好點的,
在論壇,要求通過電子郵件回復是非常無禮的,除非你認為回復的資訊可能比較敏感(有人會為了某些未知的原因,只讓你而不是整個論壇知道答案),如果你只是想在有人回復討論串時得到電子郵件提醒,可以要求網頁論壇發送給你,幾乎所有論壇都支持諸如追蹤此討論串、有回復時發送郵件提醒等功能,
用清晰、正確、精準并語法正確的陳述句
我們從經驗中發現,粗心的提問者通常也會粗心的寫程式與思考(我敢打包票),回答粗心大意者的問題很不值得,我們寧愿把時間耗在別處,
正確的拼寫、標點符號和大小寫是很重要的,一般來說,如果你覺得這樣做很麻煩,不想在乎這些,那我們也覺得麻煩,不想在乎你的提問,花點額外的精力斟酌一下字句,用不著太僵硬與正式 —— 事實上,黑客文化很看重能準確地使用非正式、俚語和幽默的陳述句,但它必須很準確,而且有跡象表明你是在思考和關注問題,
正確地拼寫、使用標點和大小寫,不要將its混淆為it's,loose搞成lose或者將discrete弄成discreet,不要全部用大寫,這會被視為無禮的大聲嚷嚷(全部小寫也好不到哪去,因為不易閱讀,Alan Cox 也許可以這樣做,但你不行),
更白話的說,如果你寫得像是個半文盲,那多半得不到理睬,也不要使用即時通信中的簡寫或火星文,如將的簡化為d會使你看起來像一個為了少打幾個鍵而省字的小白,更糟的是,如果像個小孩似地鬼畫符那絕對是在找死,可以肯定沒人會理你(或者最多是給你一大堆指責與挖苦),
如果在使用非母語的論壇提問,你可以犯點拼寫和語法上的小錯,但決不能在思考上馬虎(沒錯,我們通常能弄清兩者的分別),同時,除非你知道回復者使用的語言,否則請使用英語書寫,繁忙的黑客一般會直接洗掉用他們看不懂語言寫的訊息,在網路上英語是通用語言,用英語書寫可以將你的問題在尚未被閱讀就被直接洗掉的可能性降到最低,
如果英文是你的外語(Second language),提示潛在回復者你有潛在的語言困難是很好的:
[譯注:以下附上原文以供使用]
English is not my native language; please excuse typing errors.
- 英文不是我的母語,請原諒我的錯字或語法,
If you speak $LANGUAGE, please email/PM me;
I may need assistance translating my question.
- 如果你說某語言,請寄信/私訊給我;我需要有人協助我翻譯我的問題,
I am familiar with the technical terms,
but some slang expressions and idioms are difficult for me.
- 我對技術名詞很熟悉,但對于俗語或是特別用法比較不甚了解,
I've posted my question in $LANGUAGE and English.
I'll be glad to translate responses, if you only use one or the other.
- 我把我的問題用某語言和英文寫出來,如果你只用一種語言回答,我會樂意將其翻譯成另一種,
使用易于讀取且標準的檔案格式發送問題
如果你人為地將問題搞得難以閱讀,它多半會被忽略,人們更愿讀易懂的問題,所以:
- 使用純文字而不是 HTML (關閉 HTML 并不難),
- 使用 MIME 附件通常是可以的,前提是真正有內容(譬如附帶的源代碼或 patch),而不僅僅是郵件程式生成的模板(譬如只是信件內容的拷貝),
- 不要發送一段文字只是一行句子但自動換行后會變成多行的郵件(這使得回復部分內容非常困難),設想你的讀者是在 80 個字符寬的終端機上閱讀郵件,最好設定你的換行分割點小于 80 字,
- 但是,對一些特殊的檔案不要設定固定寬度(譬如日志檔案拷貝或會話記錄),資料應該原樣包含,讓回復者有信心他們看到的是和你看到的一樣的東西,
- 在英語論壇中,不要使用
Quoted-PrintableMIME 編碼發送訊息,這種編碼對于張貼非 ASCII 語言可能是必須的,但很多郵件程式并不支持這種編碼,當它們處理換行時,那些文本中四處散布的=20符號既難看也分散注意力,甚至有可能破壞內容的語意, - 絕對,永遠不要指望黑客們閱讀使用封閉格式撰寫的檔案,像微軟公司的 Word 或 Excel 檔案等,大多數黑客對此的反應就像有人將還在冒熱氣的豬糞倒在你家門口時你的反應一樣,即便他們能夠處理,他們也很厭惡這么做,
- 如果你從使用 Windows 的電腦發送電子郵件,關閉微軟愚蠢的
智能引號功能 (從[選項] > [校訂] > [自動校正選項],勾選掉智能引號單選框),以免在你的郵件中到處散布垃圾字符, - 在論壇,勿濫用
表情符號和HTML功能(當它們提供時),一兩個表情符號通常沒有問題,但花哨的彩色文本傾向于使人認為你是個無能之輩,過濫地使用表情符號、色彩和字體會使你看來像個傻笑的小姑娘,這通常不是個好主意,除非你只是對性而不是對答案感興趣,
如果你使用圖形用戶界面的郵件程式(如微軟公司的 Outlook 或者其它類似的),注意它們的默認設定不一定滿足這些要求,大多數這類程式有基于選單的查看源代碼命令,用它來檢查發送檔案夾中的郵件,以確保發送的是純文本檔案同時沒有一些奇怪的字符,
精確地描述問題并言之有物
- 仔細、清楚地描述你的問題或 Bug 的癥狀,
- 描述問題發生的環境(機器配置、作業系統、應用程式、以及相關的資訊),提供經銷商的發行版和版本號(如:
Fedora Core 4、Slackware 9.1等), - 描述在提問前你是怎樣去研究和理解這個問題的,
- 描述在提問前為確定問題而采取的診斷步驟,
- 描述最近做過什么可能相關的硬體或軟體變更,
- 盡可能的提供一個可以
重現這個問題的可控環境的方法,
盡量去揣測一個黑客會怎樣反問你,在你提問之前預先將黑客們可能遇到的問題回答一遍,
以上幾點中,當你報告的是你認為可能在代碼中的問題時,給黑客一個可以重現你的問題的環境尤其重要,當你這么做時,你得到有效的回答的機會和速度都會大大的提升,
Simon Tatham 寫過一篇名為《如何有效的報告 Bug》的出色文章,強力推薦你也讀一讀,
話不在多而在精
你需要提供精確有內容的資訊,這并不是要求你簡單的把成堆的出錯代碼或者資料完全轉錄到你的提問中,如果你有龐大而復雜的測驗樣例能重現程式掛掉的情境,盡量將它剪裁得越小越好,
這樣做的用處至少有三點,
第一,表現出你為簡化問題付出了努力,這可以使你得到回答的機會增加;
第二,簡化問題使你更有可能得到有用的答案;
第三,在精煉你的 bug 報告的程序中,你很可能就自己找到了解決方法或權宜之計,
別動輒聲稱找到 Bug
當你在使用軟體中遇到問題,除非你非常、非常的有根據,不要動輒聲稱找到了 Bug,提示:除非你能提供解決問題的源代碼補丁,或者提供回歸測驗來表明前一版本中行為不正確,否則你都多半不夠完全確信,這同樣適用在網頁和檔案,如果你(聲稱)發現了檔案的Bug,你應該能提供相應位置的修正或替代檔案,
請記得,還有許多其它使用者沒遇到你發現的問題,否則你在閱讀檔案或搜索網頁時就應該發現了(你在抱怨前已經做了這些,是吧?),這也意味著很有可能是你弄錯了而不是軟體本身有問題,
撰寫軟體的人總是非常辛苦地使它盡可能完美,如果你聲稱找到了 Bug,也就是在質疑他們的能力,即使你是對的,也有可能會冒犯到其中某部分人,當你在標題中嚷嚷著有Bug時,這尤其嚴重,
提問時,即使你私下非常確信已經發現一個真正的 Bug,最好寫得像是你做錯了什么,如果真的有 Bug,你會在回復中看到這點,這樣做的話,如果真有 Bug,維護者就會向你道歉,這總比你惹惱別人然后欠別人一個道歉要好一點,
低聲下氣不能代替你的功課
有些人明白他們不該粗魯或傲慢的提問并要求得到答復,但他們選擇另一個極端 —— 低聲下氣:我知道我只是個可悲的新手,一個擼瑟,但...,這既使人困擾,也沒有用,尤其是伴隨著與實際問題含糊不清的描述時更令人反感,
別用原始靈長類動物的把戲來浪費你我的時間,取而代之的是,盡可能清楚地描述背景條件和你的問題情況,這比低聲下氣更好地定位了你的位置,
有時網頁論壇會設有專為新手提問的版面,如果你真的認為遇到了初學者的問題,到那去就是了,但一樣別那么低聲下氣,
描述問題癥狀而非你的猜測
告訴黑客們你認為問題是怎樣造成的并沒什么幫助,(如果你的推斷如此有效,還用向別人求助嗎?),因此要確信你原原本本告訴了他們問題的癥狀,而不是你的解釋和理論;讓黑客們來推測和診斷,如果你認為陳述自己的猜測很重要,清楚地說明這只是你的猜測,并描述為什么它們不起作用,
蠢問題
我在編譯內核時接連遇到 SIG11 錯誤,
我懷疑某條飛線搭在主板的走線上了,這種情況應該怎樣檢查最好?
聰明問題
我的組裝電腦是 FIC-PA2007 主機板搭載 AMD K6/233 CPU(威盛 Apollo VP2 芯片組),
256MB Corsair PC133 SDRAM 記憶體,在編譯內核時,從開機 20 分鐘以后就頻頻產生 SIG11 錯誤,
但是在頭 20 分鐘內從沒發生過相同的問題,重新啟動也沒有用,但是關機一晚上就又能作業 20 分鐘,
所有記憶體都換過了,沒有效果,相關部分的標準編譯記錄如下…,
由于以上這點似乎讓許多人覺得難以配合,這里有句話可以提醒你:所有的診斷專家都來自密蘇里州, 美國國務院的官方座右銘則是:讓我看看(出自國會議員 Willard D. Vandiver 在 1899 年時的講話:我來自一個出產玉米,棉花,牛蒡和民主黨人的國家,滔滔雄辯既不能說服我,也不會讓我滿意,我來自密蘇里州,你必須讓我看看,) 針對診斷者而言,這并不是一種懷疑,而只是一種真實而有用的需求,以便讓他們看到的是與你看到的原始證據盡可能一致的東西,而不是你的猜測與歸納的結論,所以,大方的展示給我們看吧!
按發生時間先后列出問題癥狀
問題發生前的一系列操作,往往就是對找出問題最有幫助的線索,因此,你的說明里應該包含你的操作步驟,以及機器和軟體的反應,直到問題發生,在命令列處理的情況下,提供一段操作記錄(例如運行腳本工具所生成的),并參考相關的若干行(如 20 行)記錄會非常有幫助,
如果掛掉的程式有診斷選項(如 -v 的詳述開關),試著選擇這些能在記錄中增加除錯資訊的選項,記住,多不等于好,試著選取適當的除錯級別以便提供有用的資訊而不是讓讀者淹沒在垃圾中,
如果你的說明很長(如超過四個段落),在開頭簡述問題,接下來再按時間順序詳述會有所幫助,這樣黑客們在讀你的記錄時就知道該注意哪些內容了,
描述目標而不是程序
如果你想弄清楚如何做某事(而不是報告一個 Bug),在開頭就描述你的目標,然后才陳述重現你所卡住的特定步驟,
經常尋求技術幫助的人在心中有個更高層次的目標,而他們在自以為能達到目標的特定道路上被卡住了,然后跑來問該怎么走,但沒有意識到這條路本身就有問題,結果要費很大的勁才能搞定,
蠢問題
我怎樣才能從某繪圖程式的顏色選擇器中取得十六進制的的 RGB 值?
聰明問題
我正試著用替換一幅圖片的色碼(color table)成自己選定的色碼,我現在知道的唯一方法是編輯每個色碼區塊(table slot),
但卻無法從某繪圖程式的顏色選擇器取得十六進制的的 RGB 值,
第二種提問法比較聰明,你可能得到像是建議采用另一個更合適的工具的回復,
別要求使用私人電郵回復
黑客們認為問題的解決程序應該公開、透明,此程序中如果更有經驗的人注意到不完整或者不當之處,最初的回復才能夠、也應該被糾正,同時,作為提供幫助者可以得到一些獎勵,獎勵就是他的能力和學識被其他同行看到,
當你要求私下回復時,這個程序和獎勵都被中止,別這樣做,讓回復者來決定是否私下回答 —— 如果他真這么做了,通常是因為他認為問題撰寫太差或者太膚淺,以至于對其它人沒有興趣,
這條規則存在一條有限的例外,如果你確信提問可能會引來大量雷同的回復時,那么這個神奇的提問句會是向我發電郵,我將為論壇歸納這些回復,試著將郵件串列或新聞群組從洪水般的雷同回復中解救出來是非常有禮貌的 —— 但你必須信守諾言,
清楚明確的表達你的問題以及需求
漫無邊際的提問是近乎無休無止的時間黑洞,最有可能給你有用答案的人通常也正是最忙的人(他們忙是因為要親自完成大部分作業),這樣的人對無節制的時間黑洞相當厭惡,所以他們也傾向于厭惡那些漫無邊際的提問,
如果你明確表述需要回答者做什么(如提供指點、發送一段代碼、檢查你的補丁、或是其他等等),就最有可能得到有用的答案,因為這會定出一個時間和精力的上限,便于回答者能集中精力來幫你,這么做很棒,
要理解專家們所處的世界,請把專業技能想像為充裕的資源,而回復的時間則是稀缺的資源,你要求他們奉獻的時間越少,你越有可能從真正專業而且很忙的專家那里得到解答,
所以,界定一下你的問題,使專家花在辨識你的問題和回答所需要付出的時間減到最少,這技巧對你有用答案相當有幫助 —— 但這技巧通常和簡化問題有所區別,因此,問我想更好的理解 X,可否指點一下哪有好一點說明?通常比問你能解釋一下 X 嗎?更好,如果你的代碼不能運作,通常請別人看看哪里有問題,比要求別人替你改正要明智得多,
詢問有關代碼的問題時
別要求他人幫你除錯有問題的代碼,不提示一下應該從何入手,張貼幾百行的代碼,然后說一聲:它不能作業會讓你完全被忽略,只貼幾十行代碼,然后說一句:在第七行以后,我期待它顯示 <x>,但實際出現的是 <y>比較有可能讓你得到回應,
最有效描述程式問題的方法是提供最精簡的 Bug 展示測驗用例(bug-demonstrating test case),什么是最精簡的測驗用例?那是問題的縮影;一小個程式片段能剛好展示出程式的例外行為,而不包含其他令人分散注意力的內容,怎么制作最精簡的測驗用例?如果你知道哪一行或哪一段代碼會造成例外的行為,復制下來并加入足夠重現這個狀況的代碼(例如,足以讓這段代碼能被編譯/直譯/被應用程式處理),如果你無法將問題縮減到一個特定區塊,就復制一份代碼并移除不影響產生問題行為的部分,總之,測驗用例越小越好(查看話不在多而在精一節),
一般而言,要得到一段相當精簡的測驗用例并不太容易,但永遠先嘗試這樣做的是種好習慣,這種方式可以幫助你了解如何自行解決這個問題 —— 而且即使你的嘗試不成功,黑客們也會看到你在嘗試取得答案的程序中付出了努力,這可以讓他們更愿意與你合作,
如果你只是想讓別人幫忙審查(Review)一下代碼,在信的開頭就要說出來,并且一定要提到你認為哪一部分特別需要關注以及為什么,
別把自己家庭作業的問題貼上來
黑客們很擅長分辨哪些問題是家庭作業式的問題;因為我們中的大多數都曾自己解決這類問題,同樣,這些問題得由你來搞定,你會從中學到東西,你可以要求給點提示,但別要求得到完整的解決方案,
如果你懷疑自己碰到了一個家庭作業式的問題,但仍然無法解決,試試在使用者群組,論壇或(最后一招)在專案的使用者郵件串列或論壇中提問,盡管黑客們會看出來,但一些有經驗的使用者也許仍會給你一些提示,
去掉無意義的提問句
避免用無意義的話結束提問,例如有人能幫我嗎?或者這有答案嗎?,
首先:如果你對問題的描述不是很好,這樣問更是畫蛇添足,
其次:由于這樣問是畫蛇添足,黑客們會很厭煩你 —— 而且通常會用邏輯上正確,但毫無意義的回答來表示他們的蔑視, 例如:沒錯,有人能幫你或者不,沒答案,
一般來說,避免用 是或否、對或錯、有或沒有型別的問句,除非你想得到是或否型別的回答,
即使你很急也不要在標題寫緊急
這是你的問題,不是我們的,宣稱緊急極有可能事與愿違:大多數黑客會直接洗掉無禮和自私地企圖即時引起關注的問題,更嚴重的是,緊急這個字(或是其他企圖引起關注的標題)通常會被垃圾信過濾器過濾掉 —— 你希望能看到你問題的人可能永遠也看不到,
有半個例外的情況是,如果你是在一些很高調,會使黑客們興奮的地方,也許值得這樣去做,在這種情況下,如果你有時間壓力,也很有禮貌地提到這點,人們也許會有興趣回答快一點,
當然,這風險很大,因為黑客們興奮的點多半與你的不同,譬如從 NASA 國際空間站(International Space Station)發這樣的標題沒有問題,但用自我感覺良好的慈善行為或政治原因發肯定不行,事實上,張貼諸如緊急:幫我救救這個毛絨絨的小海豹!肯定讓你被黑客忽略或惹惱他們,即使他們認為毛絨絨的小海豹很重要,
如果你覺得這點很不可思議,最好再把這份指南剩下的內容多讀幾遍,直到你弄懂了再發文,
禮多人不怪,而且有時還很有幫助
彬彬有禮,多用請和謝謝您的關注,或謝謝你的關照,讓大家都知道你對他們花時間免費提供幫助心存感激,
坦白說,這一點并沒有比清晰、正確、精準并合法語法和避免使用專用格式重要(也不能取而代之),黑客們一般寧可讀有點唐突但技術上鮮明的 Bug 報告,而不是那種有禮但含糊的報告,(如果這點讓你不解,記住我們是按問題能教給我們什么來評價問題的價值的)
然而,如果你有一串的問題待解決,客氣一點肯定會增加你得到有用回應的機會,
(我們注意到,自從本指南發布后,從資深黑客那里得到的唯一嚴重缺陷反饋,就是對預先道謝這一條,一些黑客覺得先謝了意味著事后就不用再感謝任何人的暗示,我們的建議是要么先說先謝了,然后事后再對回復者表示感謝,或者換種方式表達感激,譬如用謝謝你的關注或謝謝你的關照,)
問題解決后,加個簡短的補充說明
問題解決后,向所有幫助過你的人發個說明,讓他們知道問題是怎樣解決的,并再一次向他們表示感謝,如果問題在新聞組或者郵件串列中引起了廣泛關注,應該在那里貼一個說明比較恰當,
最理想的方式是向最初提問的話題回復此訊息,并在標題中包含已修正,已解決或其它同等含義的明顯標記,在人來人往的郵件串列里,一個看見討論串問題 X和問題 X - 已解決的潛在回復者就明白不用再浪費時間了(除非他個人覺得問題 X的有趣),因此可以利用此時間去解決其它問題,
補充說明不必很長或是很深入;簡單的一句你好,原來是網線出了問題!謝謝大家 – Bill比什么也不說要來的好,事實上,除非結論真的很有技術含量,否則簡短可愛的小結比長篇大論更好,說明問題是怎樣解決的,但大可不必將解決問題的程序復述一遍,
對于有深度的問題,張貼除錯記錄的摘要是有幫助的,描述問題的最終狀態,說明是什么解決了問題,在此之后才指明可以避免的盲點,避免盲點的部分應放在正確的解決方案和其它總結材料之后,而不要將此資訊搞成偵探推理小說,列出那些幫助過你的名字,會讓你交到更多朋友,
除了有禮貌和有內涵以外,這種型別的補充也有助于他人在郵件串列/新聞群組/論壇中搜索到真正解決你問題的方案,讓他們也從中受益,
至少,這種補充有助于讓每位參與協助的人因問題的解決而從中得到滿足感,如果你自己不是技術專家或者黑客,那就相信我們,這種感覺對于那些你向他們求助的大師或者專家而言,是非常重要的,問題懸而未決會讓人灰心;黑客們渴望看到問題被解決,好人有好報,滿足他們的渴望,你會在下次提問時嘗到甜頭,
思考一下怎樣才能避免他人將來也遇到類似的問題,自問寫一份檔案或加個常見問題(FAQ)會不會有幫助,如果是的話就將它們發給維護者,
在黑客中,這種良好的后繼行動實際上比傳統的禮節更為重要,也是你如何透過善待他人而贏得聲譽的方式,這是非常有價值的資產,
不該問的問題
以下是幾個經典蠢問題,以及黑客沒回答時心中所想的:
問題:我能在哪找到 X 程式或 X 資源?
問題:我怎樣用 X 做 Y?
問題:如何設定我的 shell 提示?
問題:我可以用 Bass-o-matic 檔案轉換工具將 AcmeCorp 檔案轉換為 TeX 格式嗎?
問題:我的程式/設定/SQL 陳述句沒有用
問題:我的 Windows 電腦有問題,你能幫我嗎?
問題:我的程式不會動了,我認為系統工具 X 有問題
問題:我在安裝 Linux(或者 X )時有問題,你能幫我嗎?
問題:我怎么才能破解 root 帳號/竊取 OP 特權/讀別人的郵件呢?
問題:我能在哪找到 X 程式或 X 資源?
回答:就在我找到它的地方啊,白癡 —— 搜索引擎的那一頭,天哪!難道還有人不會用 Google 嗎?
問題:我怎樣用 X 做 Y?
回答:如果你想解決的是 Y ,提問時別給出可能并不恰當的方法,這種問題說明提問者不但對 X 完全無知,也對 Y 要解決的問題糊涂,還被特定形勢禁錮了思維,最好忽略這種人,等他們把問題搞清楚了再說,
問題:如何設定我的 shell 提示??
回答:如果你有足夠的智慧提這個問題,你也該有足夠的智慧去 RTFM,然后自己去找出來,
問題:我可以用 Bass-o-matic 檔案轉換工具將 AcmeCorp 檔案轉換為 TeX 格式嗎?
回答:試試看就知道了,如果你試過,你既知道了答案,就不用浪費我的時間了,
問題:我的{程式/設定/SQL 陳述句}不作業
回答:這不算是問題吧,我對要我問你二十個問題才找得出你真正問題的問題沒興趣 —— 我有更有意思的事要做呢,在看到這類問題的時候,我的反應通常不外如下三種
- 你還有什么要補充的嗎?
- 真糟糕,希望你能搞定,
- 這關我有什么屁事?
問題:我的 Windows 電腦有問題,你能幫我嗎?
回答:能啊,扔掉微軟的垃圾,換個像 Linux 或 BSD 的開源作業系統吧,
注意:如果程式有官方版 Windows 或者與 Windows 有互動(如 Samba),你可以問與 Windows 相關的問題, 只是別對問題是由 Windows 作業系統而不是程式本身造成的回復感到驚訝, 因為 Windows 一般來說實在太爛,這種說法通常都是對的,
問題:我的程式不會動了,我認為系統工具 X 有問題
回答:你完全有可能是第一個注意到被成千上萬用戶反復使用的系統呼叫與函式庫檔案有明顯缺陷的人,更有可能的是你完全沒有根據,不同凡響的說法需要不同凡響的證據,當你這樣聲稱時,你必須有清楚而詳盡的缺陷說明檔案作后盾,
問題:我在安裝 Linux(或者 X )時有問題,你能幫我嗎?
回答:不能,我只有親自在你的電腦上動手才能找到毛病,還是去找你當地的 Linux 使用群組者尋求實際的指導吧(你能在這兒找到使用者群組的清單),
注意:如果安裝問題與某 Linux 的發行版有關,在它的郵件串列、論壇或本地使用者群組中提問也許是恰當的,此時,應描述問題的準確細節,在此之前,先用 Linux 和所有被懷疑的硬體作關鍵詞仔細搜索,
問題:我怎么才能破解 root 帳號/竊取 OP 特權/讀別人的郵件呢?
回答:想要這樣做,說明了你是個卑鄙小人;想找個黑客幫你,說明你是個白癡!
好問題與蠢問題
最后,我將透過舉一些例子,來說明怎樣聰明的提問;同一個問題的兩種問法被放在一起,一種是愚蠢的,另一種才是明智的,
蠢問題:
我可以在哪兒找到關于 Foonly Flurbamatic 的資料?
這種問法無非想得到 STFW 這樣的回答,
聰明問題:
我用 Google 搜索過 "Foonly Flurbamatic 2600",但是沒找到有用的結果,誰知道上哪兒去找對這種設備編程的資料?
這個問題已經 STFW 過了,看起來他真的遇到了麻煩,
蠢問題:
我從 foo 專案找來的原始碼沒法編譯,它怎么這么爛?
他覺得都是別人的錯,這個傲慢自大的提問者,
聰明問題:
foo 專案代碼在 Nulix 6.2 版下無法編譯通過,我讀過了 FAQ,但里面沒有提到跟 Nulix 有關的問題,這是我編譯程序的記錄,我有什么做的不對的地方嗎?
提問者已經指明了環境,也讀過了 FAQ,還列出了錯誤,并且他沒有把問題的責任推到別人頭上,他的問題值得被關注,
蠢問題:
我的主機板有問題了,誰來幫我?
某黑客對這類問題的回答通常是:好的,還要幫你拍拍背和換尿布嗎?,然后按下洗掉鍵,
聰明問題:
我在 S2464 主機板上試過了 X 、 Y 和 Z ,但沒什么作用,我又試了 A 、 B 和 C ,請注意當我嘗試 C 時的奇怪現象,顯然 florbish 正在 grommicking,但結果出人意料,通常在 Athlon MP 主機板上引起 grommicking 的原因是什么?有誰知道接下來我該做些什么測驗才能找出問題?
這個家伙,從另一個角度來看,值得去回答他,他表現出了解決問題的能力,而不是坐等天上掉答案,
在最后一個問題中,注意告訴我答案和給我啟示,指出我還應該做什么診斷作業之間微妙而又重要的區別,
事實上,后一個問題源自于 2001 年 8 月在 Linux 內核郵件串列(lkml)上的一個真實的提問,我(Eric)就是那個提出問題的人,我在 Tyan S2464 主板上觀察到了這種無法解釋的鎖定現象,串列成員們提供了解決這一問題的重要資訊,
通過我的提問方法,我給了別人可以咀嚼玩味的東西;我設法讓人們很容易參與并且被吸引進來,我顯示了自己具備和他們同等的能力,并邀請他們與我共同探討,通過告訴他們我所走過的彎路,以避免他們再浪費時間,我也表明了對他們寶貴時間的尊重,
事后,當我向每個人表示感謝,并且贊賞這次良好的討論經歷的時候, 一個 Linux 內核郵件串列的成員表示,他覺得我的問題得到解決并非由于我是這個串列中的名人,而是因為我用了正確的方式來提問,
黑客從某種角度來說是擁有豐富知識但缺乏人情味的家伙;我相信他是對的,如果我像個乞討者那樣提問,不論我是誰,一定會惹惱某些人或者被他們忽視,他建議我記下這件事,這直接導致了本指南的出現,
如果得不到回答
如果仍得不到回答,請不要以為我們覺得無法幫助你,有時只是看到你問題的人不知道答案罷了,沒有回應不代表你被忽視,雖然不可否認這種差別很難區分,
總的來說,簡單的重復張貼問題是個很糟的點子,這將被視為無意義的喧鬧,有點耐心,知道你問題答案的人可能生活在不同的時區,可能正在睡覺,也有可能你的問題一開始就沒有組織好,
你可以通過其他渠道獲得幫助,這些渠道通常更適合初學者的需要,
有許多網上的以及本地的使用者群組,由熱情的軟體愛好者(即使他們可能從沒親自寫過任何軟體)組成,通常人們組建這樣的團體來互相幫助并幫助新手,
另外,你可以向很多商業公司尋求幫助,不論公司大還是小,別為要付費才能獲得幫助而感到沮喪!畢竟,假使你的汽車發動機汽缸密封圈爆掉了 —— 完全可能如此 —— 你還得把它送到修車鋪,并且為維修付費,就算軟體沒花費你一分錢,你也不能強求技術支持總是免費的,
對像是 Linux 這種大眾化的軟體,每個開發者至少會對應到上萬名使用者,根本不可能由一個人來處理來自上萬名使用者的求助電話,要知道,即使你要為這些協助付費,和你所購買的同類軟體相比,你所付出的也是微不足道的(通常封閉源代碼軟體的技術支持費用比開源軟體的要高得多,且內容也沒那么豐富),
如何更好地回答問題
態度和善一點,問題帶來的壓力常使人顯得無禮或愚蠢,其實并不是這樣,
對初犯者私下回復,對那些坦誠犯錯之人沒有必要當眾羞辱,一個真正的新手也許連怎么搜索或在哪找常見問題都不知道,
如果你不確定,一定要說出來!一個聽起來權威的錯誤回復比沒有還要糟,別因為聽起來像個專家很好玩,就給別人亂指路,要謙虛和誠實,給提問者與同行都樹個好榜樣,
如果幫不了忙,也別妨礙他,不要在實際步驟上開玩笑,那樣也許會毀了使用者的設定 —— 有些可憐的呆瓜會把它當成真的指令,
試探性的反問以引出更多的細節,如果你做得好,提問者可以學到點東西 —— 你也可以,試試將蠢問題轉變成好問題,別忘了我們都曾是新手,
盡管對那些懶蟲抱怨一聲 RTFM 是正當的,能指出檔案的位置(即使只是建議個 Google 搜索關鍵詞)會更好,
如果你決定回答,就請給出好的答案,當別人正在用錯誤的工具或方法時別建議笨拙的權宜之計(wordaround),應推薦更好的工具,重新界定問題,
正面的回答問題!如果這個提問者已經很深入的研究而且也表明已經試過 X 、 Y 、 Z 、 A 、 B 、 C 但沒得到結果,回答 試試看 A 或是 B 或者 試試 X 、 Y 、 Z 、 A 、 B 、 C 并附上一個鏈接一點用都沒有,
幫助你的社區從問題中學習,當回復一個好問題時,問問自己如何修改相關檔案或常見問題檔案以免再次解答同樣的問題?,接著再向檔案維護者發一份補丁,
如果你是在研究一番后才做出的回答,展現你的技巧而不是直接端出結果,畢竟授人以魚不如授人以漁,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/729.html
標籤:其他
