天天看点

StackOverFlow提问的艺术

在Stack Overflow提问的检查表,相信大多数混迹在StackOverFlow的人都己经养成了这个习惯,才会让它的氛围如此友好.

本文翻译/整理自《Stack Overflow question checklist》,作者Jon Skeet是Stack Overflow的传奇用户, reputation高居第一位, 贡献过大量优质回答, 尤其是C#/Java领域。 他的这篇文章提供了一个简短的提问指南:

提问之前你做过研究吗? <注1>

你是否说明了自己试过哪些方法解决问题?

你说明你使用的编程语言/平台了吗, 包括版本号?

如果你的问题包含代码, 你是否已经改写成最小且完整的程序?<注2>

如果你的问题包含代码, 你是否检查过代码格式?<注3>

如果你的代码不能编译, 问题中是否包含了编译错误信息?

如果你的问题不包含代码, 你确认不需要吗?

如果你的程序抛出了异常, 问题中是否包含异常信息和堆栈回溯(stack trace)?

如果你的程序的输出结果和预期不同, 你是否说明了你的预期结果是什么, 你为什么这么想, 以及程序的实际结果?

如果你的问题和本地化有关(语言,时区等), 问题中是否包含了相关的信息?

你是否检查过问题的格式是否正确?

你是否检查过拼写和语法?<注4>

你是否认真读过自己的问题, 确认问题对一个不了解问题背景的人也能明白?

如果以上任何一个问题的答案是否定的话, 很可能你提问前需要再修改一下问题。 我知道这听上去像是不少工作, 但它能帮助你尽快的得到答案。别忘了你是在请求他人用自己的善心帮助你, 你有义务让他们的工作尽可能的简单。

注1: 如果你从“这怎么不工作了”到“应该去问个问题”只花了不到10分钟, 那很可能你的研究还不够。

注2: 理想情况下, 你的代码应该可以让回答者复制, 粘贴到编辑器, 编译, 运行, 然后就能看到问题输出。 命令行程序适用于这样的标准(除非你的问题和用户界面有关, 最好用命令行程序)。 去掉任何和问题无关的代码, 但保证可以复现问题。

注3: 代码最好不需要水平滚动, 这可能需要你从IDE复制代码之后做些额外的处理。 为了那些愿意帮助你的人花点时间把问题表达清楚吧。

注4: 我明白很多Stack Overflow用户母语不是英语, 我们并不要求完美, 只是希望你做过努力。如果你清楚自己英语不好, 找一个同事/朋友帮你改改吧。k