提問的藝術,如何問才更可能獲得想要的答案?

程序員要面對的變量很是多,這致使程序員會碰見各類各樣的問題,爲了節約時間提升效率,詢問在這一方面有經驗的程序員是個好主意。但若是想獲得想要的 solution,你須要學習如何提問。
關於這個問題已經有了很是好的答案,原文連接html

這裏轉載,方便按目錄翻閱和記憶。linux

提問以前

在你準備要經過電子郵件、新聞羣組或者聊天室提出技術問題前,請先作到如下事情:git

  1. 嘗試在你準備提問的論壇的舊文章中搜索答案。
  2. 嘗試上網搜索以找到答案。
  3. 嘗試閱讀手冊以找到答案。
  4. 嘗試閱讀常見問題文件(FAQ)以找到答案。
  5. 嘗試本身檢查或試驗以找到答案。
  6. 向你身邊的強者朋友打聽以找到答案。
  7. 若是你是程序開發者,請嘗試閱讀源代碼以找到答案。

提問時

選擇合適的論壇

當心選擇你要提問的場合。若是你作了下述的事情,你極可能被忽略掉或者被看做失敗者:程序員

  • 在與主題不合的論壇上貼出你的問題。
  • 在探討進階技術問題的論壇張貼很是初級的問題;反之亦然。
  • 在太多的不一樣新聞羣組上重複轉貼一樣的問題(cross-post)。
  • 向既非熟人也沒有義務解決你問題的人發送私人電郵。

Stack Overflow

搜索,而後 在 Stack Exchange 問。github

近年來,Stack Exchange community 社區已經成爲回答技術及其餘問題的主要渠道,尤爲是那些開放源碼的項目。shell

由於 Google 索引是即時的,在看 Stack Exchange 以前先在 Google 搜索。有很高的機率某人已經問了一個相似的問題,並且 Stack Exchange 網站們每每會是搜索結果中最前面幾個。若是你在 Google 上沒有找到任何答案,你再到特定相關主題的網站去找。用標籤(Tag)搜索能讓你更縮小你的搜索結果。express

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'sloose搞成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-Printable MIME 編碼發送消息。這種編碼對於張貼非 ASCII 語言多是必須的,但不少郵件程序並不支持這種編碼。當它們處理換行時,那些文本中四處散佈的=20符號既難看也分散注意力,甚至有可能破壞內容的語意。
  • 絕對,永遠不要期望黑客們閱讀使用封閉格式編寫的文檔,像微軟公司的 Word 或 Excel 文件等。大多數黑客對此的反應就像有人將還在冒熱氣的豬糞倒在你家門口時你的反應同樣。即使他們可以處理,他們也很厭惡這麼作。
  • 若是你從使用 Windows 的電腦發送電子郵件,關閉微軟愚蠢的智能引號功能 (從[選項] > [校正] > [自動校訂選項],勾選掉智能引號單選框),以避免在你的郵件中處處散佈垃圾字符。
  • 在論壇,勿濫用表情符號HTML功能(當它們提供時)。一兩個表情符號一般沒有問題,但花哨的彩色文本傾向於令人認爲你是個無能之輩。過濫地使用表情符號、色彩和字體會使你看來像個傻笑的小姑娘。這一般不是個好主意,除非你只是對性而不是對答案感興趣。

若是你使用圖形用戶界面的郵件程序(如微軟公司的 Outlook 或者其它相似的),注意它們的默認設置不必定知足這些要求。大多數這類程序有基於選單的查看源代碼命令,用它來檢查發送文件夾中的郵件,以確保發送的是純文本文件同時沒有一些奇怪的字符。

精確地描述問題並言之有物

  • 仔細、清楚地描述你的問題或 Bug 的症狀。
  • 描述問題發生的環境(機器配置、操做系統、應用程序、以及相關的信息),提供經銷商的發行版和版本號(如:Fedora Core 4Slackware 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 並附上一個連接一點用都沒有。

幫助你的社區從問題中學習。當回覆一個好問題時,問問本身如何修改相關文件或常見問題文件以避免再次解答一樣的問題?,接着再向文件維護者發一份補丁。

若是你是在研究一番後才作出的回答,展示你的技巧而不是直接端出結果。畢竟授人以魚不如授人以漁

相關文章
相關標籤/搜索