提问的艺术

简介: 如果你是一个想要学习编程、解决技术问题或者参与开源社区的人,你可能会经常遇到需要向别人提问的情况。但是,你知道如何提问吗?你知道如何提出一个清晰、有效、有礼貌的问题吗?你知道如何得到一个满意、及时、友好的回答吗?

OIG (1)

提问的艺术:如何高效地寻求帮助

如果你是一个想要学习编程、解决技术问题或者参与开源社区的人,你可能会经常遇到需要向别人提问的情况。但是,你知道如何提问吗?你知道如何提出一个清晰、有效、有礼貌的问题吗?你知道如何得到一个满意、及时、友好的回答吗?

如果你对这些问题的答案不太确定,或者想要提高你的提问技巧,那么请继续阅读这篇文章。我将给你一些关于如何提问的建议和指导。这些内容来自于一些经验丰富的骇客(hacker)和开源软件开发者,他们每天都在处理各种各样的技术问题,并乐于分享他们的知识和经验。当然,他们也有自己的喜好和标准,所以如果你想要得到他们的帮助,你最好遵循他们的规则和习惯。

Why?

你可能会觉得,提问有什么难的?只要把遇到的问题描述一下,然后等待回答就行了。可惜事实并非如此简单。在实际情况中,很多人提出的问题要么太含糊、太复杂、太琐碎、太无聊、太自私、太无礼,要么根本不是问题。这样的问题不仅浪费了提问者和回答者的时间和精力,也降低了提问者在社区中的声誉和信誉。

学习如何提问,可以帮助你避免这些问题,也可以帮助你更有效地获取信息和解决问题。通过提出一个好问题,你可以:

  • 节省时间:通过事先做好准备和调查,你可以避免提出一些已经有答案或者无关紧要的问题,从而节省自己和他人的时间。
  • 获得更好的答案:通过清楚、准确、有条理地描述你的问题和需求,你可以让回答者更容易理解你的意图和状况,从而给出更合适、更有用、更完整的答案。
  • 增加知识:通过提出一个有深度、有广度、有创意的问题,你可以激发回答者和自己的思考,从而学到更多的知识和技能。
  • 建立关系:通过礼貌、诚恳、感恩地与回答者沟通,你可以建立起良好的关系和信任,从而在今后得到更多的帮助和支持。

How?

那么,如何才能提出一个好问题呢?这里有一些基本的原则和步骤,你可以参考和遵循。

原则

  • 尊重:你要尊重你向他们提问的人,他们并没有义务回答你的问题,他们是出于自愿和兴趣花时间和精力帮助你。你要尊重他们的时间和精力,不要提出一些无聊、重复、简单或者无意义的问题。你要尊重他们的知识和经验,不要质疑或者否定他们的回答,除非你有充分的理由和证据。
  • 分享:你要分享你遇到的问题和解决的方法,不要把问题和答案藏起来,这样可以让更多的人受益。你要分享你的知识和经验,不要吝啬或者自私,如果你能回答别人的问题,就尽量去回答,这样可以增进社区的氛围和水平。
  • 学习:你要学习如何提问和回答,不要停留在一成不变或者一知半解的水平。你要学习如何使用搜索引擎、文档、论坛等工具来查找信息和解决问题,不要什么都依赖别人。你要学习如何思考和分析,不要仅仅停留在表面或者死记硬背。

步骤

  • 做好准备:在提问之前,你应该先做好准备工作,包括以下几个方面:

    • 确定你的问题是什么:你要清楚地知道你遇到了什么问题,它是怎么发生的,它影响了什么,它有什么现象和错误提示,它是可重复的吗,等等。
    • 尝试自己解决:你要尽力自己解决问题,通过搜索引擎、文档、常见问题解答(FAQ)、教程、源代码等途径寻找答案或者线索。很多时候,问题已经有了现成的解决方案或者相似的案例,你只需要花点时间和耐心就可以找到。
    • 简化问题:你要尝试简化问题,找出最小可复现的示例(MCVE),排除无关的干扰因素,聚焦于核心的问题。这样可以帮助你理清思路,也可以帮助回答者节省时间。
    • 选择合适的提问方式:根据你的问题的性质和紧急程度,选择合适的提问方式。一般来说,有以下几种常见的提问方式:

      • 即时通讯(Instant Messaging):如QQ、微信、Telegram、IRC等,适合一些简单、紧急、实时的问题,优点是回复速度快,缺点是干扰多,记录少。
      • 论坛(Forum):如Stack Overflow、V2EX、Quora等,适合一些复杂、普遍、持久的问题,优点是回复质量高,缺点是回复速度慢。
      • 邮件列表(Mailing List):如Linux Kernel Mailing List、Python Mailing List等,适合一些专业、深入、开放的问题,优点是回复权威性强,缺点是回复形式限制多。
      • 提问平台(Q&A Platform):如知乎、Quora等,适合一些通用、热门、有趣的问题,优点是回复覆盖面广,缺点是回复水,平淡。
    • 选择合适的提问对象:根据你的问题的领域和难度,选择合适的提问对象。一般来说,有以下几种常见的提问对象:

      • 官方文档(Official Documentation):如Python官方文档、Linux man page等,适合一些基础、规范、权威的问题,优点是信息准确、完整,缺点是信息量大、更新慢。
      • 开发者(Developer):如Linus Torvalds、Guido van Rossum等,适合一些高级、深入、创新的问题,优点是信息专业、权威,缺点是信息难以获取、回复慢。
      • 社区(Community):如Stack Overflow社区、Linux社区等,适合一些普遍、实用、多样的问题,优点是信息丰富、及时,缺点是信息质量参差不齐、回复不一致。
      • 同伴(Peer):如同事、同学、朋友等,适合一些简单、紧急、私密的问题,优点是信息容易获取、回复快,缺点是信息有限、不专业。
  • 描述问题:在提问时,你应该尽量清楚、准确、有条理地描述你的问题,包括以下几个方面:

    • 标题(Title):你要给你的问题一个简洁、明确、吸引人的标题,让回答者一眼就能看出你的问题是什么。你要避免使用模糊、无意义或者过于宽泛的标题,如“求助”、“急”、“Python问题”等。
    • 背景(Background):你要给出你的问题的背景信息,让回答者了解你的目的和环境。你要包括以下几个方面:
      • 你想要做什么:你要说明你想要实现什么功能或者达到什么目标。
      • 你使用了什么工具:你要说明你使用了什么编程语言、框架、库、操作系统等工具,并给出它们的版本号和配置信息。
      • 你遇到了什么问题:你要说明你在做什么时遇到了什么问题,以及问题有什么现象和错误提示。
    • 示例(Example):你要给出你的问题的示例代码或者数据,让回答者能够复现你的问题。你要注意以下几个方面:
      • 简化示例:你要尽量简化示例,去掉无关的代码或者数据,只保留能够展示问题的最小可复现的示例(MCVE)。
      • 格式化示例:你要按照规范和习惯格式化示例,使用合适的缩进、空格、注释等方式,让示例易于阅读和理解。
      • 标记示例:你要使用合适的标记语言或者工具标记示例,如Markdown、HTML等,让示例能够正确地显示和高亮。
    • 期望(Expectation):你要给出你对于问题的期望结果或者解决方案,让回答者知道你想要得到什么。你要注意以下几个方面:
      • 明确期望:你要明确地说明你想要得到什么样的结果或者解决方案,不要含糊不清或者模棱两可。
      • 合理期望:你要合理地设定你的期望,不要过高或者过低,不要要求别人替你做所有的工作或者给你一个完美的答案。
      • 说明原因:你要说明你为什么有这样的期望,你是基于什么理论或者经验得出这样的结论,或者你是从哪里看到或者听说过这样的结果或者解决方案。
  • 沟通回复:在得到回复后,你应该及时、礼貌、有效地与回答者沟通,包括以下几个方面:
    • 感谢回复:你要对回答者表示感谢,即使他们的回答并不完全符合你的期望或者需求,你也要尊重他们的努力和贡献。
    • 评价回复:你要对回答者的回答进行评价,表明你是否认同或者接受他们的回答,以及你对他们的回答有什么看法或者建议。如果可能,你可以给他们的回答打分或者标记为最佳答案,以示鼓励和奖励。
    • 反馈结果:你要对回答者反馈你的问题是否已经解决,以及你是如何解决的。如果你找到了其他的解决方案或者有了新的发现,你也可以分享给回答者和其他人,让他们也能从中受益。
    • 提出补充:如果你对回答者的回答还有疑问或者不明白,你可以提出补充问题,但是要注意以下几个方面:
      • 限制数量:你要尽量限制补充问题的数量,不要无休止地追问,否则会让回答者感到厌烦和不耐烦。
      • 相关性:你要确保补充问题与原问题相关,不要跑题或者扯远,否则会让回答者感到困惑和不解。
      • 独立性:如果补充问题与原问题无关或者很远,你最好另外开一个新的问题来提问,而不是在原问题下继续提问,否则会让回答者感到混乱和不便。

案例

为了让你更好地理解如何提问,我给出了一些提问的案例,分别展示了好问题和坏问题的区别。请仔细阅读并比较这些案例,并尝试找出其中的优缺点。

案例一

  • 坏问题:

我想用Python做一个网站,请问怎么做?

  • 好问题:

我想用Python做一个简单的个人博客网站,我已经安装了Python 3.9.1和Django 3.1.5,并按照官方文档创建了一个项目和一个应用。但是当我运行python manage.py runserver命令时,浏览器显示Page not found (404)错误。我检查了我的urls.py文件和views.py文件,发现没有明显的错误。请问这可能是什么原因导致的?我应该如何解决?谢谢!

  • 分析:

    • 坏问题的缺点:

      • 标题太宽泛,没有说明具体想做什么样的网站。
      • 没有给出使用的工具和版本信息。
      • 没有给出遇到的问题和错误提示。
      • 没有给出期望的结果或者解决方案。
      • 没有表示礼貌和感谢。
    • 好问题的优点:

      • 标题清晰明确,说明了想做什么样的网站。
      • 给出了使用的工具和版本信息。
      • 给出了遇到的问题和错误提示。
      • 给出了期望的结果或者解决方案。
      • 表示了礼貌和感谢。

案例二

  • 坏问题:

为什么下面这段代码会报错?

def foo():
    print(x)

x = 10
foo()
  • 好问题:

Python中,函数的作用域是如何确定的?

我有一段代码如下:

def foo():
    print(x)

x = 10
foo()

我本以为这段代码会打印出10,因为我认为函数foo可以访问全局变量x。但是当我运行这段代码时,却报错了:

NameError: name 'x' is not defined

我不明白为什么会这样,我查阅了Python官方文档中关于作用域的部分,发现有这样一句话:

“A scope defines the visibility of a name within a block. If a local variable is defined in a block, its scope includes that block. If the definition occurs in a function block, the scope extends to any blocks contained within the defining one, unless a contained block introduces a different binding for the name.”

我想知道这句话是什么意思,以及它和我的问题有什么关系。谢谢!

  • 分析:

    • 坏问题的缺点:

      • 标题太简单,没有说明具体想问什么。
      • 没有给出错误提示信息。
      • 没有给出期望的结果或者解决方案。
      • 没有表示礼貌和感谢。
    • 好问题的优点:

      • 标题清晰明确,说明了想问什么。
      • 给出了示例代码和错误提示信息。
      • 给出了期望的结果或者解决方案。
      • 表示了礼貌和感谢。
      • 引用了官方文档中相关的内容,并说明了自己的困惑。

总结

通过以上的内容,我希望你能够对如何提问有了一个基本的了解和认识。提问是一种技能,也是一种艺术,它需要你不断地练习和学习,才能达到炉火纯青的境界。在此,我给出了一些如何提问的总结和建议,希望对你有所帮助:

  • 在提问之前,先尝试自己解决问题,通过搜索引擎、文档、FAQ等途径寻找答案或者线索。
  • 在提问时,给出一个简洁、明确、吸引人的标题,让回答者一眼就能看出你的问题是什么。
  • 在提问时,给出你的问题的背景信息,让回答者了解你的目的和环境。
  • 在提问时,给出你的问题的示例代码或者数据,让回答者能够复现你的问题。
  • 在提问时,给出你对于问题的期望结果或者解决方案,让回答者知道你想要得到什么。
  • 在得到回复后,及时、礼貌、有效地与回答者沟通,感谢他们的回答,评价他们的回答,反馈你的结果,提出你的补充。

最后,我祝愿你在提问的过程中能够收获知识、乐趣和友情。

相关文章
|
安全 搜索推荐 Unix
提问的艺术(一)
逛Q群的时候,看到一篇文章名叫:提问的艺术,当你向别人提问的时候,建议先参考下这篇文章。(有删改)
|
SQL 安全 搜索推荐
技术人如何提问?
这也是个技术活
88 0
|
SQL 安全 搜索推荐
提问的艺术:如何让别人喜欢回答你的提问
提问的艺术:如何让别人喜欢回答你的提问
299 0
提问的艺术:如何让别人喜欢回答你的提问
|
Java 程序员
话题讨论 | 程序员表白,不光需要“技术”,更需要勇气!
回忆起我们的点点滴滴,我们也有美好回忆。程序员应该如何表白呢 ?很大一部分是不够自信,怕穷,怕拒绝,其实更多的你可能需要的是一份勇气,爱,要大声说出来!恰逢官方正文,在此总结一下我们的点点滴滴,平凡而又伟大。
190 0
|
消息中间件 搜索推荐 关系型数据库
这样提问,大牛才会为你解答(提问的智慧)
这样提问,大牛才会为你解答(提问的智慧)
这样提问,大牛才会为你解答(提问的智慧)
|
运维 前端开发 关系型数据库
都说程序员的个人影响力靠的是写作和演讲,所以你会写作吗?
写作这件事,很多大佬都谈过,但我还是想从自己的角度去谈谈.
|
数据可视化 程序员 开发工具
学位论文写作的正确打开方式:程序员的理性与倔强
完成一篇博士论文有多难? 生命诚可贵,为了不浪费时间在一些机械无聊的工作上,本文介绍一种高效的写作方式并与传统写作方式进行详细的对比分析,希望对各位即将开始写论文的同学有帮助!
2550 0
|
程序员
禅与写简历的艺术
这是一篇写给程序员看的文章。 1.简历格式 程序员请用PDF格式的简历,可以先用Word进行编辑排版,完了之后再转格式。 具体原因: ①部分看简历的人使用Mac,不一定安装了office系列工具,而Mac自带的预览工具对Word的支持效果很一般; ②Word本身也分很多版本,不同版本之间兼容性不好,打开之后有时会出现排版混乱; ③部分技术人员(也许是果粉)对windows没什么好感,连带着对office系列软件也持保守态度。
1204 0
《写出心灵深处的故事》读书笔记
        害怕自己写得不够好,害怕自己得不到别人得认可。写作也需要勇气,需要不怕出丑的勇气。毕竟,不失败的人只有一种,那就是不尝试的人。         写出心灵深处的故事,各种体裁各为一章,回应写作、影评、回忆录、采访与报道、想象力写作等。
938 0