提问的智慧

随便聊聊 · 2120 次浏览
zryan 创建于 2023-01-03 15:05

分享一篇github上很好的文章:《提问的智慧(How-To-Ask-Questions-The-Smart-Way)》,原文链接在这里

以下是我自己根据个人体会,筛选和整理出来的部分内容,供大家参考。助力构建quicker和谐社区~~

 

提问前

 

1 自己做出努力

  1. 尝试在你准备提问的论坛的旧文章中搜索答案
  2. 尝试上网搜索以找到答案。
  3. 尝试阅读手册/文档以找到答案。
  4. 尝试阅读常见问题文件(FAQ)以找到答案。
  5. 尝试自己检查或试验以找到答案。
  6. 向你身边的强者朋友打听以找到答案。
  7. 如果你是程序开发者,请尝试阅读源代码以找到答案。

当你在提出问题的时候,请先表明你已经做了上述的努力;如果能一并表达在做了上述努力的过程中所学到的东西会更好。

示例:我在 XXX 中搜过下列句子但没有找到什么有用的东西:……

 

2 准备好问题

准备好你的问题,再将问题仔细地思考过一遍,因为草率的发问只能得到草率的回答,或者根本得不到任何答案。

越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能得到实质性的帮助。

 

3 摆正心态

不要认为理所应当得到答案,毕竟大部分人没有为这种服务支付任何报酬。你将会是自己去挣到一个答案,靠提出有内涵的、有趣的、有思维激励作用的问题。

表明你愿意在找答案的过程中做点什么。表现出只要有人能指个正确方向,你就有完成它的能力和决心。

不推荐:请把我需要的确切的过程贴出来。

推荐:“谁能给点提示?”、“我的这个例子里缺了什么?”、“我应该检查什么地方?”

 


提问时

 

1 拟定标题(目标-差异法)

标题分为前后两部分:

  1. 目标部分:指出是哪一个或哪一组东西有问题;
  2. 差异部分:描述与期望的行为不一致的地方。

示例:

蠢问题:救命啊!我的笔记本电脑不能正常显示了!

聪明问题X.org 6.8.1 的鼠标指针会变形,某牌显卡 MV1005 芯片组。

更聪明问题X.org 6.8.1 的鼠标指针,在某牌显卡 MV1005 芯片组环境下 - 会变形。

 

2 处理语言差异

如果需要在外语论坛上提问,可以犯点拼写和语法上的小错,但决不能在思考上马虎。同时,除非你知道回复者使用的语言,否则请使用英语书写。

如果英文是你的外语(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.

  • 我把我的问题用某语言和英文写出来。如果你只用其中的一种语言回答,我会乐意将回复翻译成为你使用的语言。

 

3 描述问题

 

3.1 精确地描述问题并言之有物

  • 仔细、清楚地描述你的问题或 Bug 的症状。
  • 描述问题发生的环境(机器配置、操作系统、应用程序、以及相关的信息),提供经销商的发行版和版本号(如:Fedora Core 4Slackware 9.1等)。
  • 描述在提问前你是怎样去研究和理解这个问题的。
  • 描述在提问前为确定问题而采取的诊断步骤。
  • 描述最近做过什么可能相关的硬件或软件变更。
  • 尽可能地提供一个可以重现这个问题的可控环境的方法。

尽量去揣测一个黑客会怎样反问你,在你提问之前预先将黑客们可能提出的问题回答一遍。

以上几点中,当你报告的是你认为可能在代码中的问题时,给黑客一个可以重现你的问题的环境尤其重要。当你这么做时,你得到有效的回答的机会和速度都会大大的提升。

 

3.2 别动辄声称找到 Bug

当你在使用软件中遇到问题,除非你非常非常的有根据,不要动辄声称找到了 Bug。

“非常有根据”的一些体现:

  1. 可以提供解决问题的源代码补丁,或提供相应位置的修正或替代文件
  2. 可以提供回归测试来表明当前一版本中行为不正确。

请记得,还有其他许多用户没遇到你发现的问题,否则你在阅读文件或搜索网页时就应该发现了。这也意味着很有可能是你弄错了而不是软件本身有问题。

编写软件的人总是非常辛苦地使软件尽可能完美。我们在自身并不确定是否有 Bug 的情况下应该对作者多加体谅;

即使你私下非常确信已经发现一个真正的 Bug,最好写得像是你有哪里做的不对。如果真的有 Bug,你会在回复中看到这点。

 

3.3 不要用低声下气代替你的功课

有些人明白他们不该粗鲁或傲慢的提问并要求得到答复,但他们选择另一个极端 —— 低声下气:“我知道我只是个可悲的新手,一个菜鸟,但…”。这既使人困扰,也没有用,尤其是伴随着与实际问题含糊不清的描述时更令人反感。

取而代之的是,尽可能清楚地描述背景条件和你的问题情况。这比低声下气更好地定位了你的位置。

有时网页论坛会设有专为新手提问的版面,如果你真的认为遇到了初学者的问题,到那去就是了,但一样别那么低声下气。

 

3.4 描述问题症状而非你的猜测

告诉黑客们你认为问题是怎样造成的并没什么帮助。(如果你的推断如此有效,还用向别人求助吗?),因此要确信你原原本本告诉了他们问题的症状,而不是你的解释和理论;让黑客们来推测和诊断。

如果你认为陈述自己的猜测很重要,清楚地说明这只是你的猜测,并描述为什么它们不起作用。

蠢问题:我在编译内核时接连遇到 SIG11 错误, 我怀疑某条飞线搭在主板的走线上了,这种情况应该怎样检查最好?

聪明问题:我的组装电脑是 FIC-PA2007 主机板搭载 AMD K6/233 CPU(威盛 Apollo VP2 芯片组), 256MB Corsair PC133 SDRAM 内存,在编译内核时,从开机 20 分钟以后就频频产生 SIG11 错误, 但是在头 20 分钟内从没发生过相同的问题。重新启动也没有用,但是关机一晚上就又能工作 20 分钟。 所有内存都换过了,没有效果。相关部分的标准编译记录如下…

 

3.5 描述目标/需求而不是过程

如果你想弄清楚如何做某事(而不是报告一个 Bug),在开头就描述你的目标/需求,然后才陈述重现你所卡住的特定步骤。

经常寻求技术帮助的人在心中有个更高层次的目标,而他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身就有问题。结果要费很大的劲才能搞定。

蠢问题:我怎样才能从某绘图程序的颜色选择器中取得十六进制的 RGB 值?

聪明问题:我正试着用替换一幅图片的色码(color table)成自己选定的色码,我现在知道的唯一方法是编辑每个色码区块(table slot), 但却无法从某绘图程序的颜色选择器取得十六进制的 RGB 值。

第二种提问法比较聪明,你可能得到他人推荐的另一种更加简单高效的做法

 

3.6 一次性表达你的问题以及需求

尽量在提问时一次性把你的问题、情况和需求描述清楚,避免对回复者无休止地发问。这也意味着你的问题需要尽量清晰、有节制

同时,花点时间界定一下你的问题,使专家花在辨识你的问题和回答所需要付出的时间减到最少——这和简化问题有所区别,例:

不推荐:你能解释一下 X 吗?

推荐:我想更好地理解 X,可否指点一下哪里有好一点说明?

不推荐:我的代码不能运行,能替我改正一下吗?

推荐:我的代码不能运行,能帮我看看哪里有问题吗?(已将问题范围锁定在……)

 

3.7 代码问题提供最精简用例

最有效描述程序问题的方法是提供最精简的 Bug 展示测试用例:一小个程序片段能刚好展示出程序的异常行为,而不包含其他令人分散注意力的内容。

“最精简用例”制作方法

  • 如果你知道哪一行或哪一段代码会造成异常的行为,复制下来并加入足够重现这个状况的代码(例如,足以让这段代码能被编译/直译/被应用程序处理);
  • 如果你无法将问题缩减到一个特定区块,就复制一份代码并移除不影响产生问题行为的部分。

如果你只是想让别人帮忙审查(Review)一下代码,在问题描述的开头就要说出来,并且一定要提到你认为哪一部分特别需要关注以及为什么。

 

4 细节处理

 

4.1 去掉无意义的提问句

避免用无意义的话结束提问,例如 “有人能帮我吗?” 或者 “这有答案吗?”。

首先:如果你对问题的描述不是很好,这样问更是画蛇添足。

其次:由于这样问是画蛇添足,黑客们会很厌烦你 —— 而且通常会用逻辑上正确,但毫无意义的回答来表示他们的蔑视, 例如:“没错,有人能帮你” 或者 “不,没答案”。

一般来说,避免用 是或否对或错有或没有 类型的问句,除非你想得到是或否类型的回答

蠢问题:有人可以帮助我在Win32中捕获控制台I / O吗?

聪明问题:如何在 Win32 中捕获控制台 I/O?

 

4.2 讲究礼貌

彬彬有礼,多用 “请” 和 “谢谢您的关注” ,或 “感谢您的解答” 。让大家都知道你对他们花时间免费提供帮助心存感激。

但当然,有礼是建立在你的提问符合以上几点的基础上的,有礼并不能取代清晰、正确、精准且合乎语法的提问

如果你有一串的问题待解决,客气一点肯定会增加你得到有用回应的机会。

 


提问后

 

1 问题已解决:加个简短的补充说明

问题解决后,可以在最初提问的话题下回复一条说明消息,让所有回复者知道问题是怎样解决的,并再一次向他们表示感谢。

关于说明消息

  1. 说明不必很长或是很深入。简单的一句你好,原来是网线出了问题!谢谢大家 – Bill即可。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。
  2. 对于有深度的问题,张贴调试记录的摘要是有帮助的。描述问题的最终状态,说明是什么解决了问题。
  3. (如果你有时间的话,可指明以后可以避免的盲点,为他人提供帮助。避免盲点的部分应放在正确的解决方案和其它总结材料之后。
  4. 列出那些帮助过你的名字,会让你交到更多朋友。

同时,在标题中添加 “已修正”,“已解决” 或其它同等含义的明显标记。既方便他人寻找正确答案又节省论坛中有想法回答问题的人的时间。

注:这种补充有助于让每位参与协助的人因问题的解决而从中得到满足感。这种感觉对于那些你向他们求助的大师或者专家而言,是非常重要的。

问题悬而未决会让人灰心;帮助者渴望看到问题被解决。好人有好报,满足他们的渴望,你会在下次提问时尝到甜头。

 

2 问题未解决/没有回答

  • 请勿简单地重复张贴问题,这很容易被视为无意义的喧闹。有点耐心,知道你问题答案的人可能生活在不同的时区,可能正在睡觉,也有可能你的问题一开始就没有组织好。
  • 尝试通过其他渠道获得帮助,这些渠道通常更适合初学者的需要。
  • 尝试加入用户组成的交流群,在里面获得更即时的回复。
  • 可以寻找付费的帮助。别为要付费才能获得帮助而感到沮丧!就算软件没花费你一分钱,你也不能强求技术支持总是免费的。
zryan 最后更新于 2023/1/3

回复内容
CL 2023-01-03 17:49
#1

感谢分享~

喝酒吃肉爽 2023-01-05 12:03
#2

感谢分享,学习了~~

回复主贴