在做技術的過程中,難免遇到各種各樣的問題,這時候就需要通過各種方式來解決,其中求助有經驗的人是一個非常便捷有用的方式,但是如何提問才能得到自己想要的答案呢?
有經驗的大佬和高手更傾向於向真心學習和想要進步的新手們傳遞經驗。綜合全篇文章來看,就是在講兩方面。
端正自己的學習態度,真正地熱衷技術並嘗試解決遇到的問題。
在向他人求助時,以合適的措辭表達自己求知的意願和問題資訊。
讀完這兩篇文章,我認為好的解決問題途徑應當是這樣子的:
遇到問題,所謂提問只是解決問題過程中的一環。我認為更廣義上的解決問題主要是下面三個部分的交叉迴圈(三板斧)。
嘗試自己審視錯誤
聯絡自己學習過的知識和此前的經驗,嘗試理解報錯資訊和程式崩潰的原因。
這個過程應當與下面的過程交叉進行。
上網搜尋相關資訊
在合適的論壇上提問,是否合適可以留意一下論壇上之前的問題。比如部落格園中的問題比較偏向前端,csdn上的問題魚龍混雜。
習慣在StackOverflow上提問,此前我也遇到過一些比較棘手的問題,最終就是在這個網站上得到解決的。很多英文報錯都有對應的解答,適應看英文就好。
PS:閱讀《提問的智慧》我才知道,StackOverflow只是Stack Exchange的一個網站:
Super User 是問一些通用的電腦問題,如果你的問題跟程式碼或是寫程式無關,只是一些網路連線之類的,請到這裡。
Stack Overflow 是問寫程式有關的問題。
Server Fault 是問伺服器和網管相關的問題。
求助
端正自己的求助態度。沒有人有義務幫助自己解決問題。要學會感謝幫助自己的人。
如果是開源專案,可以向開發者發郵件。注意是要向列表提問(即開發者團隊的郵件)
要描述清楚自己的問題,需要包含一些關鍵資訊:
哪方面的問題。
本來想達到什麼效果,出現了什麼問題。
報錯資訊,突出關鍵字。如果報錯是一系列的,可以根據時間先後都列出來。
已經嘗試過了什麼方法。
注意不是自己的猜測,自己的猜測會誤導別人。儘量客觀的描述問題,可以用自己的猜測先排除錯誤看看。
搜尋過哪些關鍵字。
作業系統與軟體的版本號。
儘量杜絕無意義的詞彙。把問題本身和謝謝說完就行了。
注意自己提問的語法、拼寫和大小寫(如果用英語)。
English is not my native language; please excuse typing errors.
但現在軟體翻譯那麼多。這個問題不大。
在通過提問解決問題的過程中,每一步遇到問題不要立刻找大佬解決,嘗試自己先解決一下。
總之提問過程中要體現自己的思考,這種態度才會讓大佬繼續幫助自己。
解決問題後,在貼文最後說明情況,或者給所有幫助過自己的人發一個說明。也可以自己寫一個部落格進行記錄。提高網路搜尋的可複用性。
即通過STFW、RTFM和RFTSC獨立解決問題。
RTFM(Read The Fucking Manual)
,回答者認為你應該去讀說明手冊。
STFW(Search The Fucking Web)
,回答者認為你應該到網上搜尋。(http://lmgtfy.com/ 哈哈,let me google for you)。
RFTSC(Read The Fucking Source Code.)
,回答者認為你應該去閱讀原始碼。
這基本就是獨立解決問題的三個策略,大佬與我們的差距也就是獨立解決問題能力上的差距;因此我們總在請教大佬,而大佬總是那個解決問題的人。
因此,對於本文的標題而言,科學的提問其實也是學會不提問——自己解決問題,必要時合理地請教別人。
態度要和善。
不要給提問者亂指路,如果不確定要說出來。
用試探性的反問引導提問者提出一個好問題。
授人以魚不如授人以漁。
解決問題後,留下可供網路搜尋複用的答案。
儘量展示解決問題的思路和過程。
事實上我對以上這些感受還是挺深刻的。因為去年我參加了一個組織的考核,期間遇到了各種各樣的麻煩,難免要詢問有經驗的學長,在網路上搜尋相關的答案,試著看看各種各樣的報錯資訊。在這個過程中,感覺真正地學著分析問題、解決問題。