大家好,几分钟的时间,教大家如何正确的提问以获得你满意的答案

无论是学习还是工作中,大家总会遇到各种各样的问题,比如程序无法运行、代码读不懂等等。

遇到问题去寻求他人的帮助本身是很正常的,但是,很多同学在遇到问题时,第一时间就会想到去寻求他人的帮助,而不是自己先尝试着解决。

就像在刚学编程时,我们一看到屏幕上出现红字报错就会心慌,然后都不先仔细检查一下就把代码复制粘贴下来找别人帮忙看。结果最后发现,竟然是自己敲错了一个标点符号!场面一度十分尴尬。


【学术相关】提问的智慧_java

中英文冒号搞混导致报错

其实,很多情况下,自己动手去解决问题的效率可能远比寻求他人的帮助要高的多。因为当你将问题抛给别人时,首先要给对方描述问题,然后需要对方真正理解问题,才能进一步花时间去帮你分析解决。双方不仅存在一个信息的收发过程,还存在很大的信息差,如果问题的描述和理解不当,可能沟通过程消耗的时间远比解决问题的时间要长,多少有些本末倒置,而最坏的结果是,对方给了你一个完全错误的答案!


【学术相关】提问的智慧_xhtml_02

尤其是当你进入了一个大公司,就会更加意识到沟通的难度,而且大家都有自己的工作,谁都不喜欢被打断,尤其是一些可能根本和自己无关的问题!


【学术相关】提问的智慧_人工智能_03

没搞清提问对象,没清晰描述问题

因此,在我们遇到问题时,先要尝试自己去解决,如果实在束手无策,再去提问,而且要有智慧地提问

今天给大家分享一本小书《提问的智慧》,是 ​​GitHub​​ 上的一个高星项目,并且被众多开源项目引用,鱼皮看完后收获满满,学到了高效提问和回答技巧,又有信心去应对未来的无限加班了。

下面列举书中我觉得讲的比较好的部分。


【学术相关】提问的智慧_人工智能_04

GitHub 高星项目

在提问之前

在你准备要通过电子邮件、新闻群组或者聊天室提出技术问题前,请先做到以下事情:

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

当你提出问题的时候,请先表明你已经做了上述的努力;这将有助于树立你并不是一个不劳而获且浪费别人的时间的提问者。如果你能一并表达在做了上述努力的过程中所学到的东西会更好,因为我们更乐于回答那些表现出能从答案中学习的人的问题。

运用某些策略,比如先用 Google 搜索你所遇到的各种错误信息(搜索 Google 论坛和网页),这样很可能直接就找到了能解决问题的文件或邮件列表线索。即使没有结果,在邮件列表或新闻组寻求帮助时加上一句 ​​我在 Google 中搜过下列句子但没有找到什么有用的东西​​ 也是件好事,即使它只是表明了搜索引擎不能提供哪些帮助。这么做(加上搜索过的字串)也让遇到相似问题的其他人能被搜索引擎引导到你的提问来。

别着急,不要指望几秒钟的 Google 搜索就能解决一个复杂的问题。在向专家求助之前,再阅读一下常见问题文件(FAQ)、放轻松、坐舒服一些,再花点时间思考一下这个问题。相信我们,他们能从你的提问看出你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑拋出,只因你的第一次搜索没有找到答案(或者找到太多答案)。

准备好你的问题,再将问题仔细的思考过一遍,因为草率的发问只能得到草率的回答,或者根本得不到任何答案。越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能得到实质性的帮助。

小心别问错了问题。如果你的问题基于错误的假设,某个普通黑客(J. Random Hacker)多半会一边在心里想着​​蠢问题…​​, 一边用无意义的字面解释来答复你,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。

绝不要自以为够格得到答案,你没有;你并没有。毕竟你没有为这种服务支付任何报酬。你将会是自己去挣到一个答案,靠提出有内涵的、有趣的、有思维激励作用的问题 —— 一个有潜力能贡献社区经验的问题,而不仅仅是被动的从他人处索取知识。

另一方面,表明你愿意在找答案的过程中做点什么是一个非常好的开端。​​谁能给点提示?​​​、​​我的这个例子里缺了什么?​​​以及​​我应该检查什么地方​​​比​​请把我需要的确切的过程贴出来​​更容易得到答复。因为你表现出只要有人能指个正确方向,你就有完成它的能力和决心。

RTFM 和 STFW

有一个古老而神圣的传统:如果你收到 ​​RTFM (Read The Fucking Manual)​​ 的回应,回答者认为你应该去读他妈的手册。当然,基本上他是对的,你应该去读一读。

RTFM 有一个年轻的亲戚。如果你收到 ​​STFW(Search The Fucking Web)​​ 的回应,回答者认为你应该到他妈的网上搜索。那人多半也是对的,去搜索一下吧。

更温和一点的说法是 “Google 是你的朋友!”

好问题与蠢问题

举一些例子,来说明怎样聪明的提问;同一个问题的两种问法被放在一起,一种是愚蠢的,另一种才是明智的。

蠢问题

我可以在哪儿找到关于 Foonly Flurbamatic 的资料?

这种问法无非想得到 ​​STFW​​ 这样的回答。

聪明问题

我用 Google 搜索过 "Foonly Flurbamatic 2600",但是没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料?

这个问题已经 STFW 过了,看起来他真的遇到了麻烦。

蠢问题

我从 foo 项目找来的源码没法编译。它怎么这么烂?

他觉得都是别人的错,这个傲慢自大的提问者。

聪明问题

foo 项目代码在 Nulix 6.2 版下无法编译通过。我读过了 FAQ,但里面没有提到跟 Nulix 有关的问题。这是我编译过程的记录,我有什么做的不对的地方吗?

提问者已经指明了环境,也读过了 FAQ,还列出了错误,并且他没有把问题的责任推到别人头上,他的问题值得被关注。

蠢问题

我的主机板有问题了,谁来帮我?

某黑客对这类问题的回答通常是:​​好的,还要帮你拍拍背和换尿布吗?​​,然后按下删除键。

聪明问题

我在 S2464 主机板上试过了 X 、 Y 和 Z ,但没什么作用,我又试了 A 、 B 和 C 。请注意当我尝试 C 时的奇怪现象。显然 florbish 正在 grommicking,但结果出人意料。通常在 Athlon MP 主机板上引起 grommicking 的原因是什么?有谁知道接下来我该做些什么测试才能找出问题?

这个家伙,从另一个角度来看,值得去回答他。他表现出了解决问题的能力,而不是坐等天上掉答案。

在最后一个问题中,注意 ​​告诉我答案​​​ 和 ​​给我启示,指出我还应该做什么诊断工作​​ 之间微妙而又重要的区别。

如何更好地回答问题

态度和善一点。问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。

对初犯者私下回复。对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找常见问题都不知道。

如果你不确定,一定要说出来!一个听起来权威的错误回复比没有还要糟,别因为听起来像个专家很好玩,就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。

如果帮不了忙,也别妨碍他。不要在实际步骤上开玩笑,那样也许会毁了使用者的设置 —— 有些可怜的呆瓜会把它当成真的指令。

试探性的反问以引出更多的细节。如果你做得好,提问者可以学到点东西 —— 你也可以。试试将蠢问题转变成好问题,别忘了我们都曾是新手。

尽管对那些懒虫抱怨一声 RTFM 是正当的,能指出文件的位置(即使只是建议个 Google 搜索关键词)会更好。

如果你决定回答,就请给出好的答案。当别人正在用错误的工具或方法时别建议笨拙的权宜之计(workaround),应推荐更好的工具,重新界定问题。

正面的回答问题!如果这个提问者已经很深入的研究而且也表明已经试过 X、 Y、 Z、 A、 B、C 但没得到结果,回答 ​​试试看 A 或是 B​​​ 或者 ​​试试 X 、 Y 、 Z 、 A 、 B 、 C​​ 并附上一个链接一点用都没有。

帮助你的社区从问题中学习。当回复一个好问题时,问问自己​​如何修改相关文件或常见问题文件以免再次解答同样的问题?​​,接着再向文件维护者发一份补丁。

如果你是在研究一番后才做出的回答,展现你的技巧而不是直接端出结果。毕竟​​授人以鱼不如授人以渔​​。

【学术相关】提问的智慧_makefile_05