摘要:如果你也曾遭遇這樣的問(wèn)題,或今后打算在編程社區(qū)里成長(zhǎng),請(qǐng)務(wù)必看看我接下來(lái)要說(shuō)的東西如何正確地在編程社區(qū)提問(wèn)絕大部分得不到滿意回答甚至引來(lái)不滿的問(wèn)題,都是問(wèn)題本身的原因。對(duì)新手來(lái)說(shuō),的可能性更大。
學(xué)編程難免遇到問(wèn)題,遇到問(wèn)題難免要上網(wǎng)求助。然而有過(guò)不少同學(xué)向我訴苦,說(shuō) 在網(wǎng)上提問(wèn)沒(méi)有人回答,有的還收到一些不是很友好的回復(fù) 。我自己也在經(jīng)常上的論壇上目睹過(guò)類似的帖子。以至于有人說(shuō),程序員社區(qū)就是對(duì)新人不友好,不愿幫助新人,甚至說(shuō)這是怕別人學(xué)會(huì)了來(lái)?yè)岋埻搿?/p>
對(duì)此我想正名一下,程序員們大多很單純,而且這或許是 這個(gè)星球上最樂(lè)于分享的群體 。但在這個(gè)充滿理性、邏輯至上的群體里,有著自己一套規(guī)則。當(dāng)一個(gè)不懂規(guī)則的人出現(xiàn)在群體中,往往會(huì)被“教做人”。
如果你也曾遭遇這樣的問(wèn)題,或今后打算在編程社區(qū)里成長(zhǎng),請(qǐng)務(wù)必看看我接下來(lái)要說(shuō)的東西:
如何正確地在編程社區(qū)提問(wèn)?
絕大部分得不到滿意回答甚至引來(lái)不滿的問(wèn)題,都是問(wèn)題本身的原因。我本人在網(wǎng)上回答了這么多年問(wèn)題,也經(jīng)常是深感困擾。提出一個(gè)好問(wèn)題,對(duì)于提問(wèn)者和回答者,都有很大幫助。
提問(wèn)前準(zhǔn)備當(dāng)你打算上網(wǎng)求助前,先問(wèn)自己2個(gè)問(wèn)題:
我 搜索 了沒(méi)有?
我 檢查 了沒(méi)有?
學(xué)編程,你不是一個(gè)人。幾乎所有你遇到的坑,都有前人踩過(guò),搜索一下就會(huì)有答案。各種文檔、教程里的內(nèi)容也都會(huì)包含在網(wǎng)頁(yè)結(jié)果中。搜索的關(guān)鍵是如何描述問(wèn)題,所以要學(xué)會(huì)看報(bào)錯(cuò),能找到報(bào)錯(cuò)中的關(guān)鍵信息。關(guān)于更多搜索的技巧,參考之前的文章《編程初學(xué)者如何使用搜索引擎》。
編程屆有兩個(gè)詞: RTFM 、 STFW ,含義我不解釋,自己去查。當(dāng)有人在你問(wèn)題下回復(fù)類似詞時(shí),想想自己有沒(méi)有動(dòng)手搜索過(guò)。
如果網(wǎng)上找不出你的問(wèn)題,有幾種可能:1.關(guān)鍵詞選得不準(zhǔn)確;2.你確實(shí)碰上了特殊情況;3.你犯了某些低級(jí)錯(cuò)誤。對(duì)新手來(lái)說(shuō),3的可能性更大。所以請(qǐng)務(wù)必自己檢查下, 單詞拼寫(xiě)對(duì)不對(duì)、標(biāo)點(diǎn)是不是英文、縮進(jìn)空格對(duì)不對(duì)、括號(hào)引號(hào)是否成對(duì)、文件路徑是否正確 ……
排除低級(jí)錯(cuò)誤外,你還應(yīng)當(dāng)對(duì)錯(cuò)誤做定位,盡量縮小范圍,增加必要的輸出。這在提問(wèn)時(shí)也會(huì)極大方便回答者。而且我也經(jīng)常跟人說(shuō),當(dāng)你自己把必要的值都輸出出來(lái)看清楚后,通常問(wèn)題已經(jīng)很明顯了。關(guān)于 debug 的技巧,參考之前的文章《開(kāi)發(fā)5分鐘,調(diào)試2小時(shí) - 該如何debug?》
提問(wèn)的內(nèi)容一個(gè)好的問(wèn)題,應(yīng)當(dāng)是 準(zhǔn)確、具體、簡(jiǎn)潔、完整 ,也就是既要清楚地表達(dá)了問(wèn)題涉及的信息,又不要夾雜無(wú)關(guān)的噪音。
具體來(lái)說(shuō),通常應(yīng)包括這幾種信息:
問(wèn)題的表現(xiàn)
平臺(tái) 和 版本
輸出的 報(bào)錯(cuò)信息
相關(guān)部分的 代碼
最好還附上你的 屏幕截圖 (避免你沒(méi)意識(shí)到的錯(cuò)誤)以及中間變量的 輸出 (方便回答者,同時(shí)也說(shuō)明你自己嘗試過(guò))。
特別說(shuō)一下附上的代碼。對(duì)新手來(lái)說(shuō),最好 同時(shí)提供截圖和代碼文字 ,截圖是展示電腦上的真實(shí)情況,文字是方便別人復(fù)現(xiàn)。如果你的代碼短,就全部發(fā)上;如果是很多代碼文件的項(xiàng)目,請(qǐng)自己先做初步的定位,只發(fā)關(guān)鍵部分的代碼。
如果你是在論壇、問(wèn)答網(wǎng)站上發(fā)帖,取個(gè)好標(biāo)題很重要。 把問(wèn)題在標(biāo)題里簡(jiǎn)要描述清楚 遠(yuǎn)好過(guò)“求助!在線等!挺急的”這種無(wú)意義的標(biāo)題。
提問(wèn)的形式提問(wèn)時(shí),要選擇 合適的地方,說(shuō)合適的話 。
比如你在一個(gè)進(jìn)階論壇中問(wèn)初學(xué)者的問(wèn)題,往往會(huì)遭到排斥。反過(guò)來(lái)也不合適。比較可惜的是,在編程屆,進(jìn)階、深入的論壇更多,初學(xué)者論壇則較少。所以如果你愿意, 歡迎來(lái)我們的論壇提問(wèn) ,當(dāng)然別忘了上面說(shuō)的幾點(diǎn)。
而至于什么才是合適的話,這個(gè)比較難把握。總的來(lái)說(shuō), 禮貌永遠(yuǎn)是好的 ,沒(méi)人愿意搭理傲慢、粗魯?shù)奶釂?wèn)。但有時(shí)候, 效率比禮貌更重要 。比如 StackOverflow 就禁止打招呼、感謝,因?yàn)檫@會(huì)帶來(lái)無(wú)效信息。你只需要精確描述問(wèn)題、采納優(yōu)秀回答即可。同樣,當(dāng)你給別人提問(wèn)時(shí),直接了當(dāng)?shù)卣f(shuō)明問(wèn)題,絕對(duì)不要一句“你好,在嗎?”,等到回復(fù)再來(lái)一句“我可不可以問(wèn)你一個(gè)問(wèn)題?”這樣留言。或許你覺(jué)得這是禮貌,但對(duì)于別人來(lái)說(shuō),本來(lái)一次就可以回復(fù)的事情,硬生生被拖成幾個(gè)小時(shí),可能根本就不理你了。
而當(dāng)你發(fā)布在網(wǎng)上的問(wèn)題最終被解決后, 在問(wèn)題后附上解法說(shuō)明 ,按社區(qū)規(guī)則 采納/點(diǎn)贊 有用的答案,是值得推薦的做法。對(duì)于回答者來(lái)說(shuō),這比一句口頭贊賞更禮貌。
提問(wèn)的禁忌上面說(shuō)了些建議,如果你還不夠理解,那么請(qǐng)記住,不要像這樣提問(wèn):
搜一步就可以解決的問(wèn)題 。比如“Python 里怎么讀取一個(gè)文件的內(nèi)容?”
X-Y 問(wèn)題 。所謂 X-Y 問(wèn)題,就是你要解決 X 問(wèn)題,你認(rèn)為可以用 Y 方法解決,然后你就問(wèn)怎么實(shí)現(xiàn) Y,但其實(shí) X 問(wèn)題根本就有更合適的解法。比如“我怎么取一個(gè)字符串的后3位?”,而實(shí)際他想解決的是“怎樣獲取文件的文件類型?”
籠統(tǒng)而抽象的問(wèn)題 。比如“我能不能學(xué)會(huì) Python?”。這個(gè)問(wèn)題被問(wèn)的頻率很高,但這不該問(wèn)別人,問(wèn)你自己。
不要亂猜原因 ,甚至聲稱是別人代碼的 bug。你需要客觀描述和分析問(wèn)題。比如“我一輸比10大的數(shù)就不對(duì),是不是 Python 在我電腦上有問(wèn)題?”
不要把多個(gè)問(wèn)題混為一談 ,分清楚因果。代碼有不止一個(gè)錯(cuò)誤是很正常的,如果別人的方法讓你的報(bào)錯(cuò)發(fā)生變化,說(shuō)明對(duì)上一個(gè)問(wèn)題起了作用,這種情況需要進(jìn)一步分析,而不是立刻回復(fù)一句“按照你的方法改了還是不行”。(這種屬于真的不禮貌,會(huì)讓回答者不想再理你)
在開(kāi)放的論壇、討論組、問(wèn)答網(wǎng)站,盡量 不要通過(guò)發(fā)私信、加好友 的方式來(lái)提問(wèn)。(事實(shí)上,這種方式大多也無(wú)效)
不要妄想讓別人替你調(diào)試 bug、寫(xiě)作業(yè)、開(kāi)發(fā)。
一個(gè)糟糕問(wèn)題的例子:
哪位懂Python的幫我看下這是什么問(wèn)題?
(一張幾十行的代碼截圖)
一個(gè)好問(wèn)題的例子:
我的程序里將輸入和變量比較大小,結(jié)果報(bào)錯(cuò),請(qǐng)問(wèn)是為什么?
我是Python3
報(bào)錯(cuò):TypeError: "<" not supported between instances of "int" and "str"
(代碼+輸出的截屏、代碼文本)
一個(gè)更好問(wèn)題的例子:
我的程序里將輸入和變量比較大小,結(jié)果報(bào)錯(cuò),請(qǐng)問(wèn)是為什么?
我是 Windows 下的 Python 3.7
報(bào)錯(cuò):TypeError: "<" not supported between instances of "int" and "str"
提示是第11行:if answer < num:
我在前面加了 print,兩個(gè)變量都是有值的。
(代碼+輸出的截屏、代碼文本)
提問(wèn)的本質(zhì)還是思考 。如果你能提出一個(gè)好問(wèn)題,必定是對(duì)問(wèn)題思考后的結(jié)果。這對(duì)你本身也是一種練習(xí)。不思考就直接提問(wèn),既浪費(fèi)了鍛煉的機(jī)會(huì),也很難得到滿意答復(fù)。
從另一個(gè)角度來(lái)說(shuō),天下沒(méi)有免費(fèi)的午餐(也許有,但必另有所圖),不要把別人回答你當(dāng)做一件理所當(dāng)然的事情。所以 請(qǐng)尊重別人的勞動(dòng),并盡可能讓別人樂(lè)于回答你 。 不要提糟糕的問(wèn)題 就是最基本的要求。
說(shuō)了這么多,你也不要因此而不想提問(wèn)題。該問(wèn)的還是得問(wèn), 要敢于提問(wèn)和討論 ,甚至要上 StackOverflow 等英語(yǔ)網(wǎng)站去問(wèn)。不然怎么提高自己?不但要問(wèn),還要回答, “教”是最好的“學(xué)” 。當(dāng)你能向別人解釋清楚一個(gè)東西時(shí),才是你真的理解了它。既回饋了社區(qū),又提升了自己,何樂(lè)而不為?
Crossin的編程教室永遠(yuǎn)歡迎好問(wèn)題。
最后,編程有篇很經(jīng)典的文章,推薦給大家:
How To Ask Questions The Smart Way
http://www.catb.org/~esr/faqs/smart-questions.html
【中文版】 提問(wèn)的智慧
https://github.com/FredWe/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md
上述這一切,不僅針對(duì)編程。
════
其他文章及回答:
如何自學(xué)Python | 新手引導(dǎo) | 精選Python問(wèn)答 | Python單詞表 | 人工智能 | 嘻哈 | 爬蟲(chóng) | 我用Python | 高考 | requests | AI平臺(tái) | 計(jì)算機(jī)視覺(jué)
歡迎搜索及關(guān)注: Crossin的編程教室
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42634.html
摘要:原文鏈接恰當(dāng)?shù)貙W(xué)習(xí)適合第一次編程和非的程序員持續(xù)時(shí)間到周前提無(wú)需編程經(jīng)驗(yàn)繼續(xù)下面的課程。如果你沒(méi)有足夠的時(shí)間在周內(nèi)完成全部的章節(jié),學(xué)習(xí)時(shí)間盡力不要超過(guò)周。你還不是一個(gè)絕地武士,必須持續(xù)使用你最新學(xué)到的知識(shí)和技能,盡可能地經(jīng)常持續(xù)學(xué)習(xí)和提高。 原文鏈接:How to Learn JavaScript Properly 恰當(dāng)?shù)貙W(xué)習(xí) JavaScript (適合第一次編程和非 JavaSc...
摘要:最近看前端都展開(kāi)了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒(méi)有相關(guān)。有關(guān)書(shū)籍的介紹,大部分截取自是官方介紹。但從開(kāi)始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫(xiě)線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書(shū), 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來(lái)說(shuō), 基礎(chǔ)大概也就夠用了...
摘要:用戶社區(qū)的使用用戶社區(qū)為實(shí)名制社區(qū),在提問(wèn)回復(fù)或發(fā)文評(píng)論前必須綁定手機(jī)號(hào)才能夠正常發(fā)帖。官方有權(quán)對(duì)灌水違法違規(guī)不文明內(nèi)容進(jìn)行刪除。親愛(ài)的小伙伴你好!首先感謝你來(lái)到UCoud用戶社區(qū),期待你的加入!UClub用戶社區(qū)旨在為UCloud用戶及廣大云計(jì)算愛(ài)好者提供一個(gè)開(kāi)放的學(xué)習(xí)交流平臺(tái)。為了你能更好地使用UCloud用戶社區(qū),請(qǐng)你花費(fèi)3分鐘仔細(xì)閱讀,閱讀完成后將獲得10積分。UCloud用戶社區(qū)的...
Llama3-8B-Chinese-Chat 是基于 Meta-Llama-3-8B-Instruct 模型通過(guò) ORPO進(jìn)行微調(diào)的中文聊天模型。與原始的 Meta-Llama-3-8B-Instruct 模型相比,此模型顯著減少了中文問(wèn)題英文回答"和混合中英文回答的問(wèn)題。此外,相較于原模型,新模型在回答中大量減少了表情符號(hào)的使用,使得回應(yīng)更加正式。與 Llama-3-8B-nsturc...
閱讀 2847·2023-04-26 02:23
閱讀 1599·2021-11-11 16:55
閱讀 3158·2021-10-19 11:47
閱讀 3371·2021-09-22 15:15
閱讀 1987·2019-08-30 15:55
閱讀 1045·2019-08-29 15:43
閱讀 1302·2019-08-29 13:16
閱讀 2204·2019-08-29 12:38