如何提问
在黑客的世界里,当你抛出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问题和追问的方式。
现在开源软件已经相当盛行,您通常可以从其他更有经验的用户那里获得与黑客一样好的答案,这是件好事,和黑客相比,用户们往往对那些新手常遇到的问题更宽容一些。尽管如此,以我们在此推荐的方式对待这些有经验的用户通常也是从她们那里获得有用答案的最有效方式
首先你应该明白,黑客们喜爱有挑战性的问题,或者能激发他们思维的好问题,如果我们并非如此,那我们也不会成为你想问问题的对象,如果你给了我们一个值得反复咀嚼玩味的好问题,我们自会对你感激不尽,好问题是激励、是厚礼。好问题可以提高我们的理解力,而且通常会暴漏我们以前没有意识到或者思考过的问题,黑客而言,“好问题”是诚挚的大力称赞。
尽管如此,黑客们有着蔑视或者傲慢面对简单问题的坏名声,这有时让我们看起来对新手、无知者似乎较有敌意,但其实不是那样的。
我们不讳言我们对那些不愿思考,或者在发问之前不做他们应该做的事的人的蔑视,那些人是时间杀手--他们只想索取,从不付出,消耗我们可用在更有趣的问题或更值得回答的人身上的时间。我们称这样的人为失败者。
我们意识到许多人只是想使用我们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,电脑只是种工具,是种达到目的的手段而已,他们有自己的生活并且有更要紧的事要做。我们认可这点,也从不指望每个人都对这些让我们着迷的技术问题感兴趣。尽管如此,我们只为那些真正有兴趣并且愿意积极参与问题解决的人调整回答问题的风格。这点不会变,也不该变;否则,我们就是在最擅长的事情上降低效率。
我们是自愿的,从繁忙的生活中抽出时间来解答问题,而且时常被问题淹没。所有我们无情地过滤掉一些话题,特别是抛弃那些看起来像是失败者的家伙,以便更高效地利用时间来回答赢家的问题。
如果你厌恶我们的态度,高高在上,或是过于傲慢,不妨也设身处地地想想。我们并没有要求你向我们屈服-- 事实上,我们大多数人非常乐意与你平等的交流,只要你付出小小的努力来满足基本要求,我们就会欢迎你加入我们的文化。但让我们帮助那些不愿意帮助自己的人是没有效率的。无知没有关系,但装白痴就不行。
所以,你不必在技术上很在行才能吸引我们的注意,当你必须表现出能引导你变得在行的特质 -- 机敏、有想法、善于观察、乐于主动参与解决问题。如果你做不到这些使你与众不同的事情,我们建议你花点钱找商业公司签个技术支持的服务合同,而不是要求黑客个人无偿的帮助你。
如果你决定向我们求助,当然你也不希望被视为失败者,更不愿成为失败者中的一员。能立刻得到快速并有效答案的最好方法就是像赢家那样提问 -- 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要一点帮助。
在提问之前
在你准备要提问之前,请先做到以下事情:
- 尝试在你准备提问的论坛的旧文章中搜索答案
- 尝试上网搜索以找到答案
- 尝试阅读文档以找到答案
- 尝试阅读常见问题文件以找到答案
- 尝试自己检查或实验以找到答案
- 向你身边的强者朋友打听以找到答案
- 如果你是程序开发者,请尝试阅读源代码以找到答案
当你提出问题的时候,请先表明你已经做了上述的努力,这将有助于树立你并不是一个不劳而获且浪费别人时间的提问者。如果你能一并表达在上述努力的过程中所学习到的东西会更好,因为我们更乐于回答那些表现出能从答案中学习的人的问题。
运用某些策略,比如先用Google搜索你所遇到的各种错误信息,这样很可能直接就找到了能解决问题的文件或者线索。即使没有结果,在寻求帮助时加上一句,我在Google中搜索过下列句子,但没有找到什么有用的东西,也是件好事,即使它只表明搜索引擎不能提供哪些帮助。这么做也让遇到的相似问题的其他人能被搜索引擎引导到你的提问中来。
别着急,不要指望几秒钟的Google搜索就能解决一个复杂的问题。在向专家求助之前,再阅读下参加你的问题文件,放轻松,坐的舒服些,再花点时间思考下这个问题。相信我们,他们能从你的提问看出来你做了多少阅读与思考,如果你是有备而来,将更有可能得到解答。不要将所有问题一股脑抛出,只因为你的第一次搜索没有找到答案。
准备好你的问题,再将问题仔细地思考一遍,因为草率的发问之恩了得到草率的回答,或者根本得不到任何答案。越是能表现出你在寻求帮助前你为解决问题所付出的努力,你越是有可能得到实质性的帮助。
小心别问错了问题,如果你的问题基于错误的假设,某个普通黑客多半会在一边在心里想着蠢问题,一边用无意义的字面解释来答复你,希望你会从问题的回答中汲取教训。
绝不要自以为是的认为够格得到答案,你没有,你并没有。毕竟你没有为这种服务支付任何报酬。你将会是自己去挣到一个答案,靠的是有内涵的、有趣的 、有思维激励作用的问题 -- 一个有潜力能贡献社区经验的问题,而不仅仅是被动的从他人那儿索取知识。
另一方面,表明你愿意在寻找答案的过程中做点什么是一个非常好的开端。谁能给点提示?我的这个例子缺了什么?以及我应该检查什么地方?比请把我需要的确切过程贴出来更容易得到答复。因为你表现出只要有人能指明正确方向,你就有完成它的能力和决心。
当你提问时
慎重选择提问的论坛
小心的选择你要提问的场合。如果你做了下述的事情,你很可能被忽略掉或者被看作是失败者
- 在与主题不合的论坛上贴出你的问题
- 在探讨进阶技术问题的论坛张贴非常初级的问题,反之亦然
- 在太多的不同新闻群组重复转帖同样的问题
- 向既非熟人也没有义务解决你问题的人发送私人电邮
黑客会删除掉那些搞错场合的问题,以保护他们沟通渠道不被无关的东西淹没。你不会想让这种事情发生在自己身上。
因此,第一步是找到对的论坛。再说一次,Google 和其他搜索引擎还是你的朋友。用它来找到与你遭遇到的困难问题最相关的网站,通常那儿都有常见问题。邮件列表及相关的说明文件的链接。如果你的努力都没有结果,网站也许还有报告Bug的流程或者链接。
向陌生人或者论坛发送邮件最可能是风险最大的事情。举例来说,别假设一个提供丰富内容的网页作者会向充当你的免费顾问。不要对你的问题是否会受到欢迎做太乐观的估计 --- 如果不确定,那就别到处发送,或者压根别发。
在选择论坛,群组时,别太相信它的名字,先看看FAQ或者许可书以弄清楚你的问题是否切题,发文前先翻翻已有的话题,这样可以让你感受一下那里的文化。事实上,事先在群组的历史记录中搜索与你问题相关的关键字是个极好的方式,也许就这样找到答案了。即使没有,也能帮助你归纳出更好的问题。
别像机关枪一样的一次扫射所有的帮助渠道,这就像大喊大叫一样会使人不快。要一个一个来。
搞清楚你的主题。最典型的错误之一是在某种致力于跨平台可移植的语言、套件或者工具的论坛中提出提出关于Unix或Windows操作系统界面的问题。如果你还不明白为什么这是大错,最好在搞清楚这之间的差异之前什么也别问。
一般来说,在仔细挑选的公共论坛中提问,会比在私有论坛中提出同样问题更容易得到有用的答案。有几个理由可以支持这点: 一是看潜在的回复者有多少,二是看观众有多少,黑客更愿意回答那些能帮助到许多人的问题。
可以理解的是,老练的黑客和一些热门软件的作者正在接受过多的错发信息,就像那根最后压垮骆驼的稻草一样,你的加入也可能是情况走向极端 -- 已经好几次了,一些热门软件的作者由于涌入了其私人邮箱的大量不堪忍受的无用邮件而不再提供支持
Stack Overflow
搜索,然后在 Stack Exchange 提问
近年来,Stack Exchange 社区已经成为回答技术问题及其他问题的主要渠道,尤其是那些开放源码的项目
因为Google索引是即时的,你在看Stack Exchange之前先在Google搜索。有很高的几率某人已经问过了一个类似的问题。而且Stack Exchange往回走啦往往会是搜索结果的前面几个。如果你在Google 上没有找到任何答案,你再到特定的主题网站上去寻找,用tag搜索能让你更缩小你的搜索结果。
如果你还是找不到任何对你问题有用的内容,请把你的问题发在与它最相关的网站上。提问的时候请善用格式化工具,尤其注意为代码添加格式,并且添加相关的标签,特别是编程语言,操作系统或者库/包的名称,当有人要求你提供更多相关信息时,请编辑你的帖子来补充他们(而不是发一个回帖或者回答)。如果你觉得一个答案对你有帮助时,点击向上的箭头来为它投票,如果一个答案提供了问题的正确解决方案,点击投票下方的对勾来将它标记为正确。
Stack Exchange 已经成长到超过一百个网站,以下是最常用的几个站点:
- Super User 是问一些通用的电脑问题,如果你的问题跟代码或者是写程序无关,只是一些网络连线之类的,请到这里
- Stack Overflow 是问写程序有关的问题。
- Server Fault 是问服务器和网管相关的问题
网站和IRC论坛
本地的用户群组(UserGroup),或者你所用的Linux发行版也许正在宣传他们的网页论坛或者IRC频道,并提供新手帮助,这些都是开始提问的好地方,特别是当你觉得遇到的也许只是相对简单或者普通的问题时。有广告赞助的IRC频道是公开欢迎提问的地方,通常可以及时得到回应。
事实上,如果程序出的问题只发生在特定的Linux发行版提供的版本,最好先去该发行版的论坛提问