提問的智慧:解鎖你升職加薪的密碼
推薦一個原創(chuàng)技術號-非科班大廠碼農, 號主是機械專業(yè)轉行進入騰訊的后端程序員!
學會如何提問是一項極其重要的能力,其重要性遠比掌握幾門編程語言更重要,雖然這項能力應該在幼兒園、小學時期就逐漸掌握???♂?
本指南英文版版權為 Eric S. Raymond, Rick Moen 所有。github地址貼到最后的原文鏈接處,有想閱讀原文的同學可以點開看看
簡介
在黑客的世界里,當你拋出一個技術問題時,最終是否能得到有用的回答,往往取決于你所提問和追問的方式。本指南將教你如何正確的提問以獲得你滿意的答案。
我們不諱言我們對那些不愿思考、或者在發(fā)問前不做他們該做的事的人的蔑視。那些人是時間殺手 —— 他們只想索取,從不付出,消耗我們可用在更有趣的問題或更值得回答的人身上的時間。我們稱這樣的人為 失敗者(擼瑟) 。
我們(在很大程度上)是自愿的,從繁忙的生活中抽出時間來解答疑惑,而且時常被提問淹沒。所以我們無情的濾掉一些話題,特別是拋棄那些看起來像失敗者的家伙,以便更高效的利用時間來回答 贏家(winner) 的問題。
如果你厭惡我們的態(tài)度,高高在上,或過于傲慢,不妨也設身處地想想。我們并沒有要求你向我們屈服 —— 事實上,我們大多數(shù)人非常樂意與你平等地交流,只要你付出小小努力來滿足基本要求,我們就會歡迎你加入我們的文化。但讓我們幫助那些不愿意幫助自己的人是沒有效率的。無知沒有關系,但裝白癡就是不行。
所以,你不必在技術上很在行才能吸引我們的注意,但你必須表現(xiàn)出能引導你變得在行的特質 -- 機敏、有想法、善于觀察、樂于主動參與解決問題。如果你做不到這些使你與眾不同的事情,我們建議你花點錢找家商業(yè)公司簽個技術支持服務合同,而不是要求黑客個人無償?shù)貛椭恪?/span>
如果你決定向我們求助,當然你也不希望被視為失敗者,更不愿成為失敗者中的一員。能立刻得到快速并有效答案的最好方法,就是像贏家那樣提問 -- 聰明、自信、有解決問題的思路,只是偶爾在特定的問題上需要獲得一點幫助。
在提問之前
在你準備要通過電子郵件、新聞群組或者聊天室(小孩子添加:或者微信群)提出技術問題前,請先做到以下事情:
- 嘗試在你準備提問的論壇的舊文章中搜索答案。
- 嘗試上網(wǎng)搜索以找到答案。
- 嘗試閱讀手冊以找到答案。
- 嘗試閱讀常見問題文件(FAQ)以找到答案。
- 嘗試自己檢查或試驗以找到答案。
- 向你身邊的強者朋友打聽以找到答案。
-
如果你是程序開發(fā)者,請嘗試閱讀源代碼以找到答案。
當你提出問題的時候,請先表明你已經做了上述的努力;這將有助于樹立你并不是一個不勞而獲且浪費別人的時間的提問者。如果你能一并表達在做了上述努力的過程中所學到的東西會更好,因為我們更樂于回答那些表現(xiàn)出能從答案中學習的人的問題。
運用某些策略,比如先用 Google 搜索你所遇到的各種錯誤信息(既搜索 Google 論壇,也搜索網(wǎng)頁),這樣很可能直接就找到了能解決問題的文件或郵件列表線索。即使沒有結果,提問時加上一句 我在 Google 中搜過下列句子但沒有找到什么有用的東西 也是件好事,即使它只是表明了搜索引擎不能提供哪些幫助。這么做(加上搜索過的字串)也讓遇到相似問題的其他人能被搜索引擎引導到你的提問來。
別著急,不要指望幾秒鐘的 Google 搜索就能解決一個復雜的問題。在向專家求助之前,再閱讀一下常見問題文件(FAQ)、放輕松、坐舒服一些,再花點時間思考一下這個問題。相信我們,他們能從你的提問看出你做了多少閱讀與思考,如果你是有備而來,將更有可能得到解答。不要將所有問題一股腦拋出,只因你的第一次搜索沒有找到答案(或者找到太多答案)。
準備好你的問題,再將問題仔細的思考過一遍,因為草率的發(fā)問只能得到草率的回答,或者根本得不到任何答案。越是能表現(xiàn)出在尋求幫助前你為解決問題所付出的努力,你越有可能得到實質性的幫助。
小心別問錯了問題。如果你的問題基于錯誤的假設,某個普通黑客(J. Random Hacker)多半會一邊在心里想著 蠢問題… , 一邊用無意義的字面解釋來答復你,希望著你會從問題的回答(而非你想得到的答案)中汲取教訓。
絕不要自以為夠格得到答案,你沒有;你并沒有。畢竟你沒有為這種服務支付任何報酬。你將會是自己去掙到一個答案,靠提出有內涵的、有趣的、有思維激勵作用的問題 —— 一個有潛力能貢獻社區(qū)經驗的問題,而不僅僅是被動的從他人處索取知識。
另一方面,表明你愿意在找答案的過程中做點什么是一個非常好的開端。 誰能給點提示? 、 我的這個例子里缺了什么? 以及 我應該檢查什么地方 比 請把我需要的確切的過程貼出來 更容易得到答復。因為你表現(xiàn)出只要有人能指個正確方向,你就有完成它的能力和決心。
當你提問時
Stack Over flow
搜索,然后 在 Stack Exchange 問。
近年來,Stack Exchange community 社區(qū)已經成為回答技術及其他問題的主要渠道,尤其是那些開放源碼的項目。
因為 Google 索引是即時的,在看 Stack Exchange 之前先在 Google 搜索。有很高的機率某人已經問了一個類似的問題,而且 Stack Exchange 網(wǎng)站們往往會是搜索結果中最前面幾個。如果你在 Google 上沒有找到任何答案,你再到特定相關主題的網(wǎng)站去找。用標簽(Tag)搜索能讓你更縮小你的搜索結果。
Stack Exchange 已經成長到超過一百個網(wǎng)站,以下是最常用的幾個站:
- Super User 是問一些通用的電腦問題,如果你的問題跟代碼或是寫程序無關,只是一些網(wǎng)絡連線之類的,請到這里。
- Stack Overflow 是問寫程序有關的問題。
- Server Fault 是問服務器和網(wǎng)管相關的問題。
使用有意義且描述明確的標題
在郵件列表、新聞群組或論壇中,大約 50 字以內的標題是抓住資深專家注意力的好機會。別用喋喋不休的 幫幫忙 、 跪求 、 急 (更別說 救命啊?。。?! 這樣讓人反感的話,用這種標題會被條件反射式地忽略)來浪費這個機會。不要妄想用你的痛苦程度來打動我們,而應該是在這點空間中使用極簡單扼要的描述方式來提出問題。
一個好標題范例是 目標 —— 差異 式的描述,許多技術支持組織就是這樣做的。在 目標 部分指出是哪一個或哪一組東西有問題,在 差異 部分則描述與期望的行為不一致的地方。
蠢問題:救命??!我的筆記本電腦不能正常顯示了!
聰明問題:X.org 6.8.1 的鼠標光標會變形,某牌顯卡 MV1005 芯片組。
編寫更聰明問題:X.org 6.8.1 的鼠標光標,在某牌顯卡 MV1005 芯片組環(huán)境下 - 會變形。
目標 —— 差異 式描述的過程有助于你組織對問題的細致思考。是什么被影響了?僅僅是鼠標光標或者還有其它圖形?只在 X.org 的 X 版中出現(xiàn)?或只是出現(xiàn)在 6.8.1 版中?是針對某牌顯卡芯片組?或者只是其中的 MV1005 型號?一個黑客只需瞄一眼就能夠立即明白你的環(huán)境和你遇到的問題。
用清晰、準確并語法正確的語句
我們從經驗中發(fā)現(xiàn),粗心的提問者通常也會粗心的寫程序與思考(我敢打包票)?;卮鸫中拇笠庹叩膯栴}很不值得,我們寧愿把時間耗在別處。
正確的拼寫、標點符號和大小寫是很重要的。一般來說,如果你覺得這樣做很麻煩,不想在乎這些,那我們也覺得麻煩,不想在乎你的提問?;c額外的精力斟酌一下字句,用不著太僵硬與正式 —— 事實上,黑客文化很看重能準確地使用非正式、俚語和幽默的語句。但它必須很準確,而且有跡象表明你是在思考和關注問題。
更白話的說,如果你寫得像是個半文盲[譯注:小白],那多半得不到理睬。也不要使用即時通信中的簡寫或火星文,如將 的 簡化為 d 會使你看起來像一個為了少打幾個鍵而省字的小白。更糟的是,如果像個小孩似地鬼畫符那絕對是在找死,可以肯定沒人會理你(或者最多是給你一大堆指責與挖苦)。
精確的描述問題并言之有物
- 仔細、清楚地描述你的問題或 Bug 的癥狀。
- 描述問題發(fā)生的環(huán)境(機器配置、操作系統(tǒng)、應用程序、以及相關的信息),提供經銷商的發(fā)行版和版本號(如:
Fedora Core 4、Slackware 9.1等)。 - 描述在提問前你是怎樣去研究和理解這個問題的。
- 描述在提問前為確定問題而采取的診斷步驟。
- 描述最近做過什么可能相關的硬件或軟件變更。
-
盡可能的提供一個可以
重現(xiàn)這個問題的可控環(huán)境的方法。
盡量去揣測一個黑客會怎樣反問你,在你提問之前預先將黑客們可能遇到的問題回答一遍。
以上幾點中,當你報告的是你認為可能在代碼中的問題時,給黑客一個可以重現(xiàn)你的問題的環(huán)境尤其重要。當你這么做時,你得到有效的回答的機會和速度都會大大的提升。
Simon Tatham 寫過一篇名為《如何有效的報告 Bug》的出色文章。強力推薦你也讀一讀。話不在多而在精
你需要提供精確有內容的信息。這并不是要求你簡單的把成堆的出錯代碼或者資料完全轉錄到你的提問中。如果你有龐大而復雜的測試樣例能重現(xiàn)程序掛掉的情境,盡量將它剪裁得越小越好。
這樣做的用處至少有三點。第一,表現(xiàn)出你為簡化問題付出了努力,這可以使你得到回答的機會增加;第二,簡化問題使你更有可能得到有用的答案;第三,在精煉你的 bug 報告的過程中,你很可能就自己找到了解決方法或權宜之計。別動輒找到bug
當你在使用軟件中遇到問題,除非你非常、非常的有根據(jù),不要動輒聲稱找到了 Bug。提示:除非你能提供解決問題的源代碼補丁,或者提供回歸測試來表明前一版本中行為不正確,否則你都多半不夠完全確信。這同樣適用在網(wǎng)頁和文件,如果你(聲稱)發(fā)現(xiàn)了文件的 Bug ,你應該能提供相應位置的修正或替代文件。
請記得,還有許多其它使用者沒遇到你發(fā)現(xiàn)的問題,否則你在閱讀文件或搜索網(wǎng)頁時就應該發(fā)現(xiàn)了(你在抱怨前已經做了這些,是吧?)。這也意味著很有可能是你弄錯了而不是軟件本身有問題。
編寫軟件的人總是非常辛苦地使它盡可能完美。如果你聲稱找到了 Bug,也就是在質疑他們的能力,即使你是對的,也有可能會冒犯到其中某部分人。當你在標題中嚷嚷著有 Bug 時,這尤其嚴重。
低聲下氣不能代替你的功課
有些人明白他們不該粗魯或傲慢的提問并要求得到答復,但他們選擇另一個極端 —— 低聲下氣: 我知道我只是個可悲的新手,一個擼瑟,但... 。這既使人困擾,也沒有用,尤其是伴隨著與實際問題含糊不清的描述時更令人反感。
別用原始靈長類動物的把戲來浪費你我的時間。取而代之的是,盡可能清楚地描述背景條件和你的問題情況。這比低聲下氣更好地定位了你的位置。
有時網(wǎng)頁論壇會設有專為新手提問的版面,如果你真的認為遇到了初學者的問題,到那去就是了,但一樣別那么低聲下氣。描述問題癥狀而非你的猜測
告訴黑客們你認為問題是怎樣造成的并沒什么幫助。(如果你的推斷如此有效,還用向別人求助嗎?),因此要確信你原原本本告訴了他們問題的癥狀,而不是你的解釋和理論;讓黑客們來推測和診斷。如果你認為陳述自己的猜測很重要,清楚地說明這只是你的猜測,并描述為什么它們不起作用。
蠢問題
我在編譯內核時接連遇到 SIG11 錯誤, 我懷疑某條飛線搭在主板的走線上了,這種情況應該怎樣檢查最好?
聰明問題
由于以上這點似乎讓許多人覺得難以配合,這里有句話可以提醒你:我的組裝電腦是 FIC-PA2007 主機板搭載 AMD K6/233 CPU(威盛 Apollo VP2 芯片組), 256MB Corsair PC133 SDRAM 內存,在編譯內核時,從開機 20 分鐘以后就頻頻產生 SIG11 錯誤, 但是在頭 20 分鐘內從沒發(fā)生過相同的問題。重新啟動也沒有用,但是關機一晚上就又能工作 20 分鐘。所有內存都換過了,沒有效果。相關部分的標準編譯記錄如下…。
所有的診斷專家都來自密蘇里州。 美國國務院的官方座右銘則是: 讓我看看 (出自國會議員 Willard D. Vandiver 在 1899 年時的講話: 我來自一個出產玉米,棉花,牛蒡和民主黨人的國家,滔滔雄辯既不能說服我,也不會讓我滿意。我來自密蘇里州,你必須讓我看看。 ) 針對診斷者而言,這并不是一種懷疑,而只是一種真實而有用的需求,以便讓他們看到的是與你看到的原始證據(jù)盡可能一致的東西,而不是你的猜測與歸納的結論。所以,大方的展示給我們看吧!
按發(fā)生時間先后列出問題癥狀
問題發(fā)生前的一系列操作,往往就是對找出問題最有幫助的線索。因此,你的說明里應該包含你的操作步驟,以及機器和軟件的反應,直到問題發(fā)生。在命令行處理的情況下,提供一段操作記錄(例如運行腳本工具所生成的),并引用相關的若干行(如 20 行)記錄會非常有幫助。
如果掛掉的程序有診斷選項(如 -v 的詳述開關),試著選擇這些能在記錄中增加調試信息的選項。記住, 多 不等于 好 。試著選取適當?shù)恼{試級別以便提供有用的信息而不是讓讀者淹沒在垃圾中。
描述目標而不是過程
如果你想弄清楚如何做某事(而不是報告一個 Bug),在開頭就描述你的目標,然后才陳述重現(xiàn)你所卡住的特定步驟。
經常尋求技術幫助的人在心中有個更高層次的目標,而他們在自以為能達到目標的特定道路上被卡住了,然后跑來問該怎么走,但沒有意識到這條路本身就有問題。結果要費很大的勁才能搞定。
蠢問題
我怎樣才能從某繪圖程序的顏色選擇器中取得十六進制的的 RGB 值?
聰明問題
第二種提問法比較聰明,你可能得到像是我正試著用替換一幅圖片的色碼(color table)成自己選定的色碼,我現(xiàn)在知道的唯一方法是編輯每個色碼區(qū)塊(table slot), 但卻無法從某繪圖程序的顏色選擇器取得十六進制的的 RGB 值。
建議采用另一個更合適的工具 的回復。
清楚明確的表達你的問題及需求
漫無邊際的提問是近乎無休無止的時間黑洞。最有可能給你有用答案的人通常也正是最忙的人(他們忙是因為要親自完成大部分工作)。這樣的人對無節(jié)制的時間黑洞相當厭惡,所以他們也傾向于厭惡那些漫無邊際的提問。
如果你明確表述需要回答者做什么(如提供指點、發(fā)送一段代碼、檢查你的補丁、或是其他等等),就最有可能得到有用的答案。因為這會定出一個時間和精力的上限,便于回答者能集中精力來幫你。這么做很棒。
要理解專家們所處的世界,請把專業(yè)技能想像為充裕的資源,而回復的時間則是稀缺的資源。你要求他們奉獻的時間越少,你越有可能從真正專業(yè)而且很忙的專家那里得到解答。
所以,界定一下你的問題,使專家花在辨識你的問題和回答所需要付出的時間減到最少,這技巧對你有用答案相當有幫助 —— 但這技巧通常和簡化問題有所區(qū)別。因此,問 我想更好的理解 X,可否指點一下哪有好一點說明? 通常比問 你能解釋一下 X 嗎? 更好。如果你的代碼不能運作,通常請別人看看哪里有問題,比要求別人替你改正要明智得多。
詢問有關代碼的問題時
別要求他人幫你調試有問題的代碼,不提示一下應該從何入手。張貼幾百行的代碼,然后說一聲: 它不能工作 會讓你完全被忽略。只貼幾十行代碼,然后說一句: 在第七行以后,我期待它顯示 <x>,但實際出現(xiàn)的是 <y> 比較有可能讓你得到回應。
最有效描述程序問題的方法是提供最精簡的 Bug 展示測試用例(bug-demonstrating test case)。什么是最精簡的測試用例?那是問題的縮影;一小個程序片段能剛好展示出程序的異常行為,而不包含其他令人分散注意力的內容。怎么制作最精簡的測試用例?如果你知道哪一行或哪一段代碼會造成異常的行為,復制下來并加入足夠重現(xiàn)這個狀況的代碼(例如,足以讓這段代碼能被編譯/直譯/被應用程序處理)。如果你無法將問題縮減到一個特定區(qū)塊,就復制一份代碼并移除不影響產生問題行為的部分??傊?,測試用例越小越好(查看話不在多而在精一節(jié))。
一般而言,要得到一段相當精簡的測試用例并不太容易,但永遠先嘗試這樣做的是種好習慣。這種方式可以幫助你了解如何自行解決這個問題 —— 而且即使你的嘗試不成功,黑客們也會看到你在嘗試取得答案的過程中付出了努力,這可以讓他們更愿意與你合作。
如果你只是想讓別人幫忙審查(Review)一下代碼,在信的開頭就要說出來,并且一定要提到你認為哪一部分特別需要關注以及為什么。別把自己家庭作業(yè)的問題貼上來
黑客們很擅長分辨哪些問題是家庭作業(yè)式的問題;因為我們中的大多數(shù)都曾自己解決這類問題。同樣,這些問題得由你來搞定,你會從中學到東西。你可以要求給點提示,但別要求得到完整的解決方案。
如果你懷疑自己碰到了一個家庭作業(yè)式的問題,但仍然無法解決,試試在使用者群組,論壇或(最后一招)在項目的使用者郵件列表或論壇中提問。盡管黑客們會看出來,但一些有經驗的使用者也許仍會給你一些提示。
去掉無意義的提問句
避免用無意義的話結束提問,例如 有人能幫我嗎? 或者 這有答案嗎? 。
首先:如果你對問題的描述不是很好,這樣問更是畫蛇添足。
其次:由于這樣問是畫蛇添足,黑客們會很厭煩你 —— 而且通常會用邏輯上正確,但毫無意義的回答來表示他們的蔑視, 例如: 沒錯,有人能幫你 或者 不,沒答案 。
是或否 、 對或錯 、 有或沒有 類型的問句,除非你想得到是或否類型的回答。
即使你很急也不要在標題寫緊急
這是你的問題,不是我們的。宣稱緊急 極有可能事與愿違:大多數(shù)黑客會直接刪除無禮和自私地企圖即時引起關注的問題。更嚴重的是, 緊急 這個字(或是其他企圖引起關注的標題)通常會被垃圾信過濾器過濾掉 —— 你希望能看到你問題的人可能永遠也看不到。
禮多人不怪。而且有時還很有幫助
彬彬有禮,多用 請 和 謝謝您的關注 ,或 謝謝你的關照 。讓大家都知道你對他們花時間免費提供幫助心存感激。
坦白說,這一點并沒有比清晰、正確、精準并合法語法和避免使用專用格式重要(也不能取而代之)。黑客們一般寧可讀有點唐突但技術上鮮明的 Bug 報告,而不是那種有禮但含糊的報告。(如果這點讓你不解,記住我們是按問題能教給我們什么來評價問題的價值的)
然而,如果你有一串的問題待解決,客氣一點肯定會增加你得到有用回應的機會。
(我們注意到,自從本指南發(fā)布后,從資深黑客那里得到的唯一嚴重缺陷反饋,就是對預先道謝這一條。一些黑客覺得 先謝了 意味著事后就不用再感謝任何人的暗示。我們的建議是要么先說 先謝了 ,然后事后再對回復者表示感謝,或者換種方式表達感激,譬如用 謝謝你的關注 或 謝謝你的關照 。)
問題解決后,加個簡短的補充說明
問題解決后,向所有幫助過你的人發(fā)個說明,讓他們知道問題是怎樣解決的,并再一次向他們表示感謝。如果問題在新聞組或者郵件列表中引起了廣泛關注,應該在那里貼一個說明比較恰當。
最理想的方式是向最初提問的話題回復此消息,并在標題中包含 已修正 , 已解決 或其它同等含義的明顯標記。在人來人往的郵件列表里,一個看見討論串 問題 X 和 問題 X - 已解決 的潛在回復者就明白不用再浪費時間了(除非他個人覺得 問題 X 的有趣),因此可以利用此時間去解決其它問題。
補充說明不必很長或是很深入;簡單的一句 你好,原來是網(wǎng)線出了問題!謝謝大家 – Bill 比什么也不說要來的好。事實上,除非結論真的很有技術含量,否則簡短可愛的小結比長篇大論更好。說明問題是怎樣解決的,但大可不必將解決問題的過程復述一遍。
如何解讀答案
RTFM和STFW:如何知道你已經完全搞砸了
有一個古老而神圣的傳統(tǒng):如果你收到 RTFM (Read The Fucking Manual) 的回應,回答者認為你應該去讀他媽的手冊。當然,基本上他是對的,你應該去讀一讀。
RTFM 有一個年輕的親戚。如果你收到 STFW(Search The Fucking Web) 的回應,回答者認為你應該到他媽的網(wǎng)上搜索。那人多半也是對的,去搜索一下吧。(更溫和一點的說法是 Google 是你的朋友!)
在論壇,你也可能被要求去爬爬論壇的舊文。事實上,有人甚至可能熱心地為你提供以前解決此問題的討論串。但不要依賴這種關照,提問前應該先搜索一下舊文。
通常,用這兩句之一回答你的人會給你一份包含你需要內容的手冊或者一個網(wǎng)址,而且他們打這些字的時候也正在讀著。這些答復意味著回答者認為
-
你需要的信息非常容易獲得;
-
你自己去搜索這些信息比灌給你,能讓你學到更多。
如果還是搞不懂
如果你看不懂回應,別立刻要求對方解釋。像你以前試著自己解決問題時那樣(利用手冊,F(xiàn)AQ,網(wǎng)絡,身邊的高手),先試著去搞懂他的回應。如果你真的需要對方解釋,記得表現(xiàn)出你已經從中學到了點什么。
比方說,如果我回答你: 看來似乎是 zentry 卡住了;你應該先清除它。 ,然后,這是一個很糟的后續(xù)問題回應: zentry 是什么? 好的問法應該是這樣: 哦~~~我看過說明了但是只有 -z 和 -p 兩個參數(shù)中提到了 zentries,而且還都沒有清楚的解釋如何清除它。你是指這兩個中的哪一個嗎?還是我看漏了什么?
處理無禮的 回應
很多黑客圈子中看似無禮的行為并不是存心冒犯。相反,它是直接了當,一針見血式的交流風格,這種風格更注重解決問題,而不是使人感覺舒服而卻模模糊糊。
如果你覺得被冒犯了,試著平靜地反應。如果有人真的做了出格的事,郵件列表、新聞群組或論壇中的前輩多半會招呼他。如果這沒有發(fā)生而你卻發(fā)火了,那么你發(fā)火對象的言語可能在黑客社區(qū)中看起來是正常的,而你將被視為有錯的一方,這將傷害到你獲取信息或幫助的機會。
另一方面,你偶爾真的會碰到無禮和無聊的言行。與上述相反,對真正的冒犯者狠狠地打擊,用犀利的語言將其駁得體無完膚都是可以接受的。然而,在行事之前一定要非常非常的有根據(jù)。糾正無禮的言論與開始一場毫無意義的口水戰(zhàn)僅一線之隔,黑客們自己莽撞地越線的情況并不鮮見。如果你是新手或外人,避開這種莽撞的機會并不高。如果你想得到的是信息而不是消磨時光,這時最好不要把手放在鍵盤上以免冒險。
如何避免扮演失敗者
在黑客社區(qū)的論壇中有那么幾次你可能會搞砸 —— 以本指南所描述到的或類似的方式。而你會在公開場合中被告知你是如何搞砸的,也許攻擊的言語中還會帶點夾七夾八的顏色。
這種事發(fā)生以后,你能做的最糟糕的事莫過于哀嚎你的遭遇、宣稱被口頭攻擊、要求道歉、高聲尖叫、憋悶氣、威脅訴諸法律、向其雇主報怨、忘了關馬桶蓋等等。相反地,你該這么做:
熬過去,這很正常。事實上,它是有益健康且合理的。
社區(qū)的標準不會自行維持,它們是通過參與者積極而公開地執(zhí)行來維持的。不要哭嚎所有的批評都應該通過私下的郵件傳送,它不是這樣運作的。當有人評論你的一個說法有誤或者提出不同看法時,堅持聲稱受到個人攻擊也毫無益處,這些都是失敗者的態(tài)度。
不該問的問題
以下是幾個經典蠢問題,以及黑客沒回答時心中所想的:
問題:我能在哪找到 X 程序或 X 資源?
回答:就在我找到它的地方啊,白癡 —— 搜索引擎的那一頭。天哪!難道還有人不會用 Google 嗎?
回答:如果你想解決的是 Y ,提問時別給出可能并不恰當?shù)姆椒?。這種問題說明提問者不但對 X 完全無知,也對 Y 要解決的問題糊涂,還被特定形勢禁錮了思維。最好忽略這種人,等他們把問題搞清楚了再說。問題:我怎樣用 X 做 Y?
回答:如果你有足夠的智慧提這個問題,你也該有足夠的智慧去 RTFM,然后自己去找出來。問題:如何設定我的 shell 提示??
回答:試試看就知道了。如果你試過,你既知道了答案,就不用浪費我的時間了。問題:我可以用 Bass-o-matic 文件轉換工具將 AcmeCorp 檔案轉換為 TeX 格式嗎?
問題:我的{程序/設定/SQL 語句}不工作
回答:這不算是問題吧,我對要我問你二十個問題才找得出你真正問題的問題沒興趣 —— 我有更有意思的事要做呢。在看到這類問題的時候,我的反應通常不外如下三種
-
你還有什么要補充的嗎?
-
真糟糕,希望你能搞定。
- 這關我有什么屁事?
問題:我的 Windows 電腦有問題,你能幫我嗎?
回答:能啊,扔掉微軟的垃圾,換個像 Linux 或 BSD 的開源操作系統(tǒng)吧。
注意:如果程序有官方版 Windows 或者與 Windows 有互動(如 Samba),你可以問與 Windows 相關的問題, 只是別對問題是由 Windows 操作系統(tǒng)而不是程序本身造成的回復感到驚訝, 因為 Windows 一般來說實在太爛,這種說法通常都是對的。回答:你完全有可能是第一個注意到被成千上萬用戶反復使用的系統(tǒng)調用與函數(shù)庫檔案有明顯缺陷的人,更有可能的是你完全沒有根據(jù)。不同凡響的說法需要不同凡響的證據(jù),當你這樣聲稱時,你必須有清楚而詳盡的缺陷說明文件作后盾。問題:我的程序不會動了,我認為系統(tǒng)工具 X 有問題
問題:我在安裝 Linux(或者 X )時有問題,你能幫我嗎?
回答:不能,我只有親自在你的電腦上動手才能找到毛病。還是去找你當?shù)氐?Linux 使用群組者尋求實際的指導吧(你能在這兒找到使用者群組的清單)。
注意:如果安裝問題與某 Linux 的發(fā)行版有關,在它的郵件列表、論壇或本地使用者群組中提問也許是恰當?shù)摹4藭r,應描述問題的準確細節(jié)。在此之前,先用 Linux 和所有被懷疑的硬件作關鍵詞仔細搜索。
回答:想要這樣做,說明了你是個卑鄙小人;想找個黑客幫你,說明你是個白癡!問題:我怎么才能破解 root 帳號/竊取 OP 特權/讀別人的郵件呢?
好問題與蠢問題
最后,我將透過舉一些例子,來說明怎樣聰明的提問;同一個問題的兩種問法被放在一起,一種是愚蠢的,另一種才是明智的。
蠢問題:
我可以在哪兒找到關于 Foonly Flurbamatic 的資料?
這種問法無非想得到 STFW 這樣的回答。
聰明問題:
我用 Google 搜索過 "Foonly Flurbamatic 2600",但是沒找到有用的結果。誰知道上哪兒去找對這種設備編程的資料?
這個問題已經 STFW 過了,看起來他真的遇到了麻煩。
蠢問題:
我從 foo 項目找來的源碼沒法編譯。它怎么這么爛?
他覺得都是別人的錯,這個傲慢自大的提問者。
聰明問題:
foo 項目代碼在 Nulix 6.2 版下無法編譯通過。我讀過了 FAQ,但里面沒有提到跟 Nulix 有關的問題。這是我編譯過程的記錄,我有什么做的不對的地方嗎?
提問者已經指明了環(huán)境,也讀過了 FAQ,還列出了錯誤,并且他沒有把問題的責任推到別人頭上,他的問題值得被關注。
蠢問題:
我的主機板有問題了,誰來幫我?
某黑客對這類問題的回答通常是: 好的,還要幫你拍拍背和換尿布嗎? ,然后按下刪除鍵。
聰明問題:
我在 S2464 主機板上試過了 X 、 Y 和 Z ,但沒什么作用,我又試了 A 、 B 和 C 。請注意當我嘗試 C 時的奇怪現(xiàn)象。顯然 florbish 正在 grommicking,但結果出人意料。通常在 Athlon MP 主機板上引起 grommicking 的原因是什么?有誰知道接下來我該做些什么測試才能找出問題?
這個家伙,從另一個角度來看,值得去回答他。他表現(xiàn)出了解決問題的能力,而不是坐等天上掉答案。
在最后一個問題中,注意 告訴我答案 和 給我啟示,指出我還應該做什么診斷工作 之間微妙而又重要的區(qū)別。
事實上,后一個問題源自于 2001 年 8 月在 Linux 內核郵件列表(lkml)上的一個真實的提問。我(Eric)就是那個提出問題的人。我在 Tyan S2464 主板上觀察到了這種無法解釋的鎖定現(xiàn)象,列表成員們提供了解決這一問題的重要信息。
通過我的提問方法,我給了別人可以咀嚼玩味的東西;我設法讓人們很容易參與并且被吸引進來。我顯示了自己具備和他們同等的能力,并邀請他們與我共同探討。通過告訴他們我所走過的彎路,以避免他們再浪費時間,我也表明了對他們寶貴時間的尊重。
事后,當我向每個人表示感謝,并且贊賞這次良好的討論經歷的時候, 一個 Linux 內核郵件列表的成員表示,他覺得我的問題得到解決并非由于我是這個列表中的名人,而是因為我用了正確的方式來提問。
如果得不到回答
如果仍得不到回答,請不要以為我們覺得無法幫助你。有時只是看到你問題的人不知道答案罷了。沒有回應不代表你被忽視,雖然不可否認這種差別很難區(qū)分。
總的來說,簡單的重復張貼問題是個很糟的點子。這將被視為無意義的喧鬧。有點耐心,知道你問題答案的人可能生活在不同的時區(qū),可能正在睡覺,也有可能你的問題一開始就沒有組織好。
你可以通過其他渠道獲得幫助,這些渠道通常更適合初學者的需要。
有許多網(wǎng)上的以及本地的使用者群組,由熱情的軟件愛好者(即使他們可能從沒親自寫過任何軟件)組成。通常人們組建這樣的團體來互相幫助并幫助新手。
另外,你可以向很多商業(yè)公司尋求幫助,不論公司大還是小。別為要付費才能獲得幫助而感到沮喪!畢竟,假使你的汽車發(fā)動機汽缸密封圈爆掉了 —— 完全可能如此 —— 你還得把它送到修車鋪,并且為維修付費。就算軟件沒花費你一分錢,你也不能強求技術支持總是免費的。
對像是 Linux 這種大眾化的軟件,每個開發(fā)者至少會對應到上萬名使用者。根本不可能由一個人來處理來自上萬名使用者的求助電話。要知道,即使你要為這些協(xié)助付費,和你所購買的同類軟件相比,你所付出的也是微不足道的(通常封閉源代碼軟件的技術支持費用比開源軟件的要高得多,且內容也沒那么豐富)。
如何更好地回答問題
問題
態(tài)度和善一點。問題帶來的壓力常使人顯得無禮或愚蠢,其實并不是這樣。
對初犯者私下回復。對那些坦誠犯錯之人沒有必要當眾羞辱,一個真正的新手也許連怎么搜索或在哪找常見問題都不知道。
如果你不確定,一定要說出來!一個聽起來權威的錯誤回復比沒有還要糟,別因為聽起來像個專家很好玩,就給別人亂指路。要謙虛和誠實,給提問者與同行都樹個好榜樣。
如果幫不了忙,也別妨礙他。不要在實際步驟上開玩笑,那樣也許會毀了使用者的設置 —— 有些可憐的呆瓜會把它當成真的指令。
試探性的反問以引出更多的細節(jié)。如果你做得好,提問者可以學到點東西 —— 你也可以。試試將蠢問題轉變成好問題,別忘了我們都曾是新手。
盡管對那些懶蟲抱怨一聲 RTFM 是正當?shù)模苤赋鑫募奈恢茫词怪皇墙ㄗh個 Google 搜索關鍵詞)會更好。
如果你決定回答,就請給出好的答案。當別人正在用錯誤的工具或方法時別建議笨拙的權宜之計(wordaround),應推薦更好的工具,重新界定問題。
正面的回答問題!如果這個提問者已經很深入的研究而且也表明已經試過 X 、 Y 、 Z 、 A 、 B 、 C 但沒得到結果,回答 試試看 A 或是 B 或者 試試 X 、 Y 、 Z 、 A 、 B 、 C 并附上一個鏈接一點用都沒有。
幫助你的社區(qū)從問題中學習。當回復一個好問題時,問問自己 如何修改相關文件或常見問題文件以免再次解答同樣的問題? ,接著再向文件維護者發(fā)一份補丁。
如果你是在研究一番后才做出的回答,展現(xiàn)你的技巧而不是直接端出結果。畢竟 授人以魚不如授人以漁 。
原文鏈接:http://www.catb.org/~esr/faqs/smart-questions.html
推薦閱讀:
專注服務器后臺技術棧知識總結分享
歡迎關注交流共同進步 也可掃碼添加個人微信交流技術,職場發(fā)展~ 添加時請注明公司名(或學校名)+方向!!
碼農有道,和您聊技術,和您聊職場,和您聊互聯(lián)網(wǎng)那些事!
