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