欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何在网络上提问?

程序员文章站 2024-01-04 08:03:40
...

如何提问?

主题原则

细化到提问里,这里给出一个提问的过程,请在提问时候严格遵守以下五个流程,熟悉后只要思路不变,
可以有无数的提问方法(这里就限制死了,请按照这个格式填表格的形式来提问):

  1. 描述你的需求、做这个需求的原因(什么是需求?做这个需求能得到什么?)

  2. 描述你的实现思路(想怎么做这个事情)

  3. 描述具体的实现过程(相对于思路更细节更具体的东西)

  4. 描述遇到的问题,得到的一切反馈(在编程中可以理解为各种信息,正确的、错误的)

  5. 所有涉及的最基本的具体信息(编程中就是所有代码)

五步原则在编程提问中的解释:

  1. 描述你的需求、做这个需求的原因(什么是需求?做这个需求能得到什么?)

你的做法可能是错误的,给出原因可以帮助他人发现你南辕北辙的解决方案。你的需求可能是错误的,给出原因可以帮助他人发现你错误的需求。

  1. 为什么要描述你的实现思路(想怎么做这个事情)

描述思路有助于他人搞懂你你正在做的事情、搞懂你遇到的问题,你解决问题的思路可能是错的,描述清楚有助于发现错误,也有助于帮助他人理解你的角度

  1. 为什么要描述具体的实现过程(相对于思路更细节更具体的东西)

描述实现过程有助于帮助他人理解你的具体问题

  1. 为什么要描述遇到的问题,得到的一切反馈(在编程中可以理解为各种信息,正确的、错误的)

对具体信息的描述可以帮助他人分析具体问题,所以要给出错误的具体、完整的信息,而不是残缺的截图或者零散的几句描述,这样起不到任何作用

  1. 为什么要贴出最基本的信息(编程中就是所有代码)

如果不尽量给出完整、简化、可运行、可重现的代码,他人很难定位具体问题,也就无从解决问题了.

正确案例与错误案例

错误示例:

很抱歉打扰你……万分感谢!本人某985机械本硕,研究生做的都是偏软件的(二次开发.工业软件开发)自己在学前端后端之类的东西……
好好学编程的东西以后进互联网能行吗……会不会因为是机械学院的把我fail了?

正确示例:

0、客套之类的

1、想做前端开发,因为钱很多,我喜欢编程,我觉得性价比比机械高,认真学习编程可以进入互联网行业做开发/测试/运维工程师么?

2、我想实现的思路是:

根据在某些网站上的求职信息,发现应该掌握知识A、B、C、D、E、F、G

3、实现的过程是:

A:学习某某本书籍、看某某开源库、自己动手做XXX

B:学习某某本书籍、看某某开源库、自己动手做XXX

C:学习某某本书籍、看某某开源库、自己动手做XXX

·······

4、遇到的问题和反馈信息:

在XXX过程中我遇到了XXX的问题,得到的XXX信息是XXX

在XXX过程中我遇到了XXX的问题,得到的XXX信息是XXX

在XXX过程中我遇到了XXX的问题,得到的XXX信息是XXX

5、最基本的信息:

我是某某高效某某专业的XXX

之前做过XXX

拿过XXX数学竞赛奖

英语能力XXXX

这五步过程中你要想做出得到人认真答复的提问,需要准备很多的工作,使用搜索引擎查阅相关的信息,
去找一些专业人士请教一些基本的知识等等等等,只有这样才能得到有效的建议。而不是简单随口的问一句。

如何在论坛提问?什么是“最短代码-错误重现”提问方式?

帖子标题=帖子内容的提炼 让他人看了标题就能大概知道是否能帮助你。切勿使用“求助、急、帮忙、新手、高手、在线等”等无任何意义的词语。

帖子正文部分应包含以下内容:

1. 粘贴一个简单的程序程序代码,并且让别人可以直接复制运行(尽量避免使用附件,Simulink模型除外);

2. 贴出你的错误或警告信息(特别重要),以及你已经尝试过的方法、步骤(必要的时候,可以上传一些截图);

3. 如果你使用了非MATLAB自带的工具箱函数,请打包(zip或者rar)上传你所使用的第三方函数(包);

4. 写上你使用的是哪个MATLAB版本(如:64位R2012a等),以及操作系统(如:32位XP系统、64位Windows 7系统等)。

参考网址:https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way

提问的智慧

提问前

在通过电邮、新闻组或论坛提技术问题以前,做以下事情:

  1. 尝试在你准备提问论坛的历史文档中搜索答案
  2. 尝试搜索互联网以找到答案
  3. 尝试阅读手册以找到答案
  4. 尝试阅读常见问题(FAQ)文档以找到答案
  5. 尝试自己检查或试验以找到答案
  6. 尝试请教懂行的朋友以找到答案
  7. 如果你是程序员,尝试阅读源代码以找到答案

提问时,请先表明你已做了上述事情,这将有助于建立你不是寄生虫与浪费别人时间的印象。最好再表述你从中学到的东西,
我们喜欢回答那些表现出能从答案中学习的人。

认真地思考,准备好你的问题。轻率的提问只能得到轻率的回答,或者压根没有。
在提问时,你越是表现出在此前做过思考与努力去解决自己的问题,你越有可能得到真正的帮助.

表明你有能力也乐意参与问题的解决是个很好的开端。“有没有人能指个方向?”,我这还差点什么?”,“我应该查哪个网站?”,
通常要比 “请给出我可以用的完整步骤”更容易得到回复,因为你表明了只要有人能指个方向,你就很乐意完成剩下的过程。

提问时

  1. 仔细挑选论坛
    主题相关!
  2. 面向新手的论坛和互联网中继聊天(IRC)通常响应最快.
  3. 使用有意义且明确的主题.
    使用主题的好惯例是“对象──偏差”(式的描述),许多技术支持组织就是这样做的。
    在“对象”部分指明是哪一个或哪一组东西有问题,在“偏差”部分则描述与期望的行为不一致的地方。
  4. 使问题容易回复
    回复问题不需要打开邮箱等交流工具,而是顺手就可以回复。
  5. 用清晰、语法、拼写正确的语句书写
    问题要表达清楚,面对面提问最好先写在纸上。
  6. 通用语言
    如果在非母语论坛提问,你的拼写与语法错误会得到有限的宽容,
    但懒惰完全不会被容忍(是的,我们通常看得出其中的差别)。同时,除非你知道回复者使用的语言,请使用英语书写。
  7. 使用易于读取且标准的文件格式发送问题

提问的问题内容

描述问题应准确且有内容

  1. 仔细、清楚地描述问题的症状
  2. 描述问题发生的环境(主机、操作系统、应用程序,任何相关的),提供销售商的发行版和版本号(如:“Fedora Core 7”、“Slackware 9.1”等)
  3. 描述提问前做过的研究及其理解。
  4. 描述提问前为确定问题而采取的诊断步骤。
  5. 描述最近对计算机或软件配置的任何相关改变。
  6. 如果可能,提供在可控环境下重现问题的方法。
  7. 尽最大努力预测黑客会提到的问题,并提前备好答案。

如果你认为是代码有问题,向黑客提供在可控环境下重现问题的方法尤其重要。当你这么做时,得到有用且及时回复的可能性将大大增加。

你应该(写得)精炼且有内容,简单地将一大堆代码或数据罗列在求助消息中达不到目的。
如果你有一个很大且复杂的测试样例让程序崩溃,尝试将其裁剪得越小越好。

编写软件的人总是非常辛苦地使它尽可能完美。如果你声称找到了臭虫,
也就置疑了他们的能力,即使你是对的,也有可能会使其中的部分人感到不快。

描述问题症状而不是猜测
告诉黑客是什么导致了问题是没用的(如果你的诊断理论是了不起的东西,你还会向别人咨询求助吗?)。
所以,确保只是告诉他们问题的原始症状,而不是你的解释和理论,让他们来解释和诊断。
如果你认为陈述自己的猜测很重要,应清楚地说明这只是你的猜测并描述为什么它们不起作用。

按时间先后罗列问题症状
刚出问题之前发生的事情通常包含有解决问题最有效的线索。所以,记录中应准确地描述你、电脑和软件在崩溃前都做了什么。
在命令行处理的情况下,有会话日志(如运行脚本工具生成的)并引用相关的若干(如20)行记录会非常有帮助。

描述目标而不是过程
如果你想弄清楚如何做某事(而不是报告一个臭虫),在开头就描述你的目标,然后才陈述遇到问题的特定步骤。

经常出现这种情况,寻求技术帮助的人在脑袋里有个更高层次的目标,
他们在自以为能达到目标的特定道路上被卡住了,然后跑来问该怎么走,但没有意识到这条路本身有问题,结果要费很大的劲才能通过。

要想理解专家生活的世界,可以这样设想:那里有丰富的专长资源但稀缺的响应时间。你暗中要求他们奉献的时间越少,
你越有可能从这些真正懂行也真正很忙的专家那里得到解答。
所以限定你的问题以使专家回答时需要付出的时间最少──这通常与简化问题还不太一样。举个例,“请问可否指点一下哪有好一点的 X 解释?
”通常要比“请解释一下 X”明智。如果你的代码不运行了,通常请别人看看哪有问题比叫他们帮你改正更明智。

最精确描述代码问题的方法是提供一个能展示问题的最小测试样例。什么是最小测试样例?
它是对问题的展现,只需要刚好能够重现非预期行为的代码即可。如何生成一个最小测试样例?
如果你知道哪一行或哪一段代码会产生问题,将其复制并提供刚好够用的外围支撑代码以构成一个完整的样例
(够用是指源码刚好能被编译器、解释器或任何处理它的程序所接受)。
如果你不能将问题缩小到特定的段落,复制源码并去除那些与问题无关的代码段。你能提供的最小测试样例越小越好(参见 量不在多,精炼则灵 )。

一般来说,避免提“是或否”类型的问题,除非你想得到 “是或否”类型的回答。

礼貌总是有益的

礼貌一点,使用 请 和 谢谢你的关注 或者 谢谢你的关照,让别人明白你感谢他们无偿花时间帮助你。

我们必须指出,本文唯一受到一些老黑客认真反对的地方是以前曾经推荐过的“提前谢了”,一些黑客认为这隐含着事后不用再感谢任何人的暗示。
我们的建议是要么先说 提前谢了,事后 再 对回复者表示感谢,要么换种方式表达,譬如用 谢谢你的关注 或 谢谢你的关照.

问题解决后向所有帮助过的人追加一条消息,让他们知道问题是如何解决的并再次感谢。
如果问题在邮件列表或新闻组中受到广泛关注,在那里追加此消息比较恰当。

考虑一下怎样才能避免他人将来也遇到类似的问题,问问自己编一份文档或 FAQ 补丁会不会有帮助,如果是的话就将补丁发给维护者。

好问题与坏问题

同样的问题两种提法,一种愚蠢,另一种明智。

愚蠢:我在哪能找到关于 Foonly Flurbamatic 设备的东西?

这个问题在乞求得到 “搜搜该死的网络”(STFW) 式的回复。

明智: 我用谷歌搜索过“Foonly Flurbamatic 2600”,但没有找到什么有用的,有谁知道在哪能找到这种设备的编程信息?

这个人已经搜索过网络了,而且听起来他可能真的遇到了问题。

愚蠢: 我不能编译某项目的源代码,它为什么这么破?

提问者假设是别人搞砸了,太自大了。

明智: 某项目的源代码不能在某 Linux 6.2 版下编译。我读了常见问题文档,但其中没有与某 Linux 相关的内容。这是编译时的记录,我做错了什么吗?

提问者已经指明了运行环境,读了常见问题文档(FAQ),列出了错误,也没有假设问题是别人的过错,这家伙值得注意。

愚蠢: 我的主板有问题,谁能帮我?

某黑客对此的反应可能是:“是的,还需要帮你拍背和换尿布吗?”,然后是敲下删除键。

明智: 我在 S2464 主板上试过 X、Y 和 Z,当它们都失败后,又试了 A、B 和 C。注意我试 C 时的奇怪症状,显然某某东西正在做某某事情,这不是期望的行为。通常在 Athlon MP 主板上导致某某事情的原因是什么?有谁知道我还能再试点什么以确定问题?

相反地,这个人看来值得回答。他或她展现了解决问题的能力而不是坐等天上掉馅饼。

在最后那个问题中,注意“给我一个回答”与“请帮我看看我还能再做点什么测试以得到启发”之间细微但重要的差别。

如何更好地回答

态度和善一点。问题带来的压力常使人显得无礼或愚蠢,其实并不是这样。

对初犯者私下回复。 对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找 FAQ 都不知道。

**如果你不确定,一定要说出来! 一个听起来权威的错误回复比没有还要糟,别因为听起来象个专家好玩就给别人乱指路。**要谦虚和诚实,给提问者与同行都树个好榜样。

如果帮不了忙,别妨碍。 不要在具体步骤上开玩笑,那样也许会毁了用户的安装──有些可怜的呆瓜会把它当成真的指令。

探索性的反问以引出更多的细节。 如果你做得好,提问者可以学到点东西──你也可以。试试将很差的问题转变成好问题,别忘了我们都曾是新手。

尽管对那些懒虫报怨一声“读读该死的手册”(RTFM)是正当的,指出文档的位置(即使只是建议做个谷歌关键词搜索)会更好

如果你决意回答,给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计,应推荐更好的工具,重新组织问题。

请回答真正的问题!如果提问者已经做了自己该做的研究,并且说明尝试过 X,Y,Z,A,B 与 C 都没有得到想要的結果,
那么回复 试试 A 或 B 或者给出一个内容为 试一下 X,Y,Z,A,B 或 C 的链接将极其无益!

帮助你的社区从中学习。当回复一个好问题时,问问自己 如何修改相关文件或 FAQ 文档以免再次解答同样的问题?,接着再向文档维护者发一份补丁。

如果你是在研究一番后才做出的回答,展现你的技巧而不是直接端出结果。毕竟“授人以鱼,不如授人以渔”。

参考文章:https://www.chiark.greenend.org.uk/~sgtatham/bugs-cn.html

如何有效地报告 Bug

简单地说,报告bug的目的是为了让程序员看到程序的错误。您可以亲自示范,也可以给出能导致程序出错的、详尽的操作步骤。
在bug报告里,要设法搞清什么是事实(例如:“我在电脑旁”和“XX出现了”)什么是推测(例如:“我想问题可能是出在……”)。
如果愿意的话,您可以省去推测,但是千万别省略事实。

如果您不是报告bug,而是寻求帮助,您应该说明您曾经到哪里找过答案,(例如:我看了第四章和第五章的第二节,但我找不到解决的办法。)
这会使程序员了解用户喜欢到哪里去找答案,从而使程序员把帮助文档做得更容易使用。

报告bug的最好的方法之一是“演示”给程序员看。让程序员站在电脑前,
运行他们的程序,指出程序的错误。让他们看着您启动电脑、运行程序、如何进行操作以及程序对您的输入有何反应。

他们对自己写的软件了如指掌,他们知道哪些地方不会出问题,而哪些地方最可能出问题。他们本能地知道应该注意什么。在程序真的出错之前,
他们可能已经注意到某些地方不对劲,这些都会给他们一些线索。他们会观察程序测试中的每一个细节,并且选出他们认为有用的信息。

精确的描述您看到了什么。告诉他们为什么您觉得自己所看到的是错误的,
最好再告诉他们,您认为自己应该看到什么。如果您只是说:“程序出错了”,那您很可能漏掉了非常重要的信息。

如果您看到了错误消息,一定要仔细、准确的告诉程序员,这确实很重要。在这种情况下,程序员只要修正错误,而不用去找错误。
他们需要知道是什么出问题了,系统所报的错误消息正好帮助了他们。
如果您没有更好的方法记住这些消息,就把它们写下来。只报告“程序出了一个错”是毫无意义的,除非您把错误消息一块报上来。

当一个错误或bug发生的时候,您可能会做许多事情。但是大多数人会使事情变的更糟。当程序出毛病的时候,立刻停止正在做的任何操作。
不要按任何健。仔细地看一下屏幕,注意那些不正常的地方,记住它或者写下来。然后慎重地点击“确定” 或“取消”,选择一个最安全的。
学着养成一种条件反射——**一旦电脑出了问题,先不要动。**要想摆脱这个问题,关掉受影响的程序或者重新启动计算机都不好,
一个解决问题的好办法是让问题再次产生。程序员们喜欢可以被重现的问题,快乐的程序员可以更快而且更有效率的修复bug。

做程序员也是一样。即便您自己的“诊断”有时真的有帮助,也要只说“症状”。“诊断”是可说可不说的,
但是“症状”一定要说。同样,在bug报告里面附上一份针对bug而做出修改的源代码是有用处的,但它并不能替代bug报告本身。

最重要的是:程序员想要确定他们正在处理的是一个真正的“间歇性错误”呢,还是一个在另一类特定的计算机上才出现的错误。
他们想知道有关您计算机的许多细节,以便了解您的机器与他们的有什么不同。
有许多细节都依仗特定的程序,但是有一件东西您一定要提供——版本号。程序的版本、操作系统的版本以及与问题有关的程序的版本。

问题描述

  1. 精确。
    如果做相同的事情有两种方法,请说明您用的是哪一种。例如:“我选择了‘载入’”,可能意味着“我用鼠标点击‘载入’”或“我按下了‘ALT+L’”,
    说清楚您用了哪种方法,有时候这也有关系。
  2. 详细。
    信息宁多毋少!如果您说了很多,程序员可以略去一部分,可是如果您说的太少,他们就不得不回过头再去问您一些问题。
    有一次我收到了一份bug报告只有一句话,每一次我问他更多事情时,他每次的回复都是一句话,于是我花了几个星期的时间才得到了有用的信息。
  3. 慎用代词。
    诸如“它”,“窗体”这些词,当它们指代不清晰的时候不要用。来看看这句话:“我运行了FooApp,
    它弹出一个警告窗口,我试着关掉它,它就崩溃了。”这种表述并不清晰,用户究竟关掉了哪个窗口?是警告窗口还是整个FooApp程序?
    您可以这样说,“我运行FooApp程序时弹出一个警告窗口,我试着关闭警告窗口,FooApp崩溃了。”这样虽然罗嗦点,但是很清晰不容易产生误解。
  4. 检查。
    重新读一遍您写的bug报告,您觉得它是否清晰?如果您列出了一系列能导致程序出错的操作,那么照着做一遍,看看您是不是漏写了一步。

官方小结

bug报告的首要目的是让程序员亲眼看到错误。如果您不能亲自做给他们看,给他们能使程序出错的详细的操作步骤。

如果首要目的不能达成,程序员不能看到程序出错。这就需要bug报告的第二个目的来描述程序的什么地方出毛病了。详细的描述每一件事情:您看到了什么,您想看到什么,把错误消息记下来,尤其是“错误消息号”。

当您的计算机做了什么您料想不到的事,不要动!在您平静下来之前什么都别做。不要做您认为不安全的事。

尽量试着自己“诊断”程序出错的原因(如果您认为自己可以的话)。即使做出了“诊断”,您仍然应该报告“症状”。

如果程序员需要,请准备好额外的信息。如果他们不需要,就不会问您要。他们不会故意为难自己。您手头上一定要有程序的版本号,它很可能是必需品。

表述清楚,确保您的意思不能被曲解。

总的来说,最重要的是要做到精确。程序员喜欢精确。

相关标签: 杂七杂八

上一篇:

下一篇: