【乾貨】如何有效地提問

原文鏈接
十分有用的文章,希望每一個程序員都能看一看,學習下提問的智慧。歡迎大家留言討論。

本文中的“黑客”是指優秀的程序員。

黑客世界裏,你提問的方法,挖出答案的難度,決定了你能得到怎樣的提問。

提問須知:

  1. 黑客們只偏愛艱鉅的任務,或者能激發他們思維的好問題
  2. 黑客蔑視不願思考,或是在發問前不去完成他們應該做的事的人【失敗者/lusers
  3. 回答問題的人,大多屬於志願者,所以請去掉自以爲有資格得到答案的想法
  4. 既然沒有爲別人回答問題的服務支付任何報酬,那你需要自己去“掙”回一個答案
  5. 如何不能接受這種“歧視”,要麼放棄當失敗者,像一個成功者一樣提問,要麼放棄請求黑客幫助,轉向商業有償幫助
  6. 常懷感恩之心,提問的時候和得到答案的時候,都感謝,常用“請”,“謝謝”等詞
  7. 從問題的回答中汲取教訓。如果收到的是RTFMSTFW,就長點心吧
  8. 如果好好提問還是找不到答案,這不代表你被忽視,可能是看到你問題的人也不知道答案【雖然這個差別很難分辨】

提問之前:

  1. 通讀手冊,嘗試去找到答案,或者確定問題
  2. 在FAQ中尋找答案(一份維護得好的FAQ應該包羅萬象)
  3. 利用搜索工具(大事不決問谷歌,小事不決問百度)
  4. 向身邊精通此道的人請教(同事,朋友)

如何提問:

1. 謹慎選擇提問的場合

  • 注意主題相關性
    避免在風馬牛不相及的論壇提問
  • 注意難度
    避免在探討高級技巧的論壇貼出非常初級的問題;反之亦然
  • 避免重複提問
    避免在一個論壇太多不同的組重複提問

2. 用詞精確,語法正確,拼寫無誤,標點符號無誤

經驗:粗心的寫作者通常也是馬虎的思考者

如何是非母語的論壇提問,可以犯拼寫和語法上的小錯,但絕不能再思考上馬虎
【這個回答者可以搞清楚的~~~】

3. 使用含義豐富,描述精確的標題

放棄用“幫幫忙”,“救命啊”這種讓人反感的話來描述。
妄想用痛苦程度來打動黑客,是不切實際的。
用空格代替問題描述,是不理智的。

錯誤示例:救命啊!!!我的系統不能正常運行了
正確示例:ThinkPad P40 Yoga,Win10 家庭版,無法正常開機

4. 精確描述,儘可能多提供信息

儘量想象黑客會怎樣反問你,提問的時候預先給出答案
1> 謹慎精確地描述症狀
2> 提供問題發生的環境(機器配置,操作系統,應用程序等)
3> 說明你在提問前是怎麼研究和理解這個問題的
4> 說明你在提問前採取了什麼步驟去解決它
5> 如果嘗試去解決了,請列出你解決依據的出處
6> 羅列最近做過的可能有影響硬件,軟件變更或者其他操作

祥見 如何有效地報告 Bug

5. 簡化問題

提供精確有效的資訊,同時儘可能精簡裁剪你的問題
這樣的好處至少有三點:
- 表現出你爲簡化問題付出了努力,提高得到回答的可能性
- 簡化問題使得到有價值的答案的機會增加
- 在提煉bug報告中的過錯

6. 明確事實和猜測

要設法搞清什麼是事實(例如:“我在電腦旁”和“XX出現了”)什麼是推測(例如:“我想問題可能是出在……”)。

可以加上自己的猜測,但是一定要確定明確清晰的描述了問題症狀

7. 按照時間順序列出症狀

也就是重現步驟

按照時間順序,說明每一步執行了什麼操作,電腦的反應是什麼。

8. 優化問題的結構:明確表述需要得到什麼幫助

定出一個時間和精力的上限,便於回答者集中精力來幫助你。(提供建議,發送一段代碼,檢查補丁,或者是別的)

要理解專家們生活的世界,要把專業技能想像成充足的資源,而回復時間則是貧乏的資源——儘可能減少專家們解決問題需要的時間。解決你的問題需要的時間越少,越能從從忙碌的專家口中掏出答案。

“你能解釋一下xx嗎?”
優化問題的結構:“我想更好的理解xx,能給點提示嗎?”

對於問題代碼,尋求別人提示,比要求別人替你修改要明智

9. 去除無意義的疑問

別用無意義的話結束提問。例如:“有人能幫我嗎?”、“有答案嗎?”
- 如果你對問題的描述並不合適,這樣問是畫蛇添足
- 畫蛇添足會引起黑客們的厭煩——所以你收到的回答通常是邏輯正確的無意義答案,如——“沒錯,有人能幫你。”、“不,沒答案”、“你猜”

10. 表明願意在找答案的過程中做點什麼

這樣會增加你得到有效回覆的概率。因爲你表現出了只要有人指點正確的方向,你就有完成它的能力和決心。“誰能給點提示?”,“我這個例子缺了什麼?”,“我應該檢查了什麼地方?”比“請把確切的過程貼出來”更容易得到答覆

11. 保持謙遜禮貌感恩

多用“請”,“先道個謝啦”,“多謝幫忙解決”
建議提問前得到答案後都道謝~~~
請大家都知道你對他們花費時間志願提供幫助心存感激
增加得到有用答案的機會

12. 問題解決後,加以簡單說明

除非結論很有技術含量,否則補充說明不必很長或很深入

如果可以,儘量說明問題是怎麼解決的。
- 幫助他人瞭解解決方案,可能適用他人的問題
- 有助於所有提供過幫助的人從中得到問題解決的滿足感

13. 還是不懂問題答案

先按照自己解決問題是那樣(手冊,FAQ,搜索,身邊高手)去理解答案。

如果真的需要對方解釋,記得表現出你已經學習到了什麼。

例如:
回答者:“看起來似乎是zEntry被阻塞了,你應該先清除它”
提問者【糟糕回答】:“zEntry是什麼?”
提問者【聰明回答】:“哦~~~我看過幫助文檔了,但是隻有-z和-p兩個參數中提到了zEntry,而且都沒有有清楚的解釋,你是指這兩個中的哪一個嗎?還是我看漏了什麼?”


附錄

三思而後問

以下是幾個景點蠢問題,以及黑客在拒絕回答時的心中所想
Q:我能在哪找到X程式?
A:就在我能找到他們的地方啊!就在搜素引擎的第一個!!!天哪,竟然還有人不會搜索嗎?

Q:我的程式(配置、聲明)沒有用
A:這不是問題吧,我對找到你的真正問題沒興趣;
你還有什麼要補充的嗎?難道要問你二十個問題才能找出你的真正問題嗎;
真糟糕,希望你能搞定;
這跟我有什麼關係;

Q:我的win有問題,誰能幫幫我?
A:我可以啊,扔掉win,換成linux吧

Q:我在安裝Linxu/xx時有問題,有人能幫幫我?
A:並不能,我只有親自在你電腦上動手才能找到毛病

Q:我怎麼能破解root賬號 / 竊取別人的密碼 ?
A:想要這麼做,說明你是個卑鄙小人;想找黑客幫你,說明你是個白癡

好問題 VS 壞問題

舉例說明怎樣是從好的提問

壞問題:我在哪可以找到關於Foonly Flurbamatic的資料 【可能只能得到STFW的回覆】
好問題:我用谷歌搜索過Foonly Flurbamatic 2600,但是沒有有用的結果,誰知道上哪找對這種編程的資料【STFW過了,看起來是真的遇到麻煩了】

壞問題:我從FOO項目找來的源碼無法編譯。它怎麼這麼爛?【他覺得都是別人的錯,這傢伙真是傲慢無禮】
好問題:FOO代碼在Nulix 6.2版下無法編譯通過,FAQ上面沒有提到跟Nulix有關的問題。以下是我編程過程的記錄,和報錯情況,我有什麼做的不對的地方嗎?麻煩幫忙看一下,多謝啦【說明環境,也讀過FAQ,並且指明瞭錯誤,並且並無推卸責任,值得留意】

RTFM和STFW:別煩我啦

RTFM (Read The Fucking Manual)”:回答者認爲你要去讀讀手冊。當然,基本上,他是對的,你應該去讀一讀。

RTFM有一個年輕的親戚。“STFW (Search The Fucking Web)”:回答者認爲你應該去網上搜索一下。基本上,他也是對的,你就去找吧。

通常,用這兩句之一回答你的人會給你一份包含你需要內容的手冊或者一個網址,
而且他們打這些字的時候正在閱讀着。
這些答復意味著回答者認為
這些答覆意味着回答者認爲
1> 你需要的資訊非常容易獲得
2> 你自己去搜索這些資訊比灌給你能讓你學到更多

別爲這個不爽。依照黑客的標準,他沒有對你的要求視而不見,已經能大致能表現對你的關注。你應該對他祖母般的慈祥表示感謝。


Copyright (C) 2001 by Eric S. Raymond
中文版 Copyleft 2001 by D.H.Grand(nOBODY/Ginux)
英文版:http://www.tuxedo.org/~esr/faqs/smart-questions.html
感謝Eric 的耐心指點和同意,本文才得以完成並發佈,
本指南 英文版版權爲 Eric Steven Raymond 所有,
中文版版權由 D.H.Grand[nOBODY/Ginux] 所有。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章