ryanhanwu/How-To-Ask-Questions-The-Smart-Way

ryanhanwu/How-To-Ask-Questions-The-Smart-Way

From

如果你人為地將問題搞得難以閱讀,它多半會被忽略,人們更願讀易懂的問題,所以:



  • 使用純文字而不是 HTML (並不難)

  • 使用 MIME 附件通常是可以的,前提是真正有內容(譬如附帶的原始碼或patch),而不僅僅是信箱程式生成的模板(譬如只是信件內容的拷貝)。

  • 不要發送一段文字只是單行句子但多次斷行的郵件(這使得回覆部分內容非常困難)。設想你的讀者是在80個字符寬的終端機上閱讀郵件,最好設置你的斷行點小於80字。

  • 但是,也不要用任何固定斷行資料(譬如日誌檔案拷貝或會話記錄)。檔案應該原樣包含,讓回覆者有信心他們看到的是和你看到的一樣的東西。

  • 在英語論壇中,不要使用Quoted-Printable MIME編碼發送消息。這種編碼對於張貼非 ASCII 語言可能是必須的,但很多電子信箱程式並不支援這種編碼。當它們分斷時,那些文本中四處散佈的=20符號既難看也分散注意力,甚至有可能破壞內容的語意。

  • 絕對,永遠不要指望黑客們閱讀使用封閉格式編寫的文檔,像是微軟公司的 Word 或 Excel 文件等。大多數黑客對此的反應就像有人將還在冒熱氣的豬糞倒在你門口階梯上時你的反應一樣。即便他們能夠處理,他們也很厭惡這麼做。

  • 如果你從使用 Windows 的電腦發送電子郵件,關閉微軟愚蠢的智慧引號功能 (從[選項] > [校訂] > [自動校正選項], 按掉智慧引號核取方塊),以免在你的郵件中到處散佈垃圾字符。

  • 在論壇,勿濫用表情符號HTML功能(當它們提供時)。一兩個表情符號通常沒有問題,但花哨的彩色文本傾向於使人認為你是個無能之輩。過濫地使用表情符號、色彩和字體會使你看來像個傻笑的小姑娘。這通常不是個好主意,除非你只是對性而不是有用的回覆更有興趣。


如果你使用圖形用戶界面的電子信箱程式(如微軟公司的 Outlook 或者其它類似的),注意它們的預設配置不一定滿足這些要求。大多數這類程式有基於選單的查看原始碼命令,用它來檢查發送文件夾中的消息,以確保發送的是沒有多餘雜質的純文本文件。


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



  • 仔細、清楚地描述你的問題或臭蟲的症狀。

  • 描述問題發生的環境(機器配置、作業系統、應用程式、以及相關的資訊),提供經銷商的發行版和版本號(如:Fedora Core 4Slackware 9.1等)。

  • 描述在提問前你是怎樣去研究和理解這個問題的。

  • 描述在提問前為確定問題而採取的診斷步驟。

  • 描述最近做過什麼可能相關的硬體或軟體變更。

  • 盡可能的提供一個可以重製這個問題的既定環境的方法


儘量去揣測一個黑客會怎樣反問你,在他提問的時候預先給他答案。


以上幾點中,當你回報的是你認為可能在程式碼中的問題時,給黑客一個可以重製你的問題的環境尤其重要。當你這麼做時,你得到有效的回答的機會和速度都會大大的提升。


寫過一篇名為〈如何有效的回報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 值?



聰明問題



我正試著用替換一幅圖片的色碼成自己選定的色碼,我現在知道的唯一方法是編輯每個色碼區塊,
但卻無法從某繪圖程式的顏色選擇器取得十六進制的的 RGB 值。



第二種提問法比較聰明,你可能得到像是建議採用另一個更適任的工具的回覆。


別要求使用私人電郵回覆


黑客們認為問題的解決過程應該公開、透明,此過程中如果更有經驗的人注意到不完整或者不當之處,最初的回覆才能夠、也應該被糾正。同時,作為提供幫助者也能因為能力和學識被其它同行看到而得到某種獎勵。


當你要求私下回覆時,這個過程和獎勵都被中止。別這樣做,讓回覆者來決定是否私下回答 -- 如果他真這麼做了,通常是因為他認為問題編寫太差或者太膚淺,以至於對其它人沒有興趣。


這條規則存在一條有但書的例外,如果你確信提問可能會引來大量雷同的回覆時,那麼這個神奇的提問句會是向我發電郵,我將為論壇歸納這些回覆。試著將郵件列表或新聞群組從洪水般的雷同回覆中解救出來是非常有禮貌的 -- 但你必須信守諾言。


清楚明確的表達你的問題以及需求


漫無邊際的提問近乎無休無止的時間黑洞。最有可能給你有用答案的人通常也正是最忙的人(他們忙是因為要親自完成大部分工作)。這樣的人對無節制的時間黑洞相當厭惡,所以他們也傾向於厭惡那些漫無邊際的提問。


如果你明確表述需要回答者做什麼(如提供指點、發送一段程式碼、檢查你的補丁、或是其他等等),就最有可能得到有用的答案。因為這會定出一個時間和精力的上限,便於回答者能集中精力來幫你。這麼做很棒。


要理解專家們所處的世界,請把專業技能想像為充裕的資源,而回覆的時間則是稀缺的資源。你要求他們奉獻的時間越少,你越有可能從真正專業而且很忙的專家那裡得到解答。


所以,界定一下你的問題,使專家花在辨識你的問題和回答所需要付出的時間減到最少,這技巧對你有用答案相當有幫助──但這技巧通常和簡化問題有所區別。因此,問我想更好的理解X,可否指點一下哪裡有好一點的說明?通常比問你能解釋一下X嗎?更好。如果你的程式碼不能運作,通常請別人看看哪裡有問題,比要求別人替你改正要明智得多。


詢問有關程式碼的問題時


別要求他人幫你有問題的代碼除錯而不提示一下應該從何入手。張貼幾百行的代碼,然後說一聲:它不會動會讓你完全被忽略。只貼幾十行代碼,然後說一句:在第七行以後,我期待它顯示 <x>,但實際出現的是 <y>比較有可能讓你得到回應。


最有效描述程式問題的方法是提供最精簡的臭蟲展示測試示例(bug-demonstrating test case)。什麼是最精簡的測試示例? 那是問題的縮影;一小個程式片段能剛好展示出程式的異常行為,而不包含其他令人分散注意力的內容。怎麼製作最精簡的測試示例?如果你知道哪一行或哪一段程式碼會造成異常的行為,複製下來並加入足夠重現這個狀況的程式碼(例如,足以讓這段程式碼能被編譯/直譯/被應用程式處理)。如果你無法將問題縮減到一個特定區塊,就複製一份程式碼並移除不影響產生問題行為的部分。總之,測試示例越小越好(查看話不在多而在精一節)。


一般而言,要得到一段相當精簡的測試示例並不太容易,但永遠先嘗試這樣做的是種好習慣。這種方式可以幫助你了解如何自行解決這個問題──而且即使你的嘗試不成功,黑客們也會看到你在嘗試取得答案的過程中付出了努力,這可以讓他們更願意與你合作。


如果你只是想讓別人幫忙審(Review)一下代碼,在信的開頭就要說出來,並且一定要提到你認為哪一部分特別需要關注以及為什麼。


別把自己家庭作業的問題貼上來


黑客們很擅長分辨哪些問題是家庭作業式的問題;因為我們中的大多數都曾自己解決這類問題。同樣,這些問題得由來搞定,你會從中學到東西。你可以要求給點提示,但別要求得到完整的解決方案。


如果你懷疑自己碰到了一個家庭作業式的問題,但仍然無法解決,試試在使用者群組,論壇或(最後一招)在專案的使用者郵件列表或論壇中提問。儘管黑客們看出來,但一些有經驗的使用者也許仍會給你一些提示。


去掉無意義的提問句


避免用無意義的話結束提問,例如有人能幫我嗎?或者這有答案嗎?


首先:如果你對問題的描述不是很好,這樣問更是畫蛇添足。


其次:由於這樣問是畫蛇添足,黑客們會很厭煩你──而且通常會用邏輯上正確,但毫無意義的回答來表示他們的蔑視, 例如:沒錯,有人能幫你或者不,沒答案


一般來說,避免用 是或否對或錯有或沒有類型的問句,除非你想得到是或否類型的回答。


即使你很急也不要在標題寫緊急


這是你的問題,不是我們的。宣稱緊急極有可能事與願違:大多數黑客會直接刪除無禮和自私地企圖即時引起關注的問題。更嚴重的是,緊急這個字(或是其他企圖引起關注的標題)通常會被垃圾信過濾器過濾掉 -- 你的問題可能永遠將無法得到解答。


有半個例外的情況是,如果你是在一些很高調,會使黑客們興奮的地方,也許值得這樣去做。在這種情況下,如果你有時間壓力,也很有禮貌地提到這點,人們也許會有興趣回答快一點。


當然,這風險很大,因為黑客們興奮的點多半與你的不同。譬如從 NASA 國際空間站(International Space Station)發這樣的標題沒有問題,但用自我感覺良好的慈善行為或政治原因發肯定不行。事實上,張貼諸如緊急:幫我救救這個毛絨絨的小海豹!肯定讓你被黑客忽略或惹惱他們,即使他們認為毛絨絨的小海豹很重要。


如果你覺得這點很不可思議,最好再把這份指南剩下的內容多讀幾遍,直到你弄懂了再發文。


禮多人不怪,而且有時還很有幫助


彬彬有禮,多用謝謝您的關注,或謝謝你的關照。讓大家都知道你對他們花時間免費提供幫助心存感激。


坦白說,這一點並沒有比清晰、正確、精準並合法文法和避免使用專用格式重要(也不能取而代之)。黑客們一般寧可讀有點唐突但技術上鮮明的臭蟲報告,而不是那種有禮但含糊的報告。(如果這點讓你不解,記住我們是按問題能教我們什麼來評價問題的價值的)


然而,如果你有一串的問題待解決,客氣一點肯定會增加你得到有用回應的機會。


(我們注意到,自從本指南發佈後,從資深黑客那裡得到的唯一嚴重缺陷反饋,就是對預先道謝這一條。一些黑客覺得先謝了意味著事後就不用再感謝任何人的暗示。我們的建議是要麼先說先謝了然後事後再對回覆者表示感謝,或者換種方式表達感激,譬如用謝謝你的關注謝謝你的關照。)


問題解決後,加個簡短的補充說明


問題解決後,向所有幫助過你的人發個說明,讓他們知道問題是怎樣解決的,並再一次向他們表示感謝。如果問題在新聞組或者郵件列表中引起了廣泛關注,應該在那裡貼一個說明比較恰當。


最理想的方式是向最初提問的話題回覆此消息,並在標題中包含已修正已解決或其它同等含義的明顯標記。在人來人往的郵件列表裡,一個看見討論串問題 X問題的X - 已解決的潛在回覆者就明白不用再浪費時間了(除非他個人覺得問題 X的有趣),因此可以利用此時間去解決其它問題。


補充說明不必很長或是很深入;簡單的一句你好,原來是網路線出了問題!謝謝大家 – Bill比什麼也不說要來的好。事實上,除非結論真的很有技術含量,否則簡短可愛的小結比長篇大論更好。說明問題是怎樣解決的,但大可不必將解決問題的過程複述一遍。


對於有深度的問題,張貼除錯記錄的摘要是有幫助的。描述問題的最終狀態,說明是什麼解決了問題,在此之後才指明可以避免的盲點。避免盲點的部分應放在正確的解決方案和其它總結材料之後,而不要將此訊息搞成偵探推理小說。列出那些幫助過你的名字,會讓你交到更多朋友。


除了有禮貌和有內涵以外,這種類型的補充也有助於他人在郵件列表/新聞群組/論壇中搜尋到真正解決你問題的方案,讓他們也從中受益。


至少,這種補充有助於讓每位參與協助的人因問題的解決而從中得到滿足感。如果你自己不是技術專家或者黑客,那就相信我們,這種感覺對於那些你向他們求助的大師或者專家而言,是非常重要的。問題懸而未決會讓人灰心;黑客們渴望看到問題被解決。好人有好報,滿足他們的渴望,你會在下次提問時嘗到甜頭。


思考一下怎樣才能避免他人將來也遇到類似的問題,自問寫一份文件或加個常見問題(FAQ)會不會有幫助。如果是的話就將它們發給維護者。


在黑客中,這種良好的後繼行動實際上比傳統的禮節更為重要,也是你如何透過善待他人而贏得聲譽的方式,這是非常有價值的資產。


如何解讀答案

RTFM和STFW:如何知道你已完全搞砸了


有一個古老而神聖的傳統:如果你收到RTFM (Read The Fucking Manual)的回應,回答者認為你應該去讀那該死的手冊。當然,基本上他是對的,你應該去讀一讀。


RTFM 有一個年輕的親戚。如果你收到STFW(Search The Fucking Web)的回應,回答者認為你應該到該死的網路上搜索過了。那人多半也是對的,去搜尋一下吧。(更溫和一點的說法是 !)


在論壇,你也可能被要求去爬爬論壇的舊文。事實上,有人甚至可能熱心地為你提供以前解決此問題的討論串。但不要依賴這種關照,提問前應該先搜索一下舊文。


通常,用這兩句之一回答你的人會給你一份包含你需要內容的手冊或者一個網址,而且他們打這些字的時候也正在讀著。這些答覆意味著回答者認為



  • 你需要的資訊非常容易獲得
     * 你自己去搜尋這些資訊比灌給你能讓你學到更多


你不應該因此不爽;依照黑客的標準,他已經表示了對你一定程度的關注,而沒有對你的要求視而不見。你應該對他祖母般的慈祥表示感謝。


如果還是搞不懂


如果你看不懂回應,別立刻要求對方解釋。像你以前試著自己解決問題時那樣(利用手冊,FAQ,網路,身邊的高手),先試著去搞懂他的回應。如果你真的需要對方解釋,記得表現出你已經從中學到了點什麼。


比方說,如果我回答你:看來似乎是 zentry 卡住了;你應該先清除它。,然後,這是一個很糟的後續問題回應:zentry是什麼? 的問法應該是這樣:哦~~~我看過說明了但是只有 -z 和 -p 兩個參數中提到了 zentries,而且還都沒有清楚的解釋如何清除它。你是指這兩個中的哪一個嗎?還是我看漏了什麼?


處理無禮的回應




Read Next page

Report Page