Skip to content

如何提问

hankcs edited this page Dec 12, 2019 · 9 revisions

"在和这些资深老外程序员交流的过程中,我还学会了如何提问。如果你想提交一个bug,那你应该说明这些内容:什么情况下会出现这个bug,为了解决这个bug,你做了什么尝试,你觉得引发这个bug的原因可能是什么。然后还要把所有的log,crash,dump之类的文件都给他。详情可以参看“如何提问”这篇文章。很多人提问的习惯不太好,比如有人说:内存溢出了,怎么办?上下文都没有,我怎么知道怎么办!" ——《池建强:我的人生元编程(图灵访谈)》

感谢大家的热情反馈,我也明白提问者的心情是焦急的,但如果你的问题无法复现,则永远不会得到解决。换位思考,如果你的同事没头没脑地问你“猪有多大?”想必你也一头雾水,爱莫能助——哪头猪?多大指的是体型还是年龄? 请问你平时是如何向你的同事,特别是第一次见面的同事问问题的? 请问你平时,又是如何向陌生人问路的?为什么现实世界中的礼仪,不能在同为公共场所的GitHub稍微遵守一下呢? 我认为,友好的提问方式,才能体现良好的个人修养与情商。

一个友好的issue至少必须包含:

  • 版本号
  • 触发代码
  • 输入输出

触发代码指的是,你是如何调用的。尽量去掉无关的代码,使问题突出。 所谓的输入输出指的是,引发问题的数据和具体的输出。比如对分词来讲,输入就是一个句子。输出指的是在你的机器上得到什么结果,包括异常等。 如果问题涉及到用户词典,你可以通过com.hankcs.hanlp.dictionary.CustomDictionary#add(java.lang.String)接口模拟。 最终的触发代码应当类似如下:

    public void testIssue1234() throws Exception
    {
        CustomDictionary.add("用户词语");
        System.out.println(StandardTokenizer.segment("触发问题的句子"));
    }

缺少任意一项的issue将被视作不友好的issue,会导致如下情况:

  • 被贴上无效标签
  • 被推迟到下个周末处理
  • 被直接关闭并忽略

目前issue模板硬性规定了这些必填字段,不按issue模板填写,保证不回复! 如果你提交了一个不友好的issue,请仔细阅读本文,或者《提问的智慧》,然后补充必需的信息,最后耐心排队等待处理。

谢谢合作!