如何以聰明的方式提問
Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen
本指南英文版版權為 Eric S. Raymond, Rick Moen 所有。
原文網址:http://www.catb.org/~esr/faqs/smart-questions.html
聲明#
許多項目在他們的使用協助 / 說明網頁中鏈接了本指南,這麼做很好,我們也鼓勵大家都這麼做。但如果你是負責管理這個項目網頁的人,請在超鏈接附近的顯著位置上注明:
本指南不提供此項目的實際支持服務!
我們已經深刻領教到少了上述聲明所帶來的痛苦。因為少了這點聲明,我們不停地被一些白痴糾纏。這些白痴認為既然我們發布了這本指南,那麼我們就有責任解決世上所有的技術問題。
如果你是因為需要某些協助而正在閱讀這本指南,並且最後離開是因為發現從本指南作者們身上得不到直接的協助,那麼你就是我們所說的那些白痴之一。別問我們問題,我們只會忽略你。我們在這本指南中是教你如何從那些真正懂得你所遇到軟件或硬件問題的人取得協助,而 99% 的情況下那不會是我們。除非你確定本指南的作者之一剛好是你所遇到的問題領域的專家,否則請不要打擾我們,這樣大家都會開心一點。
簡介#
在黑客的世界裡,當你拋出一個技術問題時,最終是否能得到有用的回答,往往取決於你所提問和追問的方式。本指南將教你如何正確的提問以獲得你滿意的答案。
不只是黑客,現在開放源代碼(Open Source)軟件已經相當盛行,你常常也可以由其他有經驗的使用者身上得到好答案,這是一件好事;使用者比起黑客來,往往對那些新手常遇到的問題更寬容一些。然而,將有經驗的使用者視為黑客,並採用本指南所提的方法與他們溝通,同樣也是能從他們身上得到滿意回答的最有效方式。
首先你應該明白,黑客們喜愛有挑戰性的問題,或者能激發我們思維的好問題。如果我們並非如此,那我們也不會成為你想詢問的對象。如果你給了我們一個值得反復咀嚼玩味的好問題,我們自會對你感激不盡。好問題是激勵,是厚禮。好問題可以提高我們的理解力,而且通常會暴露我們以前從沒意識到或者思考過的問題。對黑客而言,"好問題!" 是誠摯的大力稱讚。
儘管如此,黑客們有著蔑視或傲慢面對簡單問題的壞名聲,這有時讓我們看起來對新手、無知者似乎較有敵意,但其實不是那樣的。
我們不諱言我們對那些不願思考、或者在發問前不做他們該做的事的人的蔑視。那些人是時間殺手 -– 他們只想索取,從不付出,消耗我們可用在更有趣的問題或更值得回答的人身上的時間。我們稱這樣的人為 失敗者(撸瑟)
(由於歷史原因,我們有時把它拼作 lusers
)。
我們意識到許多人只是想使用我們寫的軟件,他們對學習技術細節沒有興趣。對大多數人而言,電腦只是一種工具,是一種達到目的的手段而已。他們有自己的生活並且有更要緊的事要做。我們了解這點,也從不指望每個人都對這些讓我們著迷的技術問題感興趣。儘管如此,我們回答問題的風格是指向那些真正對此有興趣並願意主動參與解決問題的人,這一點不會變,也不該變。如果連這都變了,我們就是在降低做自己最擅長的事情上的效率。
我們(在很大程度上)是自願的,從繁忙的生活中抽出時間來解答疑惑,而且時常被提問淹沒。所以我們無情的濾掉一些話題,特別是拋棄那些看起來像失敗者的家伙,以便更高效的利用時間來回答贏家(winner)
的問題。
如果你厭惡我們的態度,高高在上,或過於傲慢,不妨也設身處地想想。我們並沒有要求你向我們屈服 -- 實際上,我們大多數人非常樂意與你平等地交流,只要你付出小小努力來滿足基本要求,我們就會歡迎你加入我們的文化。但讓我們幫助那些不願意幫助自己的人是沒有效率的。無知沒有關係,但裝白痴就是不行。
所以,你不必在技術上很在行才能吸引我們的注意,但你必須表現出能引導你變得在行的特質 -- 機敏、有想法、善於觀察、樂於主動參與解決問題。如果你做不到這些使你與眾不同的事情,我們建議你花點錢找家商業公司簽個技術支持服務合同,而不是要求黑客個人無償地幫助你。
如果你決定向我們求助,當然你也不希望被視為失敗者,更不願成為失敗者中的一員。能立刻得到快速並有效答案的最好方法,就是像贏家那樣提問 -- 聰明、自信、有解決問題的思路,只是偶爾在特定的問題上需要獲得一點幫助。
(歡迎對本指南提出改進意見。你可以 email 你的建議至 [email protected] 或 [email protected]。然而請注意,本文並非網絡禮節的通用指南,而我們通常會拒絕無助於在技術論壇得到有用答案的建議。)
提問之前#
在你準備要通過電子郵件、新聞群組或者聊天室提出技術問題前,請先做到以下事情:
- 嘗試在你準備提問的論壇的舊文章中搜索答案。
- 嘗試上網搜索以找到答案。
- 嘗試閱讀手冊以找到答案。
- 嘗試閱讀常見問題文件(FAQ)以找到答案。
- 嘗試自己檢查或試驗以找到答案。
- 向你身邊的強者朋友打聽以找到答案。
- 如果你是程序開發者,請嘗試閱讀源代碼以找到答案。
當你提出問題的時候,請先表明你已經做了上述的努力;這將有助於樹立你並不是一個不勞而獲且浪費別人的時間的提問者。如果你能一並表達在做了上述努力的過程中所學到的東西會更好,因為我們更樂於回答那些表現出能從答案中學習的人的問題。
運用某些策略,比如先用 Google 搜索你所遇到的各種錯誤信息(既搜索Google 論壇,也搜索網頁),這樣很可能直接就找到了能解決問題的文件或郵件列表線索。即使沒有結果,在郵件列表或新聞組尋求幫助時加上一句 我在Google中搜過下列句子但沒有找到什麼有用的東西
也是件好事,即使它只是表明了搜索引擎不能提供哪些幫助。這麼做(加上搜索過的字串)也讓遇到相似問題的其他人能被搜索引擎引導到你的提問來。
別著急,不要指望幾秒鐘的 Google 搜索就能解決一個複雜的問題。在向專家求助之前,再閱讀一下常見問題文件(FAQ)、放輕鬆、坐舒服一些,再花點時間思考一下這個問題。相信我們,他們能從你的提問看出你做了多少閱讀與思考,如果你是有備而來,將更有可能得到解答。不要將所有問題一股腦拋出,只因你的第一次搜索沒有找到答案(或者找到太多答案)。
準備好你的問題,再將問題仔細的思考過一遍,因為草率的發問只能得到草率的回答,或者根本得不到任何答案。越是能表現出在尋求幫助前你為解決問題所付出的努力,你越有可能得到實質性的幫助。
小心別問錯了問題。如果你的問題基於錯誤的假設,某個普通黑客(J. Random Hacker)多半會一邊在心裡想着蠢問題…
, 一邊用無意義的字面解釋來答復你,希望著你會從問題的回答(而非你想得到的答案)中汲取教訓。
絕不要自以為夠格得到答案,你沒有;你並沒有。畢竟你沒有為這種服務支付任何報酬。你將會是自己去掙到一個答案,靠提出有內涵的、有趣的、有思維激勵作用的問題 -- 一個有潛力能貢獻社區經驗的問題,而不僅僅是被動的從他人處索取知識。
另一方面,表明你願意在找答案的過程中做點什麼是個非常好的開端。誰能給點提示?
、我的這個例子裡缺了什麼?
以及我應該檢查什麼地方
比請把我需要的確切的過程貼出來
更容易得到答復。因為你表現出只要有人能指個正確方向,你就有完成它的能力和決心。
當你提問時#
使用有意義且描述明確的標題#
在郵件列表、新聞群組或論壇中,大約 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.
- 我把我的問題用某語言和英文寫出來,如果你只用一種語言回答,我會樂意將其翻譯成另一種。
使用易於閱讀且標準的文件格式發送問題#
如果你人為地將問題搞得難以閱讀,它多半會被忽略,人們更願讀易懂的問題,所以:
- 使用純文字而不是 HTML (關閉 HTML並不難)
- 使用 MIME 附件通常是可以的,前提是真正有內容(譬如附帶的源代碼或 patch),而不僅僅是郵件程序生成的模板(譬如只是信件內容的拷貝)。
- 不要發送一段文字只是單行句子但多次斷行的郵件(這使得回覆部分內容非常困難)。設想你的讀者是在 80 個字符寬的終端機上閱讀郵件,最好設置你的斷行點小於 80 字。
- 但是,也不要用任何固定斷行資料(譬如日誌檔案拷貝或會話記錄)。檔案應該原樣包含,讓回覆者有信心他們看到的是和你看到的一樣的東西。
- 在英語論壇中,不要使用
Quoted-Printable
MIME 編碼發送消息。這種編碼對於張貼非 ASCII 語言可能是必須的,但很多郵件程序並不支持這種編碼。當它們分斷時,那些文本中四處散布的=20
符號既難看也分散注意力,甚至有可能破壞內容的語意。 - 絕對,永遠不要指望黑客們閱讀使用封閉格式編寫的文檔,像是微軟公司的 Word 或 Excel 文件等。大多數黑客對此的反應就像有人將還在冒熱氣的豬糞倒在你門口階梯上時的反應一樣。即便他們能夠處理,他們也很厭惡這麼做。
- 如果你從使用 Windows 的電腦發送電子郵件,關閉微軟愚蠢的
智能引號
功能 (從 [選項] > [校訂] > [自動校正選項], 按掉智能引號
單選框),以免在你的郵件中到處散布垃圾字符。 - 在論壇,勿濫用
表情符號
和HTML
功能(當它們提供時)。一兩個表情符號通常沒有問題,但花哨的彩色文本傾向於使人認為你是個無能之輩。過滥地使用表情符號、色彩和字體會使你看來像個傻笑的小姑娘。這通常不是個好主意,除非你只是對 sex 而不是有用的回覆更有興趣。
如果你使用圖形用戶界面的郵件程序(如微軟公司的 Outlook 或者其它類似的),注意它們的默認設置不一定滿足這些要求。大多數這類程序有基於選單的查看源代碼
命令,用它來檢查發送文件夾中的消息,以確保發送的是沒有多餘雜質的純文本文件。
精確的描述問題並言之有物#
- 仔細、清楚地描述你的問題或 Bug 的症狀。
- 描述問題發生的環境(機器配置、操作系統、應用程序、以及相關的信息),提供經銷商的發行版和版本號(如:
Fedora Core 4
、Slackware 9.1
等)。 - 描述在提問前你是怎樣去研究和理解這個問題的。
- 描述在提問前為確定問題而採取的診斷步驟。
- 描述最近做過什麼可能相關的硬件或軟件變更。
- 儘可能的提供一個可以
重現這個問題的既定環境
的方法。
盡量去揣測一個黑客會怎樣反問你,在他提問的時候預先給他答案。
以上幾點中,當你報告的是你認為可能在代碼中的問題時,給黑客一個可以重現你的問題的環境尤其重要。當你這麼做時,你得到有效的回答的機會和速度都會大大的提升。
Simon Tatham寫過一篇名為《如何有效的報告 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 值?
聰明問題
我正試著用替換一幅圖片的色碼成自己選定的色碼,我現在知道的唯一方法是編輯每個色碼區塊,
但卻無法從某繪圖程序的顏色選擇器取得十六進制的的 RGB 值。
第二種提問法比較聰明,你可能得到像是建議採用另一個更合適的工具
的回覆。
清楚明確的表達你的問題以及需求#
漫無邊際的提問近乎無休無止的時間黑洞。最有可能給你有用答案的人通常也正是最忙的人(他們忙是因為要親自完成大部分工作)。這樣的人對無節制的時間黑洞相當厭惡,所以他們也傾向於厭惡那些漫無邊際的提問。
如果你明確表述需要回答者做什麼(如提供指點、發送一段代碼、檢查你的補丁、或是其他等等),就最有可能得到有用的答案。因為這會定出一個時間和精力的上限,便於回答者能集中精力來幫你。這麼做很棒。
要理解專家們所處的世界,請把專業技能想像為充裕的資源,而回覆的時間則是稀缺的資源。你要求他們奉獻的時間越少,你越有可能從真正專業而且很忙的專家那裡得到解答。
所以,界定一下你的問題,使專家花在辨識你的問題和回答所需要付出的時間減到最少,這技巧對你有用答案相當有幫助 -- 但這技巧通常和簡化問題有所區別。因此,問我想更好的理解X,可否指點一下哪有好一點說明?
通常比問你能解釋一下X嗎?
更好。如果你的代碼不能運作,通常請別人看看哪裡有問題,比要求別人替你改正要明智得多。
詢問有關代碼的問題時#
別要求他人幫你有問題的代碼調試而不提示一下應該從何入手。張貼幾百行的代碼,然後說一聲:它不會動
會讓你完全被忽略。只貼幾十行代碼,然後說一句:在第七行以後,我期待它顯示 <x>,但實際出現的是 <y>
比較有可能讓你得到回應。
最有效描述程序問題的方法是提供最精簡的 Bug 展示測試示例(bug-demonstrating test case)。什麼是最精簡的測試示例?那是問題的縮影;一小個程序片段能剛好展示出程序的異常行為,而不包含其他令人分散注意力的內容。怎麼制作最精簡的測試示例?如果你知道哪一行或哪一段代碼會造成異常的行為,複製下來並加入足夠重現這個狀況的代碼(例如,足以讓這段代碼能被編譯 / 直譯 / 被應用程序處理)。如果你無法將問題縮減到一個特定區塊,就複製一份代碼並移除不影響產生問題行為的部分。總之,測試示例越小越好(查看話不在多而在精一節)。
一般而言,要得到一段相當精簡的測試示例並不太容易,但永遠先嘗試這樣做的是種好習慣。這種方式可以幫助你了解如何自行解決這個問題 —- 而且即使你的嘗試不成功,黑客們也會看到你在嘗試取得答案的過程中付出了努力,這可以讓他們更願意與你合作。
如果你只是想讓別人幫忙審查(Review)一下代碼,在信的開頭就要說出來,並且一定要提到你認為哪一部分特別需要關注以及為什麼。
別把自己家庭作業的問題貼上來#
黑客們很擅長分辨哪些問題是家庭作業式的問題;因為我們中的大多數都曾自己解決這類問題。同樣,這些問題得由你來搞定,你會從中學到東西。你可以要求給點提示,但別要求得到完整的解決方案。
如果你懷疑自己碰到了個家庭作業式的問題,但仍然無法解決,試試在使用者群組,論壇或(最後一招)在項目的使用者郵件列表或論壇中提問。儘管黑客們會看出來,但一些有經驗的使用者也許仍會給你一些提示。
去掉無意義的提問句#
避免用無意義的話結束提問,例如有人能幫我嗎?
或者這有答案嗎?
。
首先:如果你對問題的描述不是很好,這樣問更是畫蛇添足。
其次:由於這樣問是畫蛇添足,黑客們會很厭煩你 -- 而且通常會用邏輯上正確,但毫無意義的回答來表示他們的蔑視,例如:沒錯,有人能幫你
或者不,沒答案
。
一般來說,避免用 是或否
、對或錯
、有或沒有
類型的問句,除非你想得到是或否類型的回答。
禮多人不怪,而且有時還很有幫助#
彬彬有禮,多用請
和謝謝您的關注
,或謝謝你的關照
。讓大家都知道你對他們花時間免費提供幫助心存感激。
坦白說,這一點並沒有比清晰、正確、精確並合法語法和避免使用專用格式重要(也不能取而代之)。黑客們一般寧可讀有點唐突但技術上鮮明的 Bug 報告,而不是那種有禮但含糊的報告。(如果這點讓你不解,記住我們是按問題能教我們什麼來評價問題的價值的)
然而,如果你有一串的問題待解決,客氣一點肯定會增加你得到有用回應的機會。
(我們注意到,自從本指南發布後,從資深黑客那裡得到的唯一嚴重缺陷反饋,就是對預先道謝這一條。一些黑客覺得先謝了
意味著事後就不用再感謝任何人的暗示。我們的建議是要麼先說先謝了
,然後事後再對回覆者表示感謝,或者換種方式表達感激,譬如用謝謝你的關注
或謝謝你的關照
。)
問題解決後,加個簡短的補充說明#
問題解決後,向所有幫助過你的人發個說明,讓他們知道問題是怎樣解決的,並再一次向他們表示感謝。如果問題在新聞組或者郵件列表中引起了廣泛關注,應該在那裡貼一個說明比較恰當。
最理想的方式是向最初提問的話題回覆此消息,並在標題中包含已修正
,已解決
或其它同等含義的明顯標記。在人來人往的郵件列表裡,一個看見討論串問題 X
和問題的X - 已解決
的潛在回覆者就明白不用再浪費時間了(除非他個人覺得問題 X
的有趣),因此可以利用此時間去解決其它問題。
補充說明不必很長或是很深入;簡單的一句你好,原來是網線出了問題!謝謝大家 – Bill
比什麼也不說要來得好。事實上,除非結論真的很有技術含量,否則簡短可愛的小結比長篇大論更好。說明問題是怎樣解決的,但大可不必將解決問題的過程復述一遍。
對於有深度的問題,張貼調試記錄的摘要是有幫助的。描述問題的最終狀態,說明是什麼解決了問題,在此之後才指明可以避免的盲點。避免盲點的部分應放在正確的解決方案和其它總結材料之後,而不要將此信息搞成偵探推理小說。列出那些幫助過你的名字,會讓你交到更多朋友。
除了有禮貌和有內涵以外,這種類型的補充也有助於他人在郵件列表 / 新聞群組 / 論壇中搜索到真正解決你問題的方案,讓他們也從中受益。
至少,這種補充有助於讓每位參與協助的人因問題的解決而從中得到滿足感。如果你自己不是技術專家或者黑客,那就相信我們,這種感覺對於那些你向他們求助的大師或者專家而言,是非常重要的。問題懸而未決會讓人灰心;黑客們渴望看到問題被解決。好人有好報,滿足他們的渴望,你會在下次提問時嘗到甜頭。
思考一下怎樣才能避免他人將來也遇到類似的問題,自問寫一份文件或加個常見問題(FAQ)會不會有幫助。如果是的話就將它們發給維護者。
在黑客中,這種良好的後繼行動實際上比傳統的禮節更為重要,也是你如何透過善待他人而贏得聲譽的方式,這是非常有價值的資產。
如何解讀答案#
RTFM 和 STFW:如何知道你已完全搞砸了#
有一個古老而神聖的傳統:如果你收到RTFM (Read The Fucking Manual)
的回應,回答者認為你應該去讀他媽的手冊。當然,基本上他是對的,你應該去讀一讀。
RTFM 有一個年輕的親戚。如果你收到STFW(Search The Fucking Web)
的回應,回答者認為你應該到他媽的網上搜索過了。那人多半也是對的,去搜索一下吧。(更溫和一點的說法是 Google 是你的朋友!)
在論壇,你也可能被要求去爬爬論壇的舊文。事實上,有人甚至可能熱心地為你提供以前解決此問題的討論串。但不要依賴這種關照,提問前應該先搜索一下舊文。
通常,用這兩句之一回答你的人會給你一份包含你需要內容的手冊或者一個網址,而且他們打這些字的時候也正在讀著。這些答復意味著回答者認為
- 你需要的信息非常容易獲得;
- 你自己去搜索這些信息比灌給你能讓你學到更多。
你不應該因此不爽;依照黑客的標準,他已經表示了對你一定程度的關注,而沒有對你的要求視而不見。你應該對他祖母般的慈祥表示感謝。
如果還是搞不懂#
如果你看不懂回應,別立刻要求對方解釋。像你以前試著自己解決問題時那樣(利用手冊,FAQ,網絡,身邊的高手),先試著去搞懂他的回應。如果你真的需要對方解釋,記得表現出你已經從中學到了點什麼。
比方說,如果我回答你:看來似乎是 zentry 卡住了;你應該先清除它。
,然後,這是一個很糟的後續問題回應:zentry是什麼?
好的問法應該是這樣:哦~~~我看過說明了但是只有 -z 和 -p 兩個參數中提到了 zentries,而且還都沒有清楚的解釋如何清除它。你是指這兩個中的哪一個嗎?還是我看漏了什麼?
不該問的問題#
以下是幾個經典蠢問題,以及黑客沒回答時心中所想的:
問題:我怎樣用 X 做 Y?
問題:我可以用 Bass-o-matic 文件轉換工具將 AcmeCorp 檔案轉換為 TeX 格式嗎?
問題:我在安裝 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 內核郵件列表的成員表示,他覺得我的問題得到解決並非由於我是這個列表中的名人,而是因為我用了正確的方式來提問。
黑客從某種角度來說是擁有豐富知識但缺乏人情味的家伙;我相信他是對的,如果我像個乞討者那樣提問,不論我是誰,一定會惹惱某些人或者被他們忽視。他建議我記下這件事,這直接導致了本指南的出現。
如何更好地回答問題#
態度和善一點。問題帶來的壓力常使人顯得無禮或愚蠢,其實並不是這樣。
對初犯者私下回覆。對那些坦誠犯錯之人沒有必要當眾羞辱,一個真正的新手也許連怎麼搜索或在哪找常見問題都不知道。
如果你不確定,一定要說出來!一個聽起來權威的錯誤回覆比沒有還要糟,別因為聽起來像個專家很好玩,就給別人亂指路。要謙虛和誠實,給提問者與同行都樹個好榜樣。
如果幫不了忙,也別妨礙他。不要在實際步驟上開玩笑,那樣也許會毀了使用者的設置 -- 有些可憐的呆瓜會把它當成真的指令。
試探性的反問以引出更多的細節。如果你做得好,提問者可以學到點東西 -- 你也可以。試試將蠢問題轉變成好問題,別忘了我們都曾是新手。
儘管對那些懶蟲抱怨一聲 RTFM 是正當的,能指出文件的位置(即使只是建議個 Google 搜索關鍵詞)會更好。
如果你決定回答,就請給出好的答案。當別人在用錯誤的工具或方法時別建議笨拙的權宜之計(wordaround),應推薦更好的工具,重新界定問題。
正面的回答問題!如果這個提問者已經很深入的研究而且也表明已經試過 X 、 Y 、 Z 、 A 、 B 、 C 但沒得到結果,回答 試看看 A 或是 B
或者 試試X 、 Y 、 Z 、 A 、 B 、 C
並附上連結一點用都沒有。
幫助你的社區從問題中學習。當回覆一個好問題時,問問自己如何修改相關文件或常見問題文件以免再次解答同樣的問題?
,接著再向文件維護者發一份補丁。
如果你是在研究一番後才做出的回答,展現你的技巧而不是直接端出結果。畢竟授人以魚不如授人以漁
。
相關資源#
如果你需要個人電腦、Unix 系統和網絡如何運作的基礎知識,參閱Unix 系統和網絡基本原理。
當你發布軟件或補丁時,試著按軟件發布實踐操作。
鳴謝#
Evelyn Mitchel 貢獻了一些愚蠢問題例子並啟發了編寫如何更好地回答問題
這一節, Mikhail Ramendik 貢獻了一些特別有價值的建議和改進。