ryanhanwu/How-To-Ask-Questions-The-Smart-Way
本文原文由知名 Hacker Eric S. Raymond 所撰寫,教你如何正確的提出技術問題並獲得你滿意的答案。
Genblaze — open-source SDK for generative multimedia pipelines
Orchestrate AI video, audio & image providers in Python with provenance built into every output.
Loading star history...
Health Score
75
Weekly Growth
+0
+0.0% this week
Contributors
50
Total contributors
Open Issues
11
Use Cases & Benefits
About How-To-Ask-Questions-The-Smart-Way
提問的智慧
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]。然而請注意,本文並非網路禮節的通用指南,而我們通常會拒絕無助於在技術論壇得到有用答案的建議。)
在提問之前
在你準備要透過電子郵件、新聞群組或者聊天室提出技術問題前,請先做到以下事情:
- 嘗試在你準備提問的論壇的舊文章中搜尋答案。
- 嘗試上網搜尋來找到答案。
- 嘗試閱讀手冊來找到答案。
- 嘗試閱讀常見問題文件(FAQ)來找到答案。
- 嘗試自己檢查或試驗來找到答案
- 向你身邊的強者朋友打聽來找到答案。
- 如果你是程式開發者,請嘗試閱讀原始碼來找到答案
當你提出問題的時候,請先表明你已經做了上述的努力;這將有助於樹立你並不是一個不勞而獲且浪費別人的時間的提問者。如果你能一併表達在做了上述努力的過程中所學到的東西會更好,因為我們更樂於回答那些表現出能從答案中學習的人的問題。
運用某些策略,比如先用 Google 搜尋你所遇到的各種錯誤訊息(既搜尋 Google論壇,也搜尋網頁),這樣很可能直接就找到了能解決問題的文件或郵件列表線索。即使沒有結果,在郵件列表或新聞組尋求幫助時加上一句 我在 Google 中搜過下列句子但沒有找到什麼有用的東西 也是件好事,即使它只是表明了搜尋引擎不能提供哪些幫助。這麼做(加上搜尋過的字串)也讓遇到相似問題的其他人 能被搜尋引擎引導到你的提問來。
別著急,不要指望幾秒鐘的 Google 搜尋就能解決一個複雜的問題。在向專家求助之前,再閱讀一下常見問題文件(FAQ)、放輕鬆、坐舒服一些,再花點時間思考一下這個問題。相信我們,他們能從你的提問看出你做了多少閱讀與思考,如果你是有備而來,將更有可能得到解答。不要將所有問題一股腦拋出,只因你的第一次搜尋沒有找到答案(或者找到太多答案)。
準備好你的問題,再將問題仔細的思考過一遍,因為草率的發問只能得到草率的回答,或者根本得不到任何答案。越是能表現出在尋求幫助前你為解決問題所付出的努力,你越有可能得到實質性的幫助。
小心別問錯了問題。如果你的問題基於錯誤的假設,某個普通駭客(J. Random Hacker)多半會一邊在心裏想著蠢問題…, 一邊用無意義的字面解釋來答覆你,希望著你會從問題的回答(而非你想得到的答案)中汲取教訓。
絕不要自以為夠格得到答案,你沒有;你並沒有。畢竟你沒有為這種服務支付任何報酬。你將會是自己去掙到一個答案,靠提出有內涵的、有趣的、有思維激勵作用的問題──一個有潛力能貢獻社群經驗的問題,而不僅僅是被動的從他人處索取知識。
另一方面,表明你願意在找答案的過程中做點什麼是一個非常好的開始。誰能給點提示?、我的這個例子裏缺了什麼?以及我應該檢查什麼地方比請把我需要的確切的過程貼出來更容易得到答覆。因為你表現出只要有人能指出一個正確方向,你就有完成它的能力和決心。
當你提問時
慎選提問的論壇
小心選擇你要提問的 場合。如果你做了下述的事情,你很可能被忽略掉或者被看作失敗者:
- 在與主題不合的論壇上貼出你的問題
- 在探討進階技術問題的論壇張貼非常初級的問題;反之亦然
- 在太多的不同新聞群組上重複轉貼同樣的問題(cross-post)
- 向既非熟人也沒有義務解決你問題的人發送私人電郵
駭客會剔除掉那些搞錯場合的問題,以保護他們溝通的管道不被無關的東西淹沒。你不會想讓這種事發生在自己身上的。
因此,第一步是找到對的論壇。再說一次,Google 和其它搜尋引擎還是你最好的朋友,用它們來找到與你遭遇到困難的軟硬體問題最相關的網站。通常在那裡都有常見問題(FAQ)、郵件列表及相關說明文件的連結。如果你的努力(包括閱讀 FAQ)都沒有結果,網站上也許還有回報臭蟲(Bug-reporting)的流程或連結,如果是這樣,連過去看看。
向陌生的人或論壇發送郵件最可能是風險最大的事情。舉例來說,別假設一個提供豐富內容的網頁的作者會想充當你的免費顧問。不要對你的問題是否會受到歡迎做太樂觀的估計──如果你不確定,那就向別處發送,或者根本別發。
在選擇論壇、新聞群組或郵件列表時,別太相信名字,先看看 FAQ 或者許可書以弄清楚你的問題是否切題。發文前先翻翻已有的話題,這樣可以讓你感受一下那裡的文化。事實上,事先在新聞組或郵件列表的歷史記錄中搜尋與你問題相關的關鍵詞是個極好的主意,也許這樣就找到答案了。即使沒有,也能幫助你歸納出更好的問題。
別像機關槍似的一次"掃射"所有的幫助管道,這就像大喊大叫一樣會使人不愉快。要一個一個地來。
搞清楚你的主題!最典型的錯誤之一是在某種致力於跨平台可移植的語言、套件或工具的論壇中提關於 Unix 或 Windows 作業系統程式設計介面的問題。如果你不明白為什麼這是大錯,最好在搞清楚這之間差異之前什麼也別問。
一般來說,在仔細挑選的公共論壇中提問,會比在私有論壇中提同樣的問題更容易得到有用的回答。有幾個理由可以支持這點,一是看潛在的回覆者有多少,二是看觀眾有多少。駭客較願意回答那些能幫助到許多人的問題。
可以理解的是,老練的駭客和一些熱門軟體的作者正在接受過多的錯發訊息。就像那根最後壓垮駱駝背的稻草一樣,你的加入也有可能使情況走向極端──已經好幾次了,一些熱門軟體的作者從自己軟體的支援中抽身出來,因為伴隨而來湧入其私人信箱的無用郵件變得無法忍受。
Stack Overflow
搜尋,然後 才在 Stack Exchange 發問。
近年來,Stack Exchange community 社群已經成為回答技術及其他問題的主要管道,尤其是那些開放原始碼的專案。
因為 Google 索引是即時的,在看 Stack Exchange 之前先在 Google 搜尋。有很高的機率某人已經問了一個類似的問題,而且 Stack Exchange 網站們往往會是搜尋結果中最前面幾個。如果你在 Google 上沒有找到任何答案,你再到特定相關主題的網站去找。用標籤(Tag)搜尋能讓你更縮小你的搜尋結果。
如果你還是找不到任何對你的問題有用的內容,請把你的問題發在與它最相關的網站上。提問的時候請善用格式化工具,尤其註意為代碼添加格式,並且添加相關的標籤(特別是編程語言、操作系統或庫/包的名稱)。當有人要求你提供更多相關信息時,請編輯你的貼子來補充它們[譯註:而不是發一個回帖或回答! ]。如果你覺得一個答案對你有幫助,點擊向上的箭頭來 為它投票;如果一個答案提供了問題的正確解決方案,點擊投票按鈕下方的對勾來將它標記為正解。
Stack Exchange 已經成長到超過一百個網站,以下是最常用的幾個站:
- Super User 是問一些通用的電腦問題,如果你的問題跟程式碼或是寫程式無關,只是一些網路連線之類的,請到這裡。
- Stack Overflow 是問寫程式有關的問題。
- Server Fault 是問伺服器和網管相關的問題。
網站和IRC論壇
在地的使用者群組(user group),或者你所用的 Linux 發行版本也許正在宣傳他們的網頁論壇或 IRC 頻道,並提供新手幫助(在一些非英語國家,新手論壇很可能還是郵件列表), 這些地方是開始提問的好首選,特別是當你覺得遇到的也許只是相對簡單或者很普通的問題時。有廣告贊助的 IRC 頻道是公開歡迎提問的地方,通常可以即時得到回應。
事實上,如果程式出的問題只發生在特定 Linux 發行版提供的版本(這很常見),最好先去該發行版的論壇或郵件列表中提問,再到程式本身的論壇或郵件列表提問。(否則)該項目的駭客可能僅僅回覆 "用我們的版本"。
在任何論壇發文以前,先確認一下有沒有搜尋功能。如果有,就試著搜尋一下問題的幾個關鍵詞,也許這會有幫助。如果在此之前你已做過通用的網頁搜尋(你也該這樣做),還是再搜尋一下論壇,搜尋引擎有可能沒來得及索引此論壇的全部內容。
透過論壇或 IRC 頻道來提供使用者支援服務有增長的趨勢,電子郵件則大多為專案開發者間的交流而保留。所以最好先在論壇或 IRC 中尋求與該專案相關的協助。