提问的智慧(5)

2014-05-22 发布

#三思而后问

下面是些典型的愚蠢问题和黑客不回答它们的原因和想法。

问:1、我到哪可以找到某程序或X资源?

答: 在我找到的地方啊,笨蛋!──你就不会在网页找么,真抓狂,难道还有人不知道如何使用Google吗?

问:2、我怎样用X做Y?

答:如果你想得出Y的结果,那么请不要在想得出Y的结果前提供X的方法,这样的问题表明提问者不但对X完全无知,也对Y了解不深,这个问题还表明提问者已经被某种思维定势禁锢住了,最好让他们将问题整理好再来提问。

问:3、如何配置我的shell提示?

答:如果你有足够的智慧提这个问题,你也该有足够的智慧去「Read The Fucking Manual」(RTFM),然后自己去找出来。

问:4、我可以用Bass-o-matic文件转换工具将AcmeCorp文档转为TeX格式吗?

答: 试试就知道了。如果你试过,你既知道答案,又不用浪费我的时间。

问:5、我的{程序、配置、SQL 语句}不运行了。

答: 这不是一个问题,我也没有兴趣去猜你有什么问题──我有更要紧的事要做。看到这种东西,我的反应一般如下:

问:6、我的Window系统出问题了,你能帮个忙吗?

答:可以,将Windows系统给卸了,装个开源操作系统,例如Linux或BSD[21]。

注意:你可以问与Windows系统相关的问题,前提是这个程序有Windows的官方版,不是我对Windows系统有偏见,而是Windows系统与大部分的软件存在兼容问题,而实际上Windows系统实在很差。

问:7、我的程序运行不了,我认为是系统工具X有问题。

答:这个程序被成千上万用户反复使用,你有可能是第一个提出这个程序有缺陷的人,不过你得要拿出具体的证明,最后有一份详细清晰的缺陷说明。

问:8、我在安装Linux或X是遇到困难,你能帮个忙吗?

答:不好意思,我帮不了你,我需要亲手操作你的电脑才能帮你排错,去向当地的Linux论坛寻求帮助吧。

注意:如果安装问题与某Linux发行版有关,请首先在论坛中提问。同时,应准确描述问题的细节。在此之前,先用 「linux」和所有被怀疑出问题的硬件 [作关键词] 仔细搜索。

问:9、我如何才能破解超级用户口令/盗取操作员的特权/查看某人的电子邮件?

答:想做这种事情说明你是个人品恶劣的家伙,想让黑客教你做这种事情说明你是个傻逼。

【本章注释】

21、这个回答可以视为一句吐槽,也可以视为一个建议,毕竟大多数黑客都是使用开源系统的。

#好问题与坏问题

最后,我将通过举例来演示提问的智慧。同样的问题两种提法,一种愚蠢,另一种明智。

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

这个问题在请求一个「Search The Fucking Web」(STFW) 式的回复。

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

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

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

提问者预提了一个假设:是别人搞砸了,太狂妄自大了。

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

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

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

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

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

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

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

事实上,最后那个问题基本上源于2001年8月Linux内核邮件列表(lkml)上的真实事件,是我(Eric)当时提了那个问题,我发现Tyan S2462主板有神秘的死机现象,邮件列表成员给我提供了解决此问题的关键信息。

通过这种提问方式,我给了别人可以深思玩味的东西。我设法使之对参与者既轻松又有吸引力,也表明了对同行能力的尊敬并邀请他们与我一起协商。通过告诉他们我已经走过的弯路,我还表明了对他们宝贵时间的尊重。

事后,当我感谢大家并评论这次良好的经历时,一个Linux内核邮件列表的成员谈到,他认为我得到答案并不是因为我的名字挂在列表上,而只是因为我正确的提问方式。

黑客们在某种层面上貌似是非常冷漠无情的精英分子。我想在这事上他是对的,如果我表现得像个不劳而获的寄生虫,不管我是谁都会被忽略或斥责。他建议将整个事件作为对其它人提问的指导,这直接导致了本文的编写。

#如果得不到回答

如果得不到回答,请不要认为我们不想帮你,有时的确是因为被问到的小组成员不知道答案。没有回复不等于不被无视,当然,必须承认从外部很难看出两者的差别。

一般而言,不要在再重复发表这个问题,这会被视为毫无意义的骚扰。耐心一点,知道你问题答案的人可能生活在不同的时区,有可能正在睡觉,也有可能你的问题一开始就没有组织好。

还有其它信息源可以寻求帮助,例如一些面向新手的资源区。

有许多在线与本地的用户组织,虽然他们自己不编写任何软件,但是他们对软件很忠诚热心。这些用户组通常因互助和帮助新手而形成。

还有众多大小商业公司提供签约支持服务(红帽与SpikeSource是两家最出名的,还有许多其它的)。别因为要付点钱才有支持就感到沮丧!毕竟,如果你车子的汽缸垫烧坏了,你还是得花钱找个修理店把它弄好。同理,即使软件没花你一分钱,你总不能指望他的服务支持都是免费的。

象Linux这样流行的软件,每个开发版至少有一万个以上的用户,一个人不可能应付这么多用户的服务要求。即使你必须付费才能得到支持,也比你还得额外花钱买软件要少得多(封闭源代码软件的服务支持与开源软件相比通常还要贵一点,也要差一点)。

#如何更好地回答

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

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

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

如果你帮不了忙,也不要帮倒忙。不要在具体步骤上开玩笑,有些可怜的新手会把它当成真的指令,那样也许会毁了用户的安装进程。

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

尽管对那些懒人敷衍一句「Read The Fucking Manual」(RTFM)是正当的,但是指出文档的位置(或者给出一个搜索关键词)会更好

如果你决定回答一个问题,请尽可能详尽地提供一个好答案。当别人正在用错误的工具或方法时,别给出一个权宜之计,应推荐一个更好的工具,重新组织这个问题。

提供一个可操作的回答建议!如果回答者已经详细地研究过问题,并且已经测试过X、 Y, Z, A、B、和C方法,均没有得出一个满意的结果,这表明简单地回复「请尝试X或者Y方法」或提供一个链接是没有用的,你要给出一个可操作的详细的操作步骤。

让你所在的社区或论坛也从学习中获益。当回复一个好问题时,问问自己「如何修改相关文件或FAQ文档以免再次解答同样的问题?」,接着再向社区或论坛维护者发一份补充说明。

如果你的答案是在研究一番后得出的,请展现你的解题技巧而不是直接端出结果,毕竟「授人以鱼,不如授人以渔」。

#相关资源

如果需要个人电脑、Unix和互联网如何工作的基础知识,参阅Unix和互联网工作的基本原理。

当你发布软件或补丁,试着按软件发布实践手册操作。

#鸣谢

Evelyn Mitchell贡献了一些愚蠢问题例子并启发了我编写「如何更好地回答问题」这一章节 Mikhail Ramendik贡献了一些特别有价值的建议和改进意见。

#附:知乎对「如何提问题?」的答案总结

#我们若能更妥善地搜寻资料,实在已经改变世界。


笨方法实验室:世上无难事,只怕笨方法