ryanhanwu/How-To-Ask-Questions-The-Smart-Way
FromHow To Ask Questions The Smart Way
Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen
本指南英文版版權為 Eric S. Raymond, Rick Moen 所有。
原文網址:
Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wu
本中文指南是基於原文 3.10 版以及 2010 年由 所翻譯版本的最新翻譯;
協助指出翻譯問題,請,或直接給我。
本文另有:简体中文版
原文版本歷史
目錄 聲明
許多專案在他們的使用協助/說明網頁中連結了本指南,這麼做很好,我們也鼓勵大家都這麼做。但如果你是負責管理這個專案網頁的人,請在超連結附近的顯著位置上註明:
本指南不提供此專案的實際支援服務!
我們已經深刻領教到少了上述聲明所帶來的痛苦。因為少了這點聲明,我們不停地被一些白痴糾纏。這些白痴認為既然我們發布了這本指南,那麼我們就有責任解決世上所有的技術問題。
如果你是因為需要某些協助而正在閱讀這本指南,並且最後離開是因為發現從本指南作者們身上得不到直接的協助,那麼你就是我們所說的那些白痴之一。別問我們問題,我們只會忽略你。我們在這本指南中是教你如何從那些真正懂得你所遇到軟體或硬體問題的人取得協助,而99%的情況下那不會是我們。除非你確定本指南的作者之一剛好是你所遇到的問題領域的專家,否則請不要打擾我們,這樣大家都會開心一點。
簡介
在黑客的世界裡,當你拋出一個技術問題時,最終是否能得到有用的回答,往往取決於你所提問和追問的方式。本指南將教你如何正確的提問以獲得你滿意的答案。
不只是黑客,現在開放原始碼(Open Source)軟體已經相當盛行,你常常也可以由其他有經驗的使用者身上得到好答案,這是件好事;使用者比起黑客來,往往對那些新手常遇到的問題更寬容一些。然而,將有經驗的使用者視為黑客,並採用本指南所提的方法與他們溝通,同樣也是能從他們身上得到滿意回答的最有效方式。
首先你應該明白,黑客們喜愛有挑戰性的問題,或者能激發他們思維的好問題。如果我們並非如此,那我們也不會成為你想詢問的對象。如果你給了我們一個值得反覆咀嚼玩味的好問題,我們自會對你感激不盡。好問題是激勵,是厚禮。好問題可以提高我們的理解力,而且通常會暴露我們以前從沒意識到或者思考過的問題。對黑客而言,"好問題!"是誠摯的大力稱讚。
儘管如此,黑客們有著蔑視或傲慢面對簡單問題的壞名聲,這有時讓我們看起來對新手、無知者似乎較有敵意,但其實不是那樣的。
我們不諱言我們對那些不願思考、或者在發問前不做他們該做的事的人的蔑視。那些人是時間殺手──他們只想索取,從不付出,消耗我們可用在更有趣的問題或更值得回答的人身上的時間。我們稱這樣的人為 失敗者(魯蛇) (由於歷史原因,我們有時把它拼作 lusers)。
我們意識到許多人只是想使用我們寫的軟體,他們對學習技術細節沒有興趣。對大多數人而言,電腦只是種工具,是種達到目的的手段而已。他們有自己的生活並且有更要緊的事要做。我們了解這點,也從不指望每個人都對這些讓我們著迷的技術問題感興趣。儘管如此,我們回答問題的風格是指向那些真正對此有興趣並願意主動參與解決問題的人,這一點不會變,也不該變。如果連這都變了,我們就是在降低做自己最擅長的事情上的效率。
我們(在很大程度上)是自願的,從繁忙的生活中抽出時間來解答疑惑,而且時常被提問淹沒。所以我們無情的濾掉一些話題,特別是拋棄那些看起來像失敗者的傢伙,以便更高效的利用時間來回答贏家(溫拿)的問題。
如果你厭惡我們的態度,高高在上,或過於傲慢,不妨也設身處地想想。我們並沒有要求你向我們屈服──事實上,我們大多數人非常樂意與你平等地交流,只要你付出小小努力來滿足基本要求,我們就會歡迎你加入我們的文化。但讓我們幫助那些不願意幫助自己的人是沒有效率的。無知沒有關係,但裝白痴就是不行。
所以,你不必在技術上很在行才能吸引我們的注意,但你必須表現出能引導你變得在行的特質──機敏、有想法、善於觀察、樂於主動參與解決問題。如果你做不到這些使你與眾不同的事情,我們建議你花點錢找家商業公司簽個技術支援服務合同,而不是要求黑客個人無償地幫助你。
如果你決定向我們求助,當然你也不希望被視為失敗者,更不願成為失敗者中的一員。能立刻得到快速並有效答案的最好方法,就是像贏家那樣提問──聰明、自信、有解決問題的思路,只是偶爾在特定的問題上需要獲得一點幫助。
(歡迎對本指南提出改進意見。你可以 email 你的建議至 或 。然而請注意,本文並非網路禮節的通用指南,而我們通常會拒絕無助於在技術論壇得到有用答案的建議。)
在提問之前
在你準備要通過電子郵件、新聞群組或者聊天室提出技術問題前,請先做到以下事情:
- 嘗試在你準備提問的論壇的舊文章中搜尋答案。
- 嘗試上網搜尋來找到答案。
- 嘗試閱讀手冊來找到答案。
- 嘗試閱讀常見問題文件(FAQ)來找到答案。
- 嘗試自己檢查或試驗來找到答案
- 向你身邊的強者朋友打聽來找到答案。
- 如果你是程式開發者,請嘗試閱讀原始碼來找到答案
當你提出問題的時候,請先表明你已經做了上述的努力;這將有助於樹立你並不是一個不勞而獲且浪費別人的時間的提問者。如果你能一併表達在做了上述努力的過程中所學到的東西會更好,因為我們更樂於回答那些表現出能從答案中學習的人的問題。
運用某些策略,比如先用 Google 搜尋你所遇到的各種錯誤訊息(既搜尋 ,也搜尋網頁),這樣很可能直接就找到了能解決問題的文件或郵件列表線索。即使沒有結果,在郵件列表或新聞組尋求幫助時加上一句 我在 Google 中搜過下列句子但沒有找到什麼有用的東西 也是件好事,即使它只是表明了搜尋引擎不能提供哪些幫助。這麼做(加上搜尋過的字串)也讓遇到相似問題的其他人能被搜尋引擎引導到你的提問來。
別著急,不要指望幾秒鐘的 Google 搜尋就能解決一個複雜的問題。在向專家求助之前,再閱讀一下常見問題文件(FAQ)、放輕鬆、坐舒服一些,再花點時間思考一下這個問題。相信我們,他們能從你的提問看出你做了多少閱讀與思考,如果你是有備而來,將更有可能得到解答。不要將所有問題一股腦拋出,只因你的第一次搜尋沒有找到答案(或者找到太多答案)。
準備好你的問題,再將問題仔細的思考過一遍,因為草率的發問只能得到草率的回答,或者根本得不到任何答案。越是能表現出在尋求幫助前你為解決問題所付出的努力,你越有可能得到實質性的幫助。
小心別問錯了問題。如果你的問題基於錯誤的假設,某個普通黑客(J. Random Hacker)多半會一邊在心裏想著蠢問題…, 一邊用無意義的字面解釋來答覆你,希望著你會從問題的回答(而非你想得到的答案)中汲取教訓。
絕不要自以為夠格得到答案,你沒有;你並沒有。畢竟你沒有為這種服務支付任何報酬。你將會是自己去掙到一個答案,靠提出有內涵的、有趣的、有思維激勵作用的問題──一個有潛力能貢獻社群經驗的問題,而不僅僅是被動的從他人處索取知識。
另一方面,表明你願意在找答案的過程中做點什麼是一個非常好的開始。誰能給點提示?、我的這個例子裏缺了什麼?以及我應該檢查什麼地方比請把我需要的確切的過程貼出來更容易得到答覆。因為你表現出只要有人能指出一個正確方向,你就有完成它的能力和決心。
當你提問時
慎選提問的論壇
小心選擇你要提問的場合。如果你做了下述的事情,你很可能被忽略掉或者被看作失敗者:
- 在與主題不合的論壇上貼出你的問題
- 在探討進階技術問題的論壇張貼非常初級的問題;反之亦然
- 在太多的不同新聞群組上重複轉貼同樣的問題(cross-post)
- 向既非熟人也沒有義務解決你問題的人發送私人電郵
黑客會剔除掉那些搞錯場合的問題,以保護他們溝通的管道不被無關的東西淹沒。你不會想讓這種事發生在自己身上的。
因此,第一步是找到對的論壇。再說一次,Google 和其它搜尋引擎還是你最好的朋友,用它們來找到與你遭遇到困難的軟硬體問題最相關的網站。通常在那裡都有常見問題(FAQ)、郵件列表及相關說明文件的連結。如果你的努力(包括閱讀 FAQ)都沒有結果,網站上也許還有回報臭蟲(Bug-reporting)的流程或連結,如果是這樣,連過去看看。
向陌生的人或論壇發送郵件最可能是風險最大的事情。舉例來說,別假設一個提供豐富內容的網頁的作者會想充當你的免費顧問。不要對你的問題是否會受到歡迎做太樂觀的估計──如果你不確定,那就向別處發送,或者根本別發。
在選擇論壇、新聞群組或郵件列表時,別太相信名字,先看看 FAQ 或者許可書以弄清楚你的問題是否切題。發文前先翻翻已有的話題,這樣可以讓你感受一下那裡的文化。事實上,事先在新聞組或郵件列表的歷史記錄中搜尋與你問題相關的關鍵詞是個極好的主意,也許這樣就找到答案了。即使沒有,也能幫助你歸納出更好的問題。
別像機關槍似的一次"掃射"所有的幫助管道,這就像大喊大叫一樣會使人不愉快。要一個一個地來。
搞清楚你的主題!最典型的錯誤之一是在某種致力於跨平台可移植的語言、套件或工具的論壇中提關於 Unix 或 Windows 作業系統程序介面的問題。如果你不明白為什麼這是大錯,最好在搞清楚這之間差異之前什麼也別問。
一般來說,在仔細挑選的公共論壇中提問,會比在私有論壇中提同樣的問題更容易得到有用的回答。有幾個理由可以支持這點,一是看潛在的回覆者有多少,二是看觀眾有多少。黑客較願意回答那些能幫助到許多人的問題。
可以理解的是,老練的黑客和一些熱門軟體的作者正在接受過多的錯發訊息。就像那根最後壓垮駱駝背的稻草一樣,你的加入也有可能使情況走向極端──已經好幾次了,一些熱門軟體的作者從自己軟體的支援中抽身出來,因為伴隨而來湧入其私人信箱的無用郵件變得無法忍受。
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 頻道是公開歡迎提問的地方,通常可以即時得到回應。
事實上,如果程式出的問題只發生在特定 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。不要全部用大寫,這會被視為無禮的大聲嚷嚷(全部小寫也好不到哪去,因為不易閱讀。也許可以這樣做,但你不行。)
更白話的說,如果你寫得像是個半文盲[譯註:,如將的簡化為ㄉ會使你看起來像一個為了少打幾個鍵而省字的小白。更糟的是,如果像個小孩似地鬼畫符那絕對是在找死,可以肯定沒人會理你(或者最多是給你一大堆指責與挖苦)。
如果在使用非母語的論壇提問,你可以犯點拼寫和語法上的小錯,但決不能在思考上馬虎(沒錯,我們通常能弄清兩者的分別)。同時,除非你知道回覆者使用的語言,否則請使用英語書寫。繁忙的黑客一般會直接刪除用他們看不懂語言寫的消息。在網路上英語是通用語言,用英語書寫可以將你的問題在尚未被閱讀就被直接刪除的可能性降到最低。
如果英文是你的第一外語(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.
- 我把我的問題用某語言和英文寫出來,如果你只用一種語言回答,我會樂意將其翻譯成另一種。
使用易於讀取且標準的文件格式發送問題
Read Next page