為什麼新手在程式設計社群提問得不到回答,甚至還會被嘲諷?
學程式設計難免遇到問題,遇到問題難免要上網求助。然而有過不少同學向我訴苦,說 在網上提問沒有人回答,有的還收到一些不是很友好的回覆 。我自己也在經常上的論壇上目睹過類似的帖子。以至於有人說,程式員社群就是對新人不友好,不願幫助新人,甚至說這是怕別人學會了來搶飯碗。
對此我想正名一下,程式設計師們大多很單純,而且這或許是 這個星球上最樂於分享的群體 。但在這個充滿理性、邏輯至上的群體裡,有著自己一套規則。當一個不懂規則的人出現在群體中,往往會被“教做人”。
如果你也曾遭遇這樣的問題,或今後打算在程式設計社群裡成長,請務必看看我接下來要說的東西:
如何正確地在程式設計社群提問?
絕大部分得不到滿意回答甚至引來不滿的問題,都是問題本身的原因。我本人在網上回答了這麼多年問題,也經常是深感困擾。提出一個好問題,對於提問者和回答者,都有很大幫助。
提問前準備
當你打算上網求助前,先問自己2個問題:
- 我 搜尋 了沒有?
- 我 檢查 了沒有?
學程式設計,你不是一個人。幾乎所有你遇到的坑,都有前人踩過,搜尋一下就會有答案。各種文件、教程裡的內容也都會包含在網頁結果中。搜尋的關鍵是如何描述問題,所以要學會看報錯,能找到報錯中的關鍵資訊。關於更多搜尋的技巧,參考之前的文章《 ofollow,noindex">程式設計初學者如何使用搜索引擎 》。
程式設計屆有兩個詞: RTFM 、 STFW ,含義我不解釋,自己去查。當有人在你問題下回復類似詞時,想想自己有沒有動手搜尋過。

如果網上找不出你的問題,有幾種可能:1.關鍵詞選得不準確;2.你確實碰上了特殊情況;3.你犯了某些低階錯誤。對新手來說,3的可能性更大。所以請務必自己檢查下, 單詞拼寫對不對、標點是不是英文、縮排空格對不對、括號引號是否成對、檔案路徑是否正確 ……
排除低階錯誤外,你還應當對錯誤做定位,儘量縮小範圍,增加必要的輸出。這在提問時也會極大方便回答者。而且我也經常跟人說,當你自己把必要的值都輸出出來看清楚後,通常問題已經很明顯了。關於 debug 的技巧,參考之前的文章《 開發5分鐘,除錯2小時 - 該如何debug? 》
提問的內容
一個好的問題,應當是 準確、具體、簡潔、完整 ,也就是既要清楚地表達了問題涉及的資訊,又不要夾雜無關的噪音。
具體來說,通常應包括這幾種資訊:
- 問題的表現
- 平臺 和 版本
- 輸出的 報錯資訊
- 相關部分的 程式碼
最好還附上你的 螢幕截圖 (避免你沒意識到的錯誤)以及中間變數的 輸出 (方便回答者,同時也說明你自己嘗試過)。
特別說一下附上的程式碼。對新手來說,最好 同時提供截圖和程式碼文字 ,截圖是展示電腦上的真實情況,文字是方便別人復現。如果你的程式碼短,就全部發上;如果是很多程式碼檔案的專案,請自己先做初步的定位,只發關鍵部分的程式碼。
如果你是在論壇、問答網站上發帖,取個好標題很重要。 把問題在標題裡簡要描述清楚 遠好過“求助!線上等!挺急的”這種無意義的標題。
提問的形式
提問時,要選擇 合適的地方,說合適的話 。
比如你在一個進階論壇中問初學者的問題,往往會遭到排斥。反過來也不合適。比較可惜的是,在程式設計屆,進階、深入的論壇更多,初學者論壇則較少。所以如果你願意, 歡迎來我們的論壇提問 ,當然別忘了上面說的幾點。
而至於什麼才是合適的話,這個比較難把握。總的來說, 禮貌永遠是好的 ,沒人願意搭理傲慢、粗魯的提問。但有時候, 效率比禮貌更重要 。比如 StackOverflow 就禁止打招呼、感謝,因為這會帶來無效資訊。你只需要精確描述問題、採納優秀回答即可。同樣,當你給別人提問時,直接了當地說明問題,絕對不要一句“你好,在嗎?”,等到回覆再來一句“我可不可以問你一個問題?”這樣留言。或許你覺得這是禮貌,但對於別人來說,本來一次就可以回覆的事情,硬生生被拖成幾個小時,可能根本就不理你了。
而當你釋出在網上的問題最終被解決後, 在問題後附上解法說明 ,按社群規則 採納/點贊 有用的答案,是值得推薦的做法。對於回答者來說,這比一句口頭讚賞更禮貌。
提問的禁忌
上面說了些建議,如果你還不夠理解,那麼請記住,不要像這樣提問:
- 搜一步就可以解決的問題 。比如“Python 裡怎麼讀取一個檔案的內容?”
- X-Y 問題 。所謂 X-Y 問題,就是你要解決 X 問題,你認為可以用 Y 方法解決,然後你就問怎麼實現 Y,但其實 X 問題根本就有更合適的解法。比如“我怎麼取一個字串的後3位?”,而實際他想解決的是“怎樣獲取檔案的檔案型別?”
- 籠統而抽象的問題 。比如“我能不能學會 Python?”。這個問題被問的頻率很高,但這不該問別人,問你自己。
- 不要亂猜原因 ,甚至聲稱是別人程式碼的 bug。你需要客觀描述和分析問題。比如“我一輸比10大的數就不對,是不是 Python 在我電腦上有問題?”
- 不要把多個問題混為一談 ,分清楚因果。程式碼有不止一個錯誤是很正常的,如果別人的方法讓你的報錯發生變化,說明對上一個問題起了作用,這種情況需要進一步分析,而不是立刻回覆一句“按照你的方法改了還是不行”。(這種屬於真的不禮貌,會讓回答者不想再理你)
- 在開放的論壇、討論組、問答網站,儘量 不要通過發私信、加好友 的方式來提問。(事實上,這種方式大多也無效)
- 不要妄想讓別人替你除錯 bug、寫作業、開發。
一個糟糕問題的例子:
哪位懂Python的幫我看下這是什麼問題?
一個好問題的例子:
我的程式裡將輸入和變數比較大小,結果報錯,請問是為什麼?
我是Python3
報錯: TypeError: '<' not supported between instances of 'int' and 'str'
(程式碼+輸出的截圖、程式碼文字)
一個更好問題的例子:
我的程式裡將輸入和變數比較大小,結果報錯,請問是為什麼?
我是 Windows 下的 Python 3.7
報錯: TypeError: '<' not supported between instances of 'int' and 'str'
提示是第11行: if answer < num:
我在前面加了 print,兩個變數都是有值的。
(程式碼+輸出的截圖、程式碼文字)
提問的本質還是思考 。如果你能提出一個好問題,必定是對問題思考後的結果。這對你本身也是一種練習。不思考就直接提問,既浪費了鍛鍊的機會,也很難得到滿意答覆。
從另一個角度來說,天下沒有免費的午餐(也許有,但必另有所圖),不要把別人回答你當做一件理所當然的事情。所以 請尊重別人的勞動,並儘可能讓別人樂於回答你 。 不要提糟糕的問題 就是最基本的要求。
說了這麼多,你也不要因此而不想提問題。該問的還是得問, 要敢於提問和討論 ,甚至要上 StackOverflow 等英語網站去問。不然怎麼提高自己?不但要問,還要回答, “教”是最好的“學” 。當你能向別人解釋清楚一個東西時,才是你真的理解了它。既回饋了社群,又提升了自己,何樂而不為?
Crossin的程式設計教室永遠歡迎好問題。
最後,程式設計有篇很經典的文章,推薦給大家:
How To Ask Questions The Smart Way
http://www. catb.org/~esr/faqs/smar t-questions.html【中文版】 提問的智慧
https:// github.com/FredWe/How-T o-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md上述這一切,不僅針對程式設計。
════
其他文章及回答:
如何自學Python |新手引導 |精選Python 問答 |Python單詞表 |人工智慧 |嘻哈 |爬蟲 |我用Python |高考 |requests |AI平臺 |計算機視覺
歡迎搜尋及關注: Crossin的程式設計教室