title: 如何向开源社区提问题 categories:
What steps will reproduce the problem?
该问题的重现步骤是什么?
1.
2.
3.
What is the expected output? What do you see instead?
你期待的结果是什么?实际看到的又是什么?
What version of the product are you using? On what operating system?
你正在使用产品的哪个版本?在什么操作系统上?
Please provide any additional information below.
如果有的话,请在下面提供更多信息。
<p>遵循这个模板去描述问题,经常能省很多事。作者一般也非常欢迎通过模板提交的问题。如果社区没有提供模板,也可以自己遵循以上模板来提交。</p>
<p>下面针对问题内容,具体说说一些需要注意的点。</p>
<h4><a class="anchor" name="-9" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-9"></a><strong>语法正确、格式清晰</strong></h4>
<p>虽然我们不是作家,但正确的语法、清晰的格式,可以让读者赏心悦目,也就更有心情帮你一起思考解决问题。</p>
<p>对于很多需要代码来描述的问题,要尤其注意格式,比如</p>seajs.use('jquery',function($){$(document).ready(function() { /* ... */ })});
<p>可读性不如</p>
<div class="highlight">
```
seajs.use('jquery', function($) {
$(document).ready(function() {
// ...
});
});
```
</div>
<p>GitHub 的 Markdown 语法可以很好地支持代码排版、语法高亮等,建议书写代码时,一定要先阅读下说明:<a href="http://github.github.com/github-flavored-markdown/">GitHub Flavored Markdown</a>。这能让你的内容看起来很专业,社区也就更有意愿会去帮助你,否则糟糕的排版,经常带来的是发帖之后的石沉大海。</p>
<h4><a class="anchor" name="-10" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-10"></a><strong>描述事实、而不是猜测</strong></h4>
<p>事实是指,依次进行了哪些操作、产生了怎样的结果。比如</p>
<blockquote>
<p>我在 Windows XP 下用 IE6 打开 <a href="http://seajs.org/">seajs.org</a> 后,点击\5 分钟上手 Sea.js",这时浏览器弹出脚本错误提示,例子显示不正确。</p>
</blockquote>
<p>上面是一段比较好的事实描述(更好的是把错误提示也截图上来),而不要像下面这样猜测:</p>
<blockquote>
<p>Sea.js 在 IE6 下运行不正常,我怀疑是源码第 213 行有问题。</p>
</blockquote>
<p>上面的描述,会让作者一头雾水、甚至很恼火。尽量避免猜测性描述,除非你能先描述事实,在事实描述清楚之后,再给出合理的猜测是欢迎的。</p>
<p>对于前端项目来说,如果能提供可重现错误的在线可访问代码,那是最好不过的。一旦你这么用心去做了,作者往往也会很用心地立马帮你解决。</p>
<h4><a class="anchor" name="-11" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-11"></a><strong>描述目标、而不是过程</strong></h4>
<p>经常会有这种情况,提问者在脑袋里有个更高层次的目标,他们在自以为能达到目标的特定道路上卡住了,然后跑来问该怎么走。比如</p>
<blockquote>
<p>Sea.js 的 parseMap 方法在遇到 map 的多个配置项同时匹配同一个路径时,应该允许用户指定是全部生效还是仅第一个匹配的配置项生效。</p>
</blockquote>
<p>上面这个问题的背后,提问者实际上想解决的是如何通过 Sea.js 来做版本管理。提问者选择了通过 map 的方式来实现,但这过程中遇到了问题,因此跑过来继续怎么走。然而,如果只是描述过程,往往会把作者也绕进去。</p>
<p>实际情况却是,提问者选择的路本身就是一条崎岖之路,对于要解决的问题,实际上有更好的方式。这种情况下,描述清楚目标,讲清楚要干什么非常重要。</p>
<p>在描述自己是怎么做之前,一定要先描述要做什么。提问题时,What 往往比 How 更重要。</p>
<h4><a class="anchor" name="-12" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-12"></a><strong>要有具体场景</strong></h4>
<p>无论在开源社区,还是微博、知乎等平台上,有一种非常常见的问题:</p>
<blockquote>
<p>如何维护 JavaScript 代码? 如何使用 Sea.js 进行模块化开发?</p>
</blockquote>
<p>这类问题还有很多,每每遇到,只能笑笑,然后悄悄地忽略掉。因此这类问题很难回答,就如下面这些问题一样:</p>
<blockquote>
<p>如何才能让生命有意义? 如何打败淘宝?</p>
</blockquote>
<p>这类提问者,一般比较浮躁,经常对问题本身也没有经过思考。踏实的提问者,不会让问题浮在空中无法回答,而会在具体场景中让问题落地:</p>
<blockquote>
<p>我的项目有 20 多个 JS 文件,接下来还会急剧增加。目前遇到以下问题......(省略五百字)...... 请问如何维护?</p>
</blockquote>
<h4><a class="anchor" name="-13" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-13"></a><strong>仔细检查、确保准确</strong></h4>
<p>是人都会犯错误,特别是在如此快节奏的互联网环境下。好不容易把问题描述清楚时,不要急着立刻提交。在提交前,至少保证从头到尾再仔细阅读一遍,比如语法错误、错别字、标点符号、排版等等。做到这些,不光是尊重别人,也是尊重自己。</p>
<h3><a class="anchor" name="-14" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-14"></a>提问后</h3>
<p>提交问题后,建议通过邮件等方式订阅回复。互联网上最有效的沟通方式是异步沟通,不要期待作者马上回复,也不要心烦意乱着急地等待。出去看看天,数数云朵,你会逐步明白什么是风轻云淡。</p>
<h4><a class="anchor" name="-15" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-15"></a><strong>尽可能补充信息</strong></h4>
<p>在接收到回复时,仔细阅读。最经常的情况是,社区回复的,经常不是你想要的。比如</p>
<blockquote>
<p>根据你的描述,问题无法重现。能否提供具体使用环境和重现步骤?</p>
</blockquote>
<p>这时要淡定。仔细看看自己提交的问题描述是否足够清晰,如果有可补充的信息,尽量补充,以帮助作者能尽快定位问题。比如</p>
<blockquote>
<p>很抱歉,我前面有一步描述不正确,实际情况是我是在 IETester 中运行的......</p>
</blockquote>
<p>谦和淡定的交流,不光能帮助你解决问题,还有助于你结交更多朋友。</p>
<h4><a class="anchor" name="-16" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-16"></a><strong>适当的总结</strong></h4>
<p>当问题终于解决时,建议对问题进行总结。可以编辑原帖,也可以通过博客等方式总结。你的总结,会让遇到同样问题的朋友们受益,并且对自己的技能也是一种提高。前端业界,无论国内还是国外,有很多牛人之所以成为牛人,很大程度上都是因为有总结思考的好习惯。</p>
<h4><a class="anchor" name="-17" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-17"></a><strong>不要忘记感谢</strong></h4>
<p>最后,记得感谢。很多开源软件的作者,都是利用业余时间在创作代码。你的感谢,汇集许许多多大家的感谢,会让开源社区充满爱与力量。</p>
<h3><a class="anchor" name="-18" href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md#-18"></a>延伸阅读</h3>
<ul>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs-cn.html">如何有效地报告 Bug</a></li>
<li><a href="http://www.wapm.cn/smart-questions/smart-questions-zh.html">提问的智慧</a></li>
<li><a href="http://code.google.com/p/cpyug/wiki/ZenForAsk">回答的智慧</a></li>
</ul>
<hr>
<p>最后的最后,如果你认可这篇文章,欢迎以各种形式转载。你的传播,能让整个开源社区更美好。</p><p>本文转自:<a href="//github.com/seajs/seajs/blob/master/CONTRIBUTING.md" target="_blank">github</a></p>