提问的艺术

我们每天都会咨询别人很多问题,也可能会被别人问到很多问题,在回答、处理、解决这些问题的时候,我们常常会发现有些问题特别好,可以带来提问者和被问者的深刻思考和非常有建设性的讨论,最后提问者和被问者都得到了学习和提高。

而有些问题质量很差,通常提问者和被提问者讨论了半天都不知所云。那么怎么才能提一个好问题呢?怎么才能让自己的问题很快的得到回答?怎么才能让自己的问题对自己和对别人都有用处呢?

提问前

  1. 首先应该尝试用在网上问答社区搜索一下,起码在问别人之前应该问一下 Google,至少也应该使用 Bing 的国际版本,如果能够使用英文表达应该能收获更多回答。如果在一个论坛上提问,搜一下这个问题之前有没有人问过,不要让被提问者去做人肉搜索引擎。
  2. 阅读一下帮助文档、常见问题FAQ和源代码(如果有的话),别让别人回答你文档地址。
  3. 如果可以的话,自己应该试一试。比如*”x和y哪个快?“就是一个烂问题。一个好一点的问题是:“基于zzzz,我认为x应该比y快,但是我在tttt环境下的测试结果是x比y慢,为什么呢?”*。

如何提问

  1. 明确描述标题,比如可以使用目标-差异形式的标题。使用准确的分类,标签(tag)等。
  2. 把你的问题写下来,站在一个被问者的角度看看自己能不能看懂自己的问题。我经常发现当我花时间组织自己的语言来描述清楚自己问题的时候,我已经知道我的答案是什么了,或者至少对如何找到答案有了新的想法。
  3. 如果是书面提问,斟酌一下字句,最好别有错别字、语法错误。更重要的是,如果粘贴代码,确保你的代码能编译通过!!!(除非你标明是伪代码)如果要写输入输出,确保他们是对的!!!
  4. 注意格式,特别是代码格式。
  5. 明确标明哪些是症状,哪些是你的猜测。
  6. 简短,别说废话!!!
  7. 除非非常肯定,别动辄就说找到了bug,什么东西设计的很烂等等,更可能的情况是你漏掉了什么东西。
  8. 找到合适的人或者论坛发问。项目相关请去 Github 上发起 Issue;常规使用可以去 Stack Overflow 或者国内的 SegmentFault;电脑问题可以去superuser;如果是服务器和网管,可以去serverfault。如果针对这个具体问题有相关的论坛、邮件列表的,也可以去那里。
  9. 要有礼貌,没有人有义务回答你的问题。

问题应该包含什么

  1. 包含问题的背景知识,帮助别人理解你的真正问题。比如你要解决X问题,发现它的一个子问题Y问题你不知道,那么在问Y问题说一下X问题。比如你要解决X问题,你想到了一个解决方案Y,但是你不知道Y怎么做,那么在问Y时说一下你的X问题。
  2. 包含问题发生的环境(机器配置、操作系统(版本)、编程语言(版本)、IDE(版本)、调试器等和问题相关的一切信息)。
  3. 包含一个最小的可以重现你的问题的步骤。
  4. 包含自己尝试了哪些诊断方法,得到了什么输出。尝试过哪些解决方案,遇到的问题分别是什么。自己学到了哪些东西,有哪些是可供被问者参考的。
  5. 如果自己已经排除了一些解决方案,说明这些解决方案为什么会被排除,这会有利于别人更好的理解你的需求。

怎么对待别的人回答

  1. 问题解决后,给出一个总结,这样是对所有帮过你的人的表示尊重,同时也会帮到以后遇到同样问题的人。
  2. 如果别人的回答你没看懂,在继续追问前先做上面提到的提问前应该做什么

版权所有丨转载请注明出处:https://kxq.io/archives/提问的艺术