提问的艺术

为什么要写这个内容

今天在AirTest讨论群里面有人提问、但是由于问题实在是。。。。所以无人回答、大致内容如下。

提问者:请问下 python 怎么远程操作win服务器

我:需求没说清楚呀、就远程执行几条命令 还是什么?

提问者:1、获取服务器特定文件夹下的文件 2、运行可执行文件

我:windows上有一个WS-Management协议、可以用PowerShell来远程执行一些命令

我:你可以看看能不能解决你的问题

原本以后对话到此结束了、提问者自己去Google一下就能知道该怎么做了、可是半小时之后提问者再次在群里提问

提问者: import paramiko 这个可以吗

其他群成员:这大哥天天问的都是一些奇怪的问题、你import一个库,也要问别人可以不可以。。

当然这个提问者、到最后也没人在回答他的问题;

所以我翻出一篇2004写的老文章How To Ask Questions The Smart Way;这篇文章的最新版本是3.9;也就是2014年更新。

原作者是Eric S. Raymond,这篇文章在黑客界拥有很高的地位,指引无数黑客前进;

原文比较长、我把重要的核心的内容提炼出来、希望对所有人有帮助。

提问前需要做的事情

在通过邮件、讨论组、论坛或社区提问之前,请先尝试做以下事情寻找答案
  • 使用论坛、知乎、百度知道、Quaro的搜索功能;
  • 善用google、百度或其他搜索引擎在网络搜寻;
  • 阅读说明书或者使用手册;
  • 阅读网站上[常见问题解答];
  • 自己检查或做试验;
  • 请教熟悉此问题的朋友;
  • 如果你是程序员,尝试阅读源代码。

提问时,请先表明你已做了上述事情,这将有助于改变你是懒又肥的寄生虫形象,同时给别人一种你不会浪费别人时间的印象。

耐心一点,不要指望Google搜索几秒钟就能解决一个复杂的问题。读一下与产品或项目相关的常见问题解答。

认真地思考,准备好你的问题。草率的提问只能得到草率的回答,甚至得不到回答。

永远不要假设你能得到问题的答案、你没有为问题付费;

认真选择提问的论坛、讨论群

谨慎地要选择提问的地方
  • 张贴与论坛主题无关的问题;
  • 在面向高级技术问题的论坛上张贴初级的问题,反之亦然;
  • 在不同的论坛或讨论小组同时张贴同一个问题;
  • 向非熟人或没有义务解决你问题的人发送私人问题邮件

用字义清晰、语法标准、拼写正确的语句撰写问题

经验告诉我们,粗心草率的人通常也会粗心草率地思考与编程。回答这些粗心草率者的提问没有什么好处,我们宁可将时
间花在其他地方。

清楚、正确地表达你的问题非常重要。如果你嫌斟字酌句麻烦,那我们也懒得回复。所以,请稍微花一点点时间组织语
言,也用不着太正式和死板──事实上,黑客文化提倡使用非正式词句、网络语言和幽默的语句,同时注意在遣词造句的过
程中体现文字的准确性和你思考问题的积极性。

准确简练地描述问题

问题的描述应该包含以下内容
  • 仔细而清楚地描述你的问题或错误的症状;
  • 问题发生的环境(主机品牌、操作系统、应用程序,任何相关的);
  • 提问前做过的调查研究及对其的理解;
  • 提问前为确定问题而采取的诊断步骤;
  • 最近对计算机或软件配置的任何相关改变;
  • 如果可能,提供在可控环境下重现问题的方法;

话不在多,好在精炼

你应该精炼且简要地描述问题,简单地将堆砌代码或罗列数据是没有用的。如果你有一个体积庞大且复杂的测试样本,尝试将其裁剪,越小越好。

这至少有三个原因
  • 第一:如果你把精力放在简化问题上,你就更有可能得到答案;
  • 第二:简化问题会使你更有可能得到一个答案。有用回答。
  • 第三:在完善错误报告的过程中,您可以自己开发一个修复程序或解决方法。

跪求是不能解决问题的

有些人明白用傲慢的方式提问是得不到答复的,所以他们走了另一个极端,转而低声下气地哀求:

有的论坛专门设置了新手提问区,如果你真的认为遇到了新手该遇到的问题,直接到那去提问就好,别再跪求了。

明确你的问题

明确的告诉受访者、你需要得到什么样的帮助、提供思路?提供解决方案?还是直接提供代码片段?

问题解决后,对解决方案做一个简短的说明

在问题解决后向所有帮助过的人回复一条信息,让他们知道问题是如何解决的并再次感谢

这种后续的跟进信息不仅是礼貌的回复,而且是内容的分享,因为这些后续的解决方案会帮助其他有同样问题的人,他们会在论坛中找到你的解决方案,并因此受益。

最后、考虑到将来也会有人面临类似的问题,如何避免重蹈覆辙呢?你可以自己写一篇文章或者对FAQ进行补充;比如我这篇文章。

回到我们最开始的提问者

如果能修改一下提问的内容、那么得到的回答的机率会直线上升

提问者:我想用Python来远程操作一台windows服务器、获取一下指定文件夹下的文件、并执行它;
提问者:前面有一个前辈/友人提供了一个思路用PowerShell配合WS-Management协议;我在用paramiko第三方库的时候遇到点问题、babababababa?
请问:大家有没有遇到和我一样的问题、或者有其他的解决方案呀?

对于看到这个问题的人来说
  • 1、问题明确、想远程执行Windows服务器上执行文件
  • 2、在用paramiko第三方库来做这个事情、但是遇到点问题

这样以来、用过paramiko库的人可能会给他一些建议;
如果有人用Python远程执行过windows上的执行文件也是可以提供另外的解决思路;

参考文章