玩转 Stack Overflow 之提问篇

Stack Overflow是世界上最大的编程类问答网站, 大多数程序员或多或少和它有所接触: 即使你从来没有在它上面提问或回答过, 别忘了, 在搜索很多技术问题的时候, 结果的第一页往往就有几条链接到Stack Overflow的问题。

很 多人对于Stack Overflow的第一印象是: 很多编程问题都能在上面找到专业的答案, 太牛了。 但当问题没有找到合适答案, 而去上面提新问题的时候, 可能有人会发现自己的问题被残忍的 downvote,甚至被关闭、最后被删除。更有甚者, 发现自己被禁言了, 不允许再问问题。 这是Stack Overflow的另一面: 在一定程度上它对新手是很不友好的。

我 个人是Stack Overflow的活跃用户(这个(http://stackoverflow.com/users/1009479/yu-hao)就是我), 目前 reputation 超过 80K, 参与过很多的关闭/删除问题的投票(关闭问题需要5个rep超过3K的用户投票 , 删除问题需要3个或更多rep超过10K的用户投票 )。写这篇文章, 是为了分享一下我的经验, 讲讲如何有效的在Stack Overflow上问问题。

可以问什么样的主题

大 家都知道 Stack Overflow是编程类的问答社区, 但还真有人把它当成通用的问答社区了, 问些完全无关的问题。 其实, Stack Overflow 是有一系列兄弟网站的(目前已经有100+), 统称 Stack Exchange, 涵盖很多主题, 比如数学、物理、化学等科学类, 服务器管理、Latex、数据库等计算机类, 中文、俄文、日文等语言类, 详细的列表看这里, 不要让好问题问错地方哦。

允许的主题包括: 具体的编程问题、软件算法相关、通常只有程序员用的软件工具相关等。

有 些主题是比较容易弄错的, 比如一般的电脑操作问题, 应该去Super User(热门的 Linux/Unix, 和Ubuntu还有独立的站点), 专业的服务器问题, 应该去Server Fault。这些都不属于编程类的问题, 尽管不少程序员的日常工作也有涉及(想一想“怎么修电脑?”属于编程问题么)。 再举个例子, 同样是编辑器, Vim/Emacs/Atom相关的问题是可以的,因为基本只有程序员会用这些工具, 而 Word/记事本相关的一般就不可以。

什么样的问题应该避免问

编程相关还不够, Stack Overflow 要求问题必须是 「practical, answerable questions based on actual problems that you face」

这 是什么意思呢? 首先, 开放式的问题是不允许的,比如“你为什么喜欢PHP?”, 隔壁Quora会是更合适的对象。 其次, 问题应该不需要很长的篇幅来回答, 如果一个问题期待的回答足够写一本书, 那很可能会被关闭的。 各种寻求资源的问题应该避免,如 “要完成某某工作, 有什么Python的库可以用”, 或者“学习C++应该选择哪本书?”等, 因为答案会主观, 也容易吸引广告。 最后, 问题不要基于凭空的假设,要基于实际的难题。

需 要注意的是,你很可能见过一些违反上面规定的问题还在,而且浏览量很大, 尤其是一些寻求资源的问题, 和非编程相关的计算机问题等。 这是什么原因呢? 原来,早期的Stack Overflow的规则还比较松,也没有Super User之类的站点。 这些问题往往是08/09年问的,大多数现在已经被关闭了。

上面的规则如果遵守, 你的问题应该问对地方了。 下面继续说说内容上具体需要注意的。

直入主题

Stack Overflow不是论坛, 它的目标是希望成为编程类问答的一个超级数据库, 所以每个问题都不止是为了帮助提问者本人, 更重要的是希望将来能够帮助到每一个遇到同样问题的人。

所 以, 和问题无关的内容都被认为是一种噪音, 包括: 打招呼(比如 Hi, Hello, Good afternoon, Dear Coders等), 表示感谢(比如 Thanks, Any help would be appreciated等), 没必要的背景(比如 I’m a newbie in C#等), 你的签名 等。

可 能有人会不理解为什么这样规定, 尤其是不要表示感谢这点。 Stack Overflow社区的理由是, 对愿意阅读并尝试解答你问题的人来说, 最好的表达感谢的方式是upvote有帮助的回答, 以及选择其中一个作为答案。 每一句和问题无关的内容都增加了额外的阅读时间, 而一个问题可能会被大量的人阅读。 更多的相关讨论可以参见这里(http://meta.stackexchange.com/q/2950/224257)和这里(http: //meta.stackexchange.com/q/2950/224257)。

同样道理, 当有人回答你的问题之后, 也不要去添加无用的评论, 比如单纯的表达感谢的话, “+1”, 或者闲聊等。 评论的唯一用处是用来澄清疑问。

英语

作为一个英语社区, 不论提问、回答还是在评论中和别人互动, 都是要用英语的。

除 非英语水平真的很糟糕, 语法其实并不是最需要担心的,因为并不需要做到完美。Stack Overflow是允许自由的编辑其他人的问题/回答的(编辑者如果rep不到2K,需要经过评审才会生效)。 有很多人会热情的对问题进行编辑的, 包括修复可能的语法错误。 我想说的一点是, 要尽可能的保证单词拼写是正确的。 即使对英语不够好的人来说, 这也只需要多花一点时间检查就可以做到, 但它代表着对阅读你问题的人的尊重。 甚至很多英语母语的人在拼写上也不注意, 会把I’m 写成im, 把 want to写成 wanna之类的非正式英语, 这些都会降低问题被回答的概率。

内容

在发问题之前, 问自己几个问题:

  1. 你做过足够的研究么? 有的人连入门指南都没读上10分钟就去提问, 问的问题能有多少价值呢?
  2. 你尝试过搜索么? 至少要试过Google和站内搜索, 很可能相同的问题已经有答案了
  3. 你 试过debug么? 把你的想法或调试过程写在问题里,否则很可能会看到几条评论“Have you tried anything?”或“We don’t do your homework”之后问题就被downvote得惨不忍睹了。 因为大多数人是拒绝回答没有努力尝试的提问者的。

标签: 一个问题可以加1~5个标签, 大多数问题是和某种具体的编程语言相关的, 这个语言的标签通常是必须的, 否则相关语言的关注者们很可能根本见不到问题。

起一个好标题: 一般来说, 标题应该尽量用简介的语言描述具体的问题。 比如 C# number confusion就是个反例, 如果改成 Why does using float instead of int give me different results when all of my inputs are integers? 就要具体多了。

提供代码

对于编程类问题,的确有问题不需要代码也能表达清楚的, 但大多数问题都需要代码才能清晰的表达。“我声明了一个变量, 调用了几个函数, 然后它的值就变了, 为什么呢?” 这样的问题, 鬼才知道答案。

提供代码要注意: 不要贴截图, 难道你要回答者去照着截图敲键盘复现你的问题? 也不要只贴站外的链接, 如果站外链接能够提供一些额外的方便功能, 也要在贴代码的基础上附上该链接。

对于提供什么样的代码, Stack Overflow给出了一个可参考的标准: MCVE, 即Minimal, Complete, and Verifiable example

  • Minimal: 最小的, 也就是尽可能的去掉和问题无关的部分。 如果你贴了一个几百行的代码, 很少有人愿意花时间去仔细看。 构造最小化例子的过程本身也是debug的过程。
  • Complete: 完整的, 一个简单的判断是:别人看到问题, 可以通过复制你提供的代码复现出问题吗?
  • Verifiable: 可验证, 描述问题尽可能具体, “the code doesn’t work”这样的描述就很不好。 如果编译不过, 要加上编译错误信息; 如果运行报错, 也同样要加上具体的错误信息; 如果结果和你的预期不一致, 要说清楚你的预期结果是什么, 为什么会这样想。

格式

Stack Overflow的编辑器是Markdown格式的, 如果你还不熟悉, 建议去学一下, 因为Markdown真的是一个只要10分钟就可以学会的语言。

大多数的格式问题都是出在贴代码的地方, 如果你发现你的代码是普通文本, 而没有语法高亮等功能, 那你很可能是格式搞错了。 最方便的方法就是选择所有代码, 然后按键盘Ctrl + K 即可。

交流

有可能你的问题几分钟内就会有人回答, 也有可能有人对问题有疑问, 在评论中要求你解释。 可以评论@他们解释, 如果问题确实不够清晰, 编辑你的问题吧。 最后, 如果你自己发现了解答方法, 而还没人给出, 那就自己回答自己的问题吧。 自问自答是被鼓励的行为。

结语

看 完上面我的唠叨, 是不是也感觉到Stack Overflow对新手的不友好了呢? 但这是保持高质量内容的代价之一, 必须有一定的机制让低质量的问题不会泛滥, 才会有更多的人愿意花时间回答好的问题。 希望大家都能得到自己问题的答案, 有机会再讲讲如何回答问题。

转载请注明本文出处:http://www.infocool.net/kb/OtherDB/201606/157047.html

stack overflow

时间: 2024-10-07 08:51:49

玩转 Stack Overflow 之提问篇的相关文章

Stack Overflow上59万浏览量的提问:为什么会发生ArrayIndexOutOfBoundsException?

在逛 Stack Overflow 的时候,发现了一些访问量像昆仑山一样高的问题,比如说这个:为什么会发生 ArrayIndexOutOfBoundsException?这样看似简单到不值得一问的问题,访问量足足有 69万+,这不得了啊!说明有不少的初级程序员被这个问题困扰过.实话实说吧,我也有点吃不准为什么. 来回顾一下提问者的问题: ArrayIndexOutOfBoundsException 究竟意味着什么?我该如何摆脱这个错误. 如果你也曾被这个问题困扰过,或者正在被困扰,就请随我一起来

Stack Overflow 上排名前十的与API相关的问题

Stack Overflow是一个庞大的编程知识仓库,在Stack Overflow 上,数百万的提问被回答,并且这些回答都是高质量的.这就是为什么在Google搜索结果的排行榜上,Stack Overflow 总是位居首位. 虽然Stack Overflow上有非常多的提问,但是仍然每天都有大量的问题被提出,其中的很多都等待解答或者没有得到好的解答.因此,问题是如何找到答案的,通过Stack Overflow是不够的. 随着成千上万的开发者使用Java的API并且在Github上分享他们的项目

国内为什么没有好的 Stack Overflow 的模仿者?

国内为什么没有好的 Stack Overflow 的模仿者? 个人觉得, 高端的程序员会直接上stackoverflow提问, 所以国内中文的stackoverflow必然面对低端程序员. 鉴于中国程序员平均水平, 个人觉得面向低端程序员的中文stackoverflow有存在的价值. 搭建站点的技术难度其实不高, 能够完成这个任务的社区也很多, 但是为什么现在没有特别出众的出现? 3 条评论 分享 按投票排序按时间排序 43 个回答 赞同26反对,不会显示你的姓名 王雷,程序员.创业者 韩伟.M

(转)Stack Overflow 2016最新架构探秘

这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 2016 年 02 月统计数据有较大变化,下面给出 2016 年 02 月 09 号一天的数据,如下: HTTP 请求数 209,420,973 (+61,336,090) 网页加载次数 66,294,789 (+30,199,477) HTTP 流量发送有1,240,266,346,053 (+406

Stack Overflow 2016最新架构探秘

这篇文章主要揭秘 Stack Overflow 截止到 2016 年的技术架构. 首先给出一个直观的数据,让大家有个初步的印象. 相比于 2013 年 11 月,Stack Overflow 在 2016 年 02 月统计数据有较大变化,下面给出 2016 年 02 月 09 号一天的数据,如下: HTTP 请求数 209,420,973 (+61,336,090) 网页加载次数 66,294,789 (+30,199,477) HTTP 流量发送有1,240,266,346,053 (+406

为什么开发者热衷在Stack Overflow上查阅API文档?

摘要:一项新研究跟踪了Android开发者的访问历史,发现开发者多达二分之一的文档是从Stack Overflow上获取到的,而Stack Overflow上的示例也多于官方指南,开发者通过搜索更多时候是去访问Stack Overflow上的问题讨论而不是访问官方文档.那么,为什么开发者热衷在Stack Overflow上查看API文档呢? 微软等软件公司为API.服务和软件平台等主题创建数以百万计的文档,创建软件文档费时费力,然而却越来越不讨好,因为软件开发者对这些枯燥的文字日益失去兴趣.如果

我30天在Stack Overflow问答网站上回答问题的感受

想法的萌芽 如果非要总结下我多年来是如何使用Stack Overflow的话,我的答案就是:打开网页,搜索问题,查看Stack Overflow的搜索结果,参考答案,最后再关掉网页. 我的生活已经离不开Stack Overflow了.但我从来没有对那些有用的回答做出过反馈,更别提自己提问题和回答问题了. 不过我最终还是意识到,Stack Overflow的成功正是建立在其众多用户的慷慨解答上.我从这个网站上收获了很多,却从未做出回报,因为没有任何人.任何规则的约束.每个问题.每个答案或者每个有帮

为什么程序员一定要会用Google和Stack Overflow?

作为程序员,用Google比用百度更节省时间,此话不假. 在法国工作也有4年了,加上之前的两个6个月的实习,勉强算"5年"工作经历吧- 虽说我离编程大牛还相距甚远,但是: 这些年编程的一个很深的感触就是:95%的问题都可以在Google和Stack Overflow找到答案. 真的能达到95%吗?达不到怎么办呢? 我觉得很多时候不是Google或Stack Overflow的问题,而是不少朋友不太懂得如何快速有效地搜索到有用的信息,可以参看下面这篇知乎的帖子: 如何用好谷歌等搜索引擎?

Stack Overflow 2017 开发者调查报告

Stack Overflow 发布了 2017 开发者调查报告,此次有超过 64,000 名开发人员参与调查,分别对其技能.工具.学习趋势等数据进行了统计,现将其中一些有趣的数据和趋势撷取出来分享给大家. 一.开发角色 开发类型 大约有四分之三的受访者是 web 开发人员,不过这其中也有许多人表示正在努力构建桌面应用和移动应用. 具体开发类型 二.开发经验 Web 和移动开发人员平均而言,比其他技术学科的开发人员(如系统管理和嵌入式编程)的专业编码经验要少得多.软件行业是新人才的主要孵化器,经验