分享一篇github上很好的文章:《提问的智慧(How-To-Ask-Questions-The-Smart-Way)》,原文链接在这里。
以下是我自己根据个人体会,筛选和整理出来的部分内容,供大家参考。助力构建quicker和谐社区~~
当你在提出问题的时候,请先表明你已经做了上述的努力;如果能一并表达在做了上述努力的过程中所学到的东西会更好。
示例:我在 XXX 中搜过下列句子但没有找到什么有用的东西:……
准备好你的问题,再将问题仔细地思考过一遍,因为草率的发问只能得到草率的回答,或者根本得不到任何答案。
越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能得到实质性的帮助。
不要认为理所应当得到答案,毕竟大部分人没有为这种服务支付任何报酬。你将会是自己去挣到一个答案,靠提出有内涵的、有趣的、有思维激励作用的问题。
表明你愿意在找答案的过程中做点什么。表现出只要有人能指个正确方向,你就有完成它的能力和决心。
不推荐:请把我需要的确切的过程贴出来。
推荐:“谁能给点提示?”、“我的这个例子里缺了什么?”、“我应该检查什么地方?”
标题分为前后两部分:
示例:
蠢问题:救命啊!我的笔记本电脑不能正常显示了!
聪明问题:X.org 6.8.1 的鼠标指针会变形,某牌显卡 MV1005 芯片组。
更聪明问题:X.org 6.8.1 的鼠标指针,在某牌显卡 MV1005 芯片组环境下 - 会变形。
如果需要在外语论坛上提问,可以犯点拼写和语法上的小错,但决不能在思考上马虎。同时,除非你知道回复者使用的语言,否则请使用英语书写。
如果英文是你的外语(Second language),提示潜在回复者你有潜在的语言困难是很好的:
English is not my native language; please excuse typing errors.
If you speak $LANGUAGE, please email/PM me; I may need assistance translating my question.
I am familiar with the technical terms, but some slang expressions and idioms are difficult for me.
I've posted my question in $LANGUAGE and English. I’ll be glad to translate responses, if you only use one or the other.
Fedora Core 4
、Slackware 9.1
等)。尽量去揣测一个黑客会怎样反问你,在你提问之前预先将黑客们可能提出的问题回答一遍。
以上几点中,当你报告的是你认为可能在代码中的问题时,给黑客一个可以重现你的问题的环境尤其重要。当你这么做时,你得到有效的回答的机会和速度都会大大的提升。
当你在使用软件中遇到问题,除非你非常、非常的有根据,不要动辄声称找到了 Bug。
“非常有根据”的一些体现:
- 可以提供解决问题的源代码补丁,或提供相应位置的修正或替代文件;
- 可以提供回归测试来表明当前一版本中行为不正确。
请记得,还有其他许多用户没遇到你发现的问题,否则你在阅读文件或搜索网页时就应该发现了。这也意味着很有可能是你弄错了而不是软件本身有问题。
编写软件的人总是非常辛苦地使软件尽可能完美。我们在自身并不确定是否有 Bug 的情况下应该对作者多加体谅;
即使你私下非常确信已经发现一个真正的 Bug,最好写得像是你有哪里做的不对。如果真的有 Bug,你会在回复中看到这点。
有些人明白他们不该粗鲁或傲慢的提问并要求得到答复,但他们选择另一个极端 —— 低声下气:“我知道我只是个可悲的新手,一个菜鸟,但…”。这既使人困扰,也没有用,尤其是伴随着与实际问题含糊不清的描述时更令人反感。
取而代之的是,尽可能清楚地描述背景条件和你的问题情况。这比低声下气更好地定位了你的位置。
有时网页论坛会设有专为新手提问的版面,如果你真的认为遇到了初学者的问题,到那去就是了,但一样别那么低声下气。
告诉黑客们你认为问题是怎样造成的并没什么帮助。(如果你的推断如此有效,还用向别人求助吗?),因此要确信你原原本本告诉了他们问题的症状,而不是你的解释和理论;让黑客们来推测和诊断。
如果你认为陈述自己的猜测很重要,清楚地说明这只是你的猜测,并描述为什么它们不起作用。
蠢问题:我在编译内核时接连遇到 SIG11 错误, 我怀疑某条飞线搭在主板的走线上了,这种情况应该怎样检查最好?
聪明问题:我的组装电脑是 FIC-PA2007 主机板搭载 AMD K6/233 CPU(威盛 Apollo VP2 芯片组), 256MB Corsair PC133 SDRAM 内存,在编译内核时,从开机 20 分钟以后就频频产生 SIG11 错误, 但是在头 20 分钟内从没发生过相同的问题。重新启动也没有用,但是关机一晚上就又能工作 20 分钟。 所有内存都换过了,没有效果。相关部分的标准编译记录如下…
如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标/需求,然后才陈述重现你所卡住的特定步骤。
经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。
蠢问题:我怎样才能从某绘图程序的颜色选择器中取得十六进制的 RGB 值?
聪明问题:我正试着用替换一幅图片的色码(color table)成自己选定的色码,我现在知道的唯一方法是编辑每个色码区块(table slot), 但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。
第二种提问法比较聪明,你可能得到他人推荐的另一种更加简单高效的做法。
尽量在提问时一次性把你的问题、情况和需求描述清楚,避免对回复者无休止地发问。这也意味着你的问题需要尽量清晰、有节制。
同时,花点时间界定一下你的问题,使专家花在辨识你的问题和回答所需要付出的时间减到最少——这和简化问题有所区别,例:
不推荐:你能解释一下 X 吗?
推荐:我想更好地理解 X,可否指点一下哪里有好一点说明?
不推荐:我的代码不能运行,能替我改正一下吗?
推荐:我的代码不能运行,能帮我看看哪里有问题吗?(已将问题范围锁定在……)
最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例:一小个程序片段能刚好展示出程序的异常行为,而不包含其他令人分散注意力的内容。
“最精简用例”制作方法:
如果你只是想让别人帮忙审查(Review)一下代码,在问题描述的开头就要说出来,并且一定要提到你认为哪一部分特别需要关注以及为什么。
避免用无意义的话结束提问,例如 “有人能帮我吗?” 或者 “这有答案吗?”。
首先:如果你对问题的描述不是很好,这样问更是画蛇添足。
其次:由于这样问是画蛇添足,黑客们会很厌烦你 —— 而且通常会用逻辑上正确,但毫无意义的回答来表示他们的蔑视, 例如:“没错,有人能帮你” 或者 “不,没答案”。
一般来说,避免用 是或否、对或错、有或没有 类型的问句,除非你想得到是或否类型的回答。
蠢问题:有人可以帮助我在Win32中捕获控制台I / O吗?
聪明问题:如何在 Win32 中捕获控制台 I/O?
彬彬有礼,多用 “请” 和 “谢谢您的关注” ,或 “感谢您的解答” 。让大家都知道你对他们花时间免费提供帮助心存感激。
但当然,有礼是建立在你的提问符合以上几点的基础上的,有礼并不能取代清晰、正确、精准且合乎语法的提问。
如果你有一串的问题待解决,客气一点肯定会增加你得到有用回应的机会。
问题解决后,可以在最初提问的话题下回复一条说明消息,让所有回复者知道问题是怎样解决的,并再一次向他们表示感谢。
关于说明消息:
- 说明不必很长或是很深入。简单的一句
你好,原来是网线出了问题!谢谢大家 – Bill
即可。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。- 对于有深度的问题,张贴调试记录的摘要是有帮助的。描述问题的最终状态,说明是什么解决了问题。
- (如果你有时间的话,可指明以后可以避免的盲点,为他人提供帮助。避免盲点的部分应放在正确的解决方案和其它总结材料之后。
- 列出那些帮助过你的名字,会让你交到更多朋友。
同时,在标题中添加 “已修正”,“已解决” 或其它同等含义的明显标记。既方便他人寻找正确答案又节省论坛中有想法回答问题的人的时间。
注:这种补充有助于让每位参与协助的人因问题的解决而从中得到满足感。这种感觉对于那些你向他们求助的大师或者专家而言,是非常重要的。
问题悬而未决会让人灰心;帮助者渴望看到问题被解决。好人有好报,满足他们的渴望,你会在下次提问时尝到甜头。