How To Ask Questions The Smart Wayhtml
Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moenlinux
本指南英文版版权为 Eric S. Raymond, Rick Moen 全部。git
原文网址:http://www.catb.org/~esr/faqs/smart-questions.htmlgithub
Copyleft 2001 by D.H.Grand(nOBODY/Ginux), 2010 by Gasolin, 2015 by Ryan Wushell
本中文指南是基于原文 3.10 版以及 2010 年由 Gasolin 所翻译版本的最新翻译;express
协助指出翻译问题,请发 Issue,或直接发 Pull Request 给我。编程
本文另有繁體中文版。服务器
许多项目在他们的使用协助/说明网页中连接了本指南,这么作很好,咱们也鼓励你们都这么作。但若是你是负责管理这个项目网页的人,请在超连接附近的显著位置上注明:网络
本指南不提供此项目的实际支持服务!dom
咱们已经深入领教到少了上述声明所带来的痛苦。由于少了这点声明,咱们不停地被一些白痴纠缠。这些白痴认为既然咱们发布了这本指南,那么咱们就有责任解决世上全部的技术问题。
若是你是由于须要某些协助而正在阅读这本指南,而且最后离开是由于发现从本指南做者们身上得不到直接的协助,那么你就是咱们所说的那些白痴之一。别问咱们问题,咱们只会忽略你。咱们在这本指南中是教你如何从那些真正懂得你所遇到软件或硬件问题的人取得协助,而 99% 的状况下那不会是咱们。除非你肯定本指南的做者之一恰好是你所遇到的问题领域的专家,不然请不要打扰咱们,这样你们都会开心一点。
在黑客的世界里,当你拋出一个技术问题时,最终是否能获得有用的回答,每每取决于你所提问和追问的方式。本指南将教你如何正确的提问以得到你满意的答案。
不仅是黑客,如今开源(Open Source)软件已经至关盛行,你经常也能够由其余有经验的使用者身上获得好答案,这是件好事;使用者比起黑客来,每每对那些新手常遇到的问题更宽容一些。然而,将有经验的使用者视为黑客,并采用本指南所提的方法与他们沟通,一样也是能从他们身上获得满意回答的最有效方式。
首先你应该明白,黑客们喜好有挑战性的问题,或者能激发他们思惟的好问题。若是咱们并不是如此,那咱们也不会成为你想询问的对象。若是你给了咱们一个值得反复咀嚼玩味的好问题,咱们自会对你感激涕零。好问题是激励,是厚礼。好问题能够提升咱们的理解力,并且一般会暴露咱们之前从没意识到或者思考过的问题。对黑客而言,"好问题!"是诚挚的大力称赞。
尽管如此,黑客们有着蔑视或傲慢面对简单问题的坏名声,这有时让咱们看起来对新手、无知者彷佛较有敌意,但其实不是那样的。
咱们不讳言咱们对那些不肯思考、或者在发问前不作他们该作的事的人的蔑视。那些人是时间杀手 —— 他们只想索取,从不付出,消耗咱们可用在更有趣的问题或更值得回答的人身上的时间。咱们称这样的人为 失败者(撸瑟)
(因为历史缘由,咱们有时把它拼做 lusers
)。
咱们意识到许多人只是想使用咱们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,电脑只是种工具,是种达到目的的手段而已。他们有本身的生活而且有更要紧的事要作。咱们了解这点,也从不期望每一个人都对这些让咱们着迷的技术问题感兴趣。尽管如此,咱们回答问题的风格是指向那些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不应变。若是连这都变了,咱们就是在下降作本身最擅长的事情上的效率。
咱们(在很大程度上)是自愿的,从繁忙的生活中抽出时间来解答疑惑,并且时常被提问淹没。因此咱们无情的滤掉一些话题,特别是拋弃那些看起来像失败者的家伙,以便更高效的利用时间来回答赢家(winner)
的问题。
若是你厌恶咱们的态度,高高在上,或过于傲慢,不妨也设身处地想一想。咱们并无要求你向咱们屈服 —— 事实上,咱们大多数人很是乐意与你平等地交流,只要你付出小小努力来知足基本要求,咱们就会欢迎你加入咱们的文化。但让咱们帮助那些不肯意帮助本身的人是没有效率的。无知没有关系,但装白痴就是不行。
因此,你没必要在技术上很在行才能吸引咱们的注意,但你必须表现出能引导你变得在行的特质 -- 机敏、有想法、善于观察、乐于主动参与解决问题。若是你作不到这些使你不同凡响的事情,咱们建议你花点钱找家商业公司签个技术支持服务合同,而不是要求黑客我的无偿地帮助你。
若是你决定向咱们求助,固然你也不但愿被视为失败者,更不肯成为失败者中的一员。能马上获得快速并有效答案的最好方法,就是像赢家那样提问 -- 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上须要得到一点帮助。
(欢迎对本指南提出改进意见。你能够 email 你的建议至 esr@thyrsus.com 或 respond-auto@linuxmafia.com。然而请注意,本文并不是网络礼节的通用指南,而咱们一般会拒绝无助于在技术论坛获得有用答案的建议)。
在你准备要经过电子邮件、新闻群组或者聊天室提出技术问题前,请先作到如下事情:
当你提出问题的时候,请先代表你已经作了上述的努力;这将有助于树立你并非一个坐享其成且浪费别人的时间的提问者。若是你能一并表达在作了上述努力的过程当中所学到的东西会更好,由于咱们更乐于回答那些表现出能从答案中学习的人的问题。
运用某些策略,好比先用 Google 搜索你所遇到的各类错误信息(既搜索 Google 论坛,也搜索网页),这样极可能直接就找到了能解决问题的文件或邮件列表线索。即便没有结果,在邮件列表或新闻组寻求帮助时加上一句 我在 Google 中搜过下列句子但没有找到什么有用的东西
也是件好事,即便它只是代表了搜索引擎不能提供哪些帮助。这么作(加上搜索过的字串)也让遇到类似问题的其余人能被搜索引擎引导到你的提问来。
别着急,不要期望几秒钟的 Google 搜索就能解决一个复杂的问题。在向专家求助以前,再阅读一下常见问题文件(FAQ)、放轻松、坐舒服一些,再花点时间思考一下这个问题。相信咱们,他们能从你的提问看出你作了多少阅读与思考,若是你是有备而来,将更有可能获得解答。不要将全部问题一股脑拋出,只因你的第一次搜索没有找到答案(或者找到太多答案)。
准备好你的问题,再将问题仔细的思考过一遍,由于草率的发问只能获得草率的回答,或者根本得不到任何答案。越是能表现出在寻求帮助前你为解决问题所付出的努力,你越有可能获得实质性的帮助。
当心别问错了问题。若是你的问题基于错误的假设,某个普通黑客(J. Random Hacker)多半会一边在内心想着蠢问题…
, 一边用无心义的字面解释来答复你,但愿着你会从问题的回答(而非你想获得的答案)中汲取教训。
毫不要自觉得够格获得答案,你没有;你并无。毕竟你没有为这种服务支付任何报酬。你将会是本身去挣到一个答案,靠提出有内涵的、有趣的、有思惟激励做用的问题 —— 一个有潜力能贡献社区经验的问题,而不只仅是被动的从他人处索取知识。
另外一方面,代表你愿意在找答案的过程当中作点什么是一个很是好的开端。谁能给点提示?
、个人这个例子里缺了什么?
以及我应该检查什么地方
比请把我须要的确切的过程贴出来
更容易获得答复。由于你表现出只要有人能指个正确方向,你就有完成它的能力和决心。
当心选择你要提问的场合。若是你作了下述的事情,你极可能被忽略掉或者被看做失败者:
黑客会剔除掉那些搞错场合的问题,以保护他们沟通的渠道不被无关的东西淹没。你不会想让这种事发生在本身身上的。
所以,第一步是找到对的论坛。再说一次,Google 和其它搜索引擎仍是你的朋友,用它们来找到与你遭遇到困难的软硬件问题最相关的网站。一般那儿都有常见问题(FAQ)、邮件列表及相关说明文件的连接。若是你的努力(包括阅读 FAQ)都没有结果,网站上也许还有报告 Bug(Bug-reporting)的流程或连接,若是是这样,链过去看看。
向陌生的人或论坛发送邮件最多是风险最大的事情。举例来讲,别假设一个提供丰富内容的网页的做者会想充当你的免费顾问。不要对你的问题是否会受到欢迎作太乐观的估计 -- 若是你不肯定,那就向别处发送,或者压根别发。
在选择论坛、新闻群组或邮件列表时,别太相信名字,先看看 FAQ 或者许可书以弄清楚你的问题是否切题。发文前先翻翻已有的话题,这样可让你感觉一下那里的文化。事实上,事先在新闻组或邮件列表的历史记录中搜索与你问题相关的关键词是个极好的主意,也许这样就找到答案了。即便没有,也能帮助你概括出更好的问题。
别像机关枪似的一次"扫射"全部的帮助渠道,这就像大喊大叫同样会令人不快。要一个一个地来。
搞清楚你的主题!最典型的错误之一是在某种致力于跨平台可移植的语言、套件或工具的论坛中提关于 Unix 或 Windows 操做系统程序界面的问题。若是你不明白为何这是大错,最好在搞清楚这之间差别以前什么也别问。
通常来讲,在仔细挑选的公共论坛中提问,会比在私有论坛中提一样的问题更容易获得有用的回答。有几个理由能够支持这点,一是看潜在的回复者有多少,二是看观众有多少。黑客较愿意回答那些能帮助到许多人的问题。
能够理解的是,老练的黑客和一些热门软件的做者正在接受过多的错发信息。就像那根最后压垮骆驼背的稻草同样,你的加入也有可能使状况走向极端 —— 已经好几回了,一些热门软件的做者从本身软件的支持中抽身出来,由于伴随而来涌入其私人邮箱的无用邮件变得没法忍受。
搜索,而后 在 Stack Exchange 问。
近年来,Stack Exchange community 社区已经成为回答技术及其余问题的主要渠道,尤为是那些开放源码的项目。
由于 Google 索引是即时的,在看 Stack Exchange 以前先在 Google 搜索。有很高的机率某人已经问了一个相似的问题,并且 Stack Exchange 网站们每每会是搜索结果中最前面几个。若是你在 Google 上没有找到任何答案,你再到特定相关主题的网站去找。用标签(Tag)搜索能让你更缩小你的搜索结果。
Stack Exchange 已经成长到超过一百个网站,如下是最经常使用的几个站:
本地的使用者群组(user group),或者你所用的 Linux 发行版本也许正在宣传他们的网页论坛或 IRC 频道,并提供新手帮助(在一些非英语国家,新手论坛极可能仍是邮件列表), 这些地方是开始提问的好首选,特别是当你以为遇到的也许只是相对简单或者很普通的问题时。有广告赞助的 IRC 频道是公开欢迎提问的地方,一般能够即时获得回应。
事实上,若是程序出的问题只发生在特定 Linux 发行版提供的版本(这很常见),最好先去该发行版的论坛或邮件列表中提问,再到程序自己的论坛或邮件列表提问。(不然)该项目的黑客可能仅仅回复 "用咱们的版本"。
在任何论坛发文之前,先确认一下有没有搜索功能。若是有,就试着搜索一下问题的几个关键词,也许这会有帮助。若是在此以前你已作过通用的网页搜索(你也该这样作),仍是再搜索一下论坛,搜索引擎有可能没来得及索引此论坛的所有内容。
经过论坛或 IRC 频道来提供使用者支持服务有增加的趋势,电子邮件则大多为项目开发者间的交流而保留。因此最好先在论坛或 IRC 中寻求与该项目相关的协助。
在使用 IRC 的时候,首先最好不要发布很长的问题描述,有些人称之为频道洪水。最好经过一句话的问题描述来开始聊天。
当某个项目提供开发者邮件列表时,要向列表而不是其中的个别成员提问,即便你确信他能最好地回答你的问题。查一查项目的文件和首页,找到项目的邮件列表并使用它。有几个很好的理由支持咱们采用这种办法:
若是一个项目既有"使用者" 也有"开发者"(或"黑客")邮件列表或论坛,而你又不会动到那些源代码,那么就向"使用者"列表或论坛提问。不要假设本身会在开发者列表中受到欢迎,那些人多半会将你的提问视为干扰他们开发的噪音。
然而,若是你确信你的问题很特别,并且在"使用者" 列表或论坛中几天都没有回复,能够试试前往"开发者"列表或论坛发问。建议你在张贴前最好先暗地里观察几天以了解那里的行事方式(事实上这是参与任何私有或半私有列表的好主意)
若是你找不到一个项目的邮件列表,而只能查到项目维护者的电子邮件地址,尽管向他发信。即便是在这种状况下,也别假设(项目)邮件列表不存在。在你的电子邮件中,请陈述你已经试过但没有找到合适的邮件列表,也说起你不反对将本身的邮件转发给他人(许多人认为,即便没什么秘密,私人电子邮件也不该该被公开。经过容许将你的电子邮件转发他人,你给了相应人员处置你邮件的选择)。
在邮件列表、新闻群组或论坛中,大约 50 字之内的标题是抓住资深专家注意力的好机会。别用喋喋不休的帮帮忙
、跪求
、急
(更别说救命啊!!!!
这样让人反感的话,用这种标题会被条件反射式地忽略)来浪费这个机会。不要妄想用你的痛苦程度来打动咱们,而应该是在这点空间中使用极简单扼要的描述方式来提出问题。
一个好标题范例是目标 —— 差别
式的描述,许多技术支持组织就是这样作的。在目标
部分指出是哪个或哪一组东西有问题,在差别
部分则描述与指望的行为不一致的地方。
蠢问题:救命啊!个人笔记本电脑不能正常显示了!
聪明问题:X.org 6.8.1 的鼠标光标会变形,某牌显卡 MV1005 芯片组。
更聪明问题:X.org 6.8.1 的鼠标光标,在某牌显卡 MV1005 芯片组环境下 - 会变形。
编写目标 —— 差别
式描述的过程有助于你组织对问题的细致思考。是什么被影响了? 仅仅是鼠标光标或者还有其它图形?只在 X.org 的 X 版中出现?或只是出如今 6.8.1 版中? 是针对某牌显卡芯片组?或者只是其中的 MV1005 型号? 一个黑客只需瞄一眼就可以当即明白你的环境和你遇到的问题。
总而言之,请想像一下你正在一个只显示标题的存档讨论串(Thread)索引中查寻。让你的标题更好地反映问题,可以使下一个搜索相似问题的人可以关注这个讨论串,而不用再次提问相同的问题。
若是你想在回复中提出问题,记得要修改内容标题,以代表你是在问一个问题, 一个看起来像 Re: 测试
或者 Re: 新 bug
的标题很难引发足够重视。另外,在不影响连贯性之下,适当引用并删减前文的内容,能给新来的读者留下线索。
对于讨论串,不要直接点击回复来开始一个全新的讨论串,这将限制你的观众。由于有些邮件阅读程序,好比 mutt ,容许使用者按讨论串排序并经过折叠讨论串来隐藏消息,这样作的人永远看不到你发的消息。
仅仅改变标题还不够。mutt 和其它一些邮件阅读程序还会检查邮件标题之外的其它信息,以便为其指定讨论串。因此宁肯发一个全新的邮件。
在网页论坛上,好的提问方式稍有不一样,由于讨论串与特定的信息紧密结合,而且一般在讨论串外就看不到里面的内容,故经过回复提问,而非改变标题是可接受的。不是全部论坛都容许在回复中出现分离的标题,并且这样作了基本上没有人会去看。不过,经过回复提问,这自己就是暧昧的作法,由于它们只会被正在查看该标题的人读到。因此,除非你只想在该讨论串当前活跃的人群中提问,否则仍是另起炉灶比较好。
以请将你的回复发送到……
来结束你的问题多半会使你得不到回答。若是你以为花几秒钟在邮件客户端设置一下回复地址都麻烦,咱们也以为花几秒钟思考你的问题更麻烦。若是你的邮件程序不支持这样作,换个好点的;若是是操做系统不支持这种邮件程序,也换个好点的。
在论坛,要求经过电子邮件回复是很是无礼的,除非你认为回复的信息可能比较敏感(有人会为了某些未知的缘由,只让你而不是整个论坛知道答案)。若是你只是想在有人回复讨论串时获得电子邮件提醒,能够要求网页论坛发送给你。几乎全部论坛都支持诸如追踪此讨论串
、有回复时发送邮件提醒
等功能。
咱们从经验中发现,粗心的提问者一般也会粗心的写程序与思考(我敢打包票)。回答粗枝大叶者的问题很不值得,咱们宁愿把时间耗在别处。
正确的拼写、标点符号和大小写是很重要的。通常来讲,若是你以为这样作很麻烦,不想在意这些,那咱们也以为麻烦,不想在意你的提问。花点额外的精力斟酌一下字句,用不着太僵硬与正式 —— 事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它必须很准确,并且有迹象代表你是在思考和关注问题。
正确地拼写、使用标点和大小写,不要将its
混淆为it's
,loose
搞成lose
或者将discrete
弄成discreet
。不要所有用大写,这会被视为无礼的大声嚷嚷(所有小写也好不到哪去,由于不易阅读。Alan Cox 也许能够这样作,但你不行)。
更白话的说,若是你写得像是个半文盲[译注:小白],那多半得不到理睬。也不要使用即时通讯中的简写或火星文,如将的
简化为d
会使你看起来像一个为了少打几个键而省字的小白。更糟的是,若是像个小孩似地鬼画符那绝对是在找死,能够确定没人会理你(或者最可能是给你一大堆指责与挖苦)。
若是在使用非母语的论坛提问,你能够犯点拼写和语法上的小错,但决不能在思考上马虎(没错,咱们一般能弄清二者的分别)。同时,除非你知道回复者使用的语言,不然请使用英语书写。繁忙的黑客通常会直接删除用他们看不懂语言写的消息。在网络上英语是通用语言,用英语书写能够将你的问题在还没有被阅读就被直接删除的可能性降到最低。
若是英文是你的外语(Second language),提示潜在回复者你有潜在的语言困难是很好的:
[译注:如下附上原文以供使用]
English is not my native language; please excuse typing errors.
If you speak $LANGUAGE, please email/PM me;
I may need assistance translating my question.
I am familiar with the technical terms,
but some slang expressions and idioms are difficult for me.
I've posted my question in $LANGUAGE and English.
I'll be glad to translate responses, if you only use one or the other.
若是你人为地将问题搞得难以阅读,它多半会被忽略,人们更愿读易懂的问题,因此:
Quoted-Printable
MIME 编码发送消息。这种编码对于张贴非 ASCII 语言多是必须的,但不少邮件程序并不支持这种编码。当它们处理换行时,那些文本中四处散布的=20
符号既难看也分散注意力,甚至有可能破坏内容的语意。智能引号
功能 (从[选项] > [校正] > [自动校订选项],勾选掉智能引号
单选框),以避免在你的邮件中处处散布垃圾字符。表情符号
和HTML
功能(当它们提供时)。一两个表情符号一般没有问题,但花哨的彩色文本倾向于令人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来像个傻笑的小姑娘。这一般不是个好主意,除非你只是对性而不是对答案感兴趣。若是你使用图形用户界面的邮件程序(如微软公司的 Outlook 或者其它相似的),注意它们的默认设置不必定知足这些要求。大多数这类程序有基于选单的查看源代码
命令,用它来检查发送文件夹中的邮件,以确保发送的是纯文本文件同时没有一些奇怪的字符。
Fedora Core 4
、Slackware 9.1
等)。重现这个问题的可控环境
的方法。尽可能去揣测一个黑客会怎样反问你,在你提问以前预先将黑客们可能遇到的问题回答一遍。
以上几点中,当你报告的是你认为可能在代码中的问题时,给黑客一个能够重现你的问题的环境尤为重要。当你这么作时,你获得有效的回答的机会和速度都会大大的提高。
Simon Tatham 写过一篇名为《如何有效的报告 Bug》的出色文章。强力推荐你也读一读。
你须要提供精确有内容的信息。这并非要求你简单的把成堆的出错代码或者资料彻底转录到你的提问中。若是你有庞大而复杂的测试样例能重现程序挂掉的情境,尽可能将它剪裁得越小越好。
这样作的用处至少有三点。
第一,表现出你为简化问题付出了努力,这能够使你获得回答的机会增长;
第二,简化问题使你更有可能获得有用的答案;
第三,在精炼你的 bug 报告的过程当中,你极可能就本身找到了解决方法或权宜之计。
当你在使用软件中遇到问题,除非你很是、很是的有根据,不要动辄声称找到了 Bug。提示:除非你能提供解决问题的源代码补丁,或者提供回归测试来代表前一版本中行为不正确,不然你都多半不够彻底确信。这一样适用在网页和文件,若是你(声称)发现了文件的Bug
,你应该能提供相应位置的修正或替代文件。
请记得,还有许多其它使用者没遇到你发现的问题,不然你在阅读文件或搜索网页时就应该发现了(你在抱怨前已经作了这些,是吧?)。这也意味着颇有多是你弄错了而不是软件自己有问题。
编写软件的人老是很是辛苦地使它尽量完美。若是你声称找到了 Bug,也就是在质疑他们的能力,即便你是对的,也有可能会冒犯到其中某部分人。当你在标题中嚷嚷着有Bug
时,这尤为严重。
提问时,即便你私下很是确信已经发现一个真正的 Bug,最好写得像是你作错了什么。若是真的有 Bug,你会在回复中看到这点。这样作的话,若是真有 Bug,维护者就会向你道歉,这总比你惹恼别人而后欠别人一个道歉要好一点。
有些人明白他们不应粗鲁或傲慢的提问并要求获得答复,但他们选择另外一个极端 —— 低三下四:我知道我只是个可悲的新手,一个撸瑟,但...
。这既令人困扰,也没有用,尤为是伴随着与实际问题含糊不清的描述时更使人反感。
别用原始灵长类动物的把戏来浪费你个人时间。取而代之的是,尽量清楚地描述背景条件和你的问题状况。这比低三下四更好地定位了你的位置。
有时网页论坛会设有专为新手提问的版面,若是你真的认为遇到了初学者的问题,到那去就是了,但同样别那么低三下四。
告诉黑客们你认为问题是怎样形成的并没什么帮助。(若是你的推断如此有效,还用向别人求助吗?),所以要确信你原本来本告诉了他们问题的症状,而不是你的解释和理论;让黑客们来推测和诊断。若是你认为陈述本身的猜想很重要,清楚地说明这只是你的猜想,并描述为何它们不起做用。
蠢问题
我在编译内核时接连遇到 SIG11 错误,
我怀疑某条飞线搭在主板的走线上了,这种状况应该怎样检查最好?
聪明问题
个人组装电脑是 FIC-PA2007 主机板搭载 AMD K6/233 CPU(威盛 Apollo VP2 芯片组),
256MB Corsair PC133 SDRAM 内存,在编译内核时,从开机 20 分钟之后就频频产生 SIG11 错误,
可是在头 20 分钟内从没发生过相同的问题。从新启动也没有用,可是关机一夜就又能工做 20 分钟。
全部内存都换过了,没有效果。相关部分的标准编译记录以下…。
因为以上这点彷佛让许多人以为难以配合,这里有句话能够提醒你:全部的诊断专家都来自密苏里州。
美国国务院的官方座右铭则是:让我看看
(出自国会议员 Willard D. Vandiver 在 1899 年时的讲话:我来自一个出产玉米,棉花,牛蒡和民主党人的国家,滔滔雄辩既不能说服我,也不会让我满意。我来自密苏里州,你必须让我看看。
) 针对诊断者而言,这并非一种怀疑,而只是一种真实而有用的需求,以便让他们看到的是与你看到的原始证据尽量一致的东西,而不是你的猜想与概括的结论。因此,大方的展现给咱们看吧!
问题发生前的一系列操做,每每就是对找出问题最有帮助的线索。所以,你的说明里应该包含你的操做步骤,以及机器和软件的反应,直到问题发生。在命令行处理的状况下,提供一段操做记录(例如运行脚本工具所生成的),并引用相关的若干行(如 20 行)记录会很是有帮助。
若是挂掉的程序有诊断选项(如 -v 的详述开关),试着选择这些能在记录中增长调试信息的选项。记住,多
不等于好
。试着选取适当的调试级别以便提供有用的信息而不是让读者淹没在垃圾中。
若是你的说明很长(如超过四个段落),在开头简述问题,接下来再按时间顺序详述会有所帮助。这样黑客们在读你的记录时就知道该注意哪些内容了。
若是你想弄清楚如何作某事(而不是报告一个 Bug),在开头就描述你的目标,而后才陈述重现你所卡住的特定步骤。
常常寻求技术帮助的人在心中有个更高层次的目标,而他们在自觉得能达到目标的特定道路上被卡住了,而后跑来问该怎么走,但没有意识到这条路自己就有问题。结果要费很大的劲才能搞定。
蠢问题
我怎样才能从某绘图程序的颜色选择器中取得十六进制的的 RGB 值?
聪明问题
我正试着用替换一幅图片的色码(color table)成本身选定的色码,我如今知道的惟一方法是编辑每一个色码区块(table slot),
但却没法从某绘图程序的颜色选择器取得十六进制的的 RGB 值。
第二种提问法比较聪明,你可能获得像是建议采用另外一个更合适的工具
的回复。
黑客们认为问题的解决过程应该公开、透明,此过程当中若是更有经验的人注意到不完整或者不当之处,最初的回复才可以、也应该被纠正。同时,做为提供帮助者能够获得一些奖励,奖励就是他的能力和学识被其余同行看到。
当你要求私下回复时,这个过程和奖励都被停止。别这样作,让回复者来决定是否私下回答 —— 若是他真这么作了,一般是由于他认为问题编写太差或者太肤浅,以致于对其它人没有兴趣。
这条规则存在一条有限的例外,若是你确信提问可能会引来大量雷同的回复时,那么这个神奇的提问句会是向我发电邮,我将为论坛概括这些回复
。试着将邮件列表或新闻群组从洪水般的雷同回复中解救出来是很是有礼貌的 —— 但你必须信守诺言。
漫无边际的提问是近乎无休无止的时间黑洞。最有可能给你有用答案的人一般也正是最忙的人(他们忙是由于要亲自完成大部分工做)。这样的人对无节制的时间黑洞至关厌恶,因此他们也倾向于厌恶那些漫无边际的提问。
若是你明确表述须要回答者作什么(如提供指点、发送一段代码、检查你的补丁、或是其余等等),就最有可能获得有用的答案。由于这会定出一个时间和精力的上限,便于回答者能集中精力来帮你。这么作很棒。
要理解专家们所处的世界,请把专业技能想像为充裕的资源,而回复的时间则是稀缺的资源。你要求他们奉献的时间越少,你越有可能从真正专业并且很忙的专家那里获得解答。
因此,界定一下你的问题,使专家花在辨识你的问题和回答所须要付出的时间减到最少,这技巧对你有用答案至关有帮助 —— 但这技巧一般和简化问题有所区别。所以,问我想更好的理解 X,能否指点一下哪有好一点说明?
一般比问你能解释一下 X 吗?
更好。若是你的代码不能运做,一般请别人看看哪里有问题,比要求别人替你改正要明智得多。
别要求他人帮你调试有问题的代码,不提示一下应该从何入手。张贴几百行的代码,而后说一声:它不能工做
会让你彻底被忽略。只贴几十行代码,而后说一句:在第七行之后,我期待它显示 <x>,但实际出现的是 <y>
比较有可能让你获得回应。
最有效描述程序问题的方法是提供最精简的 Bug 展现测试用例(bug-demonstrating test case)。什么是最精简的测试用例?那是问题的缩影;一小个程序片断能恰好展现出程序的异常行为,而不包含其余使人分散注意力的内容。怎么制做最精简的测试用例?若是你知道哪一行或哪一段代码会形成异常的行为,复制下来并加入足够重现这个情况的代码(例如,足以让这段代码能被编译/直译/被应用程序处理)。若是你没法将问题缩减到一个特定区块,就复制一份代码并移除不影响产生问题行为的部分。总之,测试用例越小越好(查看话不在多而在精一节)。
通常而言,要获得一段至关精简的测试用例并不太容易,但永远先尝试这样作的是种好习惯。这种方式能够帮助你了解如何自行解决这个问题 —— 并且即便你的尝试不成功,黑客们也会看到你在尝试取得答案的过程当中付出了努力,这可让他们更愿意与你合做。
若是你只是想让别人帮忙审查(Review)一下代码,在信的开头就要说出来,而且必定要提到你认为哪一部分特别须要关注以及为何。
黑客们很擅长分辨哪些问题是家庭做业式的问题;由于咱们中的大多数都曾本身解决这类问题。一样,这些问题得由你来搞定,你会从中学到东西。你能够要求给点提示,但别要求获得完整的解决方案。
若是你怀疑本身碰到了一个家庭做业式的问题,但仍然没法解决,试试在使用者群组,论坛或(最后一招)在项目的使用者邮件列表或论坛中提问。尽管黑客们会看出来,但一些有经验的使用者也许仍会给你一些提示。
避免用无心义的话结束提问,例如有人能帮我吗?
或者这有答案吗?
。
首先:若是你对问题的描述不是很好,这样问更是多此一举。
其次:因为这样问是多此一举,黑客们会很厌烦你 —— 并且一般会用逻辑上正确,但毫无心义的回答来表示他们的蔑视, 例如:没错,有人能帮你
或者不,没答案
。
通常来讲,避免用 是或否
、对或错
、有或没有
类型的问句,除非你想获得是或否类型的回答。
紧急
这是你的问题,不是咱们的。宣称紧急
极有可能事与愿违:大多数黑客会直接删除无礼和自私地企图即时引发关注的问题。更严重的是,紧急
这个字(或是其余企图引发关注的标题)一般会被垃圾信过滤器过滤掉 —— 你但愿能看到你问题的人可能永远也看不到。
有半个例外的状况是,若是你是在一些很高调,会使黑客们兴奋的地方,也许值得这样去作。在这种状况下,若是你有时间压力,也颇有礼貌地提到这点,人们也许会有兴趣回答快一点。
固然,这风险很大,由于黑客们兴奋的点多半与你的不一样。譬如从 NASA 国际空间站(International Space Station)发这样的标题没有问题,但用自我感受良好的慈善行为或政治缘由发确定不行。事实上,张贴诸如紧急:帮我救救这个毛绒绒的小海豹!
确定让你被黑客忽略或惹恼他们,即便他们认为毛绒绒的小海豹很重要。
若是你以为这点很难以想象,最好再把这份指南剩下的内容多读几遍,直到你弄懂了再发文。
彬彬有礼,多用请
和谢谢您的关注
,或谢谢你的关照
。让你们都知道你对他们花时间免费提供帮助心存感激。
坦白说,这一点并无比清晰、正确、精准并合法语法和避免使用专用格式重要(也不能取而代之)。黑客们通常宁肯读有点唐突但技术上鲜明的 Bug 报告,而不是那种有礼但含糊的报告。(若是这点让你不解,记住咱们是按问题能教给咱们什么来评价问题的价值的)
然而,若是你有一串的问题待解决,客气一点确定会增长你获得有用回应的机会。
(咱们注意到,自从本指南发布后,从资深黑客那里获得的惟一严重缺陷反馈,就是对预先道谢这一条。一些黑客以为先谢了
意味着过后就不用再感谢任何人的暗示。咱们的建议是要么先说先谢了
,而后过后再对回复者表示感谢,或者换种方式表达感激,譬如用谢谢你的关注
或谢谢你的关照
。)
问题解决后,向全部帮助过你的人发个说明,让他们知道问题是怎样解决的,并再一次向他们表示感谢。若是问题在新闻组或者邮件列表中引发了普遍关注,应该在那里贴一个说明比较恰当。
最理想的方式是向最初提问的话题回复此消息,并在标题中包含已修正
,已解决
或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见讨论串问题 X
和问题 X - 已解决
的潜在回复者就明白不用再浪费时间了(除非他我的以为问题 X
的有趣),所以能够利用此时间去解决其它问题。
补充说明没必要很长或是很深刻;简单的一句你好,原来是网线出了问题!谢谢你们 – Bill
比什么也不说要来的好。事实上,除非结论真的颇有技术含量,不然简短可爱的小结比长篇大论更好。说明问题是怎样解决的,但大可没必要将解决问题的过程复述一遍。
对于有深度的问题,张贴调试记录的摘要是有帮助的。描述问题的最终状态,说明是什么解决了问题,在此以后才指明能够避免的盲点。避免盲点的部分应放在正确的解决方案和其它总结材料以后,而不要将此信息搞成侦探推理小说。列出那些帮助过你的名字,会让你交到更多朋友。
除了有礼貌和有内涵之外,这种类型的补充也有助于他人在邮件列表/新闻群组/论坛中搜索到真正解决你问题的方案,让他们也从中受益。
至少,这种补充有助于让每位参与协助的人因问题的解决而从中获得知足感。若是你本身不是技术专家或者黑客,那就相信咱们,这种感受对于那些你向他们求助的大师或者专家而言,是很是重要的。问题悬而未决会让人灰心;黑客们渴望看到问题被解决。好人有好报,知足他们的渴望,你会在下次提问时尝到甜头。
思考一下怎样才能避免他人未来也遇到相似的问题,自问写一份文件或加个常见问题(FAQ)会不会有帮助。若是是的话就将它们发给维护者。
在黑客中,这种良好的后继行动实际上比传统的礼节更为重要,也是你如何透过善待他人而赢得声誉的方式,这是很是有价值的资产。
有一个古老而神圣的传统:若是你收到RTFM (Read The Fucking Manual)
的回应,回答者认为你应该去读他妈的手册。固然,基本上他是对的,你应该去读一读。
RTFM 有一个年轻的亲戚。若是你收到STFW(Search The Fucking Web)
的回应,回答者认为你应该到他妈的网上搜索。那人多半也是对的,去搜索一下吧。(更温和一点的说法是 Google 是你的朋友!)
在论坛,你也可能被要求去爬爬论坛的旧文。事实上,有人甚至可能热心地为你提供之前解决此问题的讨论串。但不要依赖这种关照,提问前应该先搜索一下旧文。
一般,用这两句之一回答你的人会给你一份包含你须要内容的手册或者一个网址,并且他们打这些字的时候也正在读着。这些答复意味着回答者认为
你不该该所以不爽;依照黑客的标准,他已经表示了对你必定程度的关注,而没有对你的要求视而不见。你应该对他祖母般的慈祥表示感谢。
若是你看不懂回应,别马上要求对方解释。像你之前试着本身解决问题时那样(利用手册,FAQ,网络,身边的高手),先试着去搞懂他的回应。若是你真的须要对方解释,记得表现出你已经从中学到了点什么。
比方说,若是我回答你:看来彷佛是 zentry 卡住了;你应该先清除它。
,而后,这是一个很糟的后续问题回应:zentry 是什么?
好的问法应该是这样:哦~~~我看过说明了可是只有 -z 和 -p 两个参数中提到了 zentries,并且还都没有清楚的解释如何清除它。你是指这两个中的哪个吗?仍是我看漏了什么?
不少黑客圈子中看似无礼的行为并非存心冒犯。相反,它是直接了当,一针见血式的交流风格,这种风格更注重解决问题,而不是令人感受舒服而却模模糊糊。
若是你以为被冒犯了,试着平静地反应。若是有人真的作了出格的事,邮件列表、新闻群组或论坛中的前辈多半会招呼他。若是这没有发生而你却发火了,那么你发火对象的言语可能在黑客社区中看起来是正常的,而你将被视为有错的一方,这将伤害到你获取信息或帮助的机会。
另外一方面,你偶尔真的会碰到无礼和无聊的言行。与上述相反,对真正的冒犯者狠狠地打击,用犀利的语言将其驳得体无完肤都是能够接受的。然而,在行事以前必定要很是很是的有根据。纠正无礼的言论与开始一场毫无心义的口水战仅一线之隔,黑客们本身莽撞地越线的状况并不鲜见。若是你是新手或外人,避开这种莽撞的机会并不高。若是你想获得的是信息而不是消磨时光,这时最好不要把手放在键盘上以避免冒险。
(有些人断言不少黑客都有轻度的自闭症或亚斯伯格综合症,缺乏用于润滑人类社会正常交往所需的神经。这既多是真也多是假的。若是你本身不是黑客,兴许你认为咱们脑壳有问题还能帮助你应付咱们的古怪行为。只管这么干好了,咱们不在意。咱们喜欢咱们如今这个样子,而且一般对病患标记都有站得住脚的怀疑)。
Jeff Bigler 的观察总结和这个相关也值得一读 (tact filters)。
在下一节,咱们会谈到另外一个问题,当你行为不当时所会受到的冒犯
。
在黑客社区的论坛中有那么几回你可能会搞砸 —— 以本指南所描述到的或相似的方式。而你会在公开场合中被告知你是如何搞砸的,也许攻击的言语中还会带点夹七夹八的颜色。
这种事发生之后,你能作的最糟糕的事莫过于哀嚎你的遭遇、宣称被口头攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、忘了关马桶盖等等。相反地,你该这么作:
熬过去,这很正常。事实上,它是有益健康且合理的。
社区的标准不会自行维持,它们是经过参与者积极而公开地执行来维持的。不要哭嚎全部的批评都应该经过私下的邮件传送,它不是这样运做的。当有人评论你的一个说法有误或者提出不一样见解时,坚持声称受到我的攻击也毫无益处,这些都是失败者的态度。
也有其它的黑客论坛,受太高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称若是你不想帮助用户就闭嘴。
结果形成有想法的参与者纷纷离开,这么作只会使它们沦为毫无心义的唠叨与无用的技术论坛。
夸张的讲法是:你要的是“友善”(以上述方式)仍是有用?两个里面挑一个。
记着:当黑客说你搞砸了,而且(不管多么刺耳)告诉你别再这样作时,他正在为关心你和他的社区而行动。对他而言,不理你并将你从他的生活中滤掉更简单。若是你没法作到感谢,至少要表现得有点尊严,别大声哀嚎,也别由于本身是个有戏剧性超级敏感的灵魂和自觉得有资格的新来者,就期望别人像对待脆弱的洋娃娃那样对你。
有时候,即便你没有搞砸(或者只是在他的想像中你搞砸了),有些人也会平白无故地攻击你本人。在这种状况下,抱怨却是真的会把问题搞砸。
这些来找麻烦的人要么是毫无办法但自觉得是专家的不中用家伙,要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬,要么用本身的方式对付他们。这些来找麻烦的人在给他们本身找麻烦,这点你不用操心。
也别让本身卷入口水战,最好不要理睬大多数的口水战 -- 固然,这是在你检验它们只是口水战,而且未指出你有搞砸的地方,同时也没有巧妙地将问题真正的答案藏于其后(这也是有可能的)。
如下是几个经典蠢问题,以及黑客没回答时心中所想的:
问题:我怎样用 X 作 Y?
问题:我能够用 Bass-o-matic 文件转换工具将 AcmeCorp 档案转换为 TeX 格式吗?
问题:我在安装 Linux(或者 X )时有问题,你能帮我吗?
问题:我怎么才能破解 root 账号/窃取 OP 特权/读别人的邮件呢?
问题:我能在哪找到 X 程序或 X 资源?
回答:就在我找到它的地方啊,白痴 —— 搜索引擎的那一头。天哪!难道还有人不会用 Google 吗?
问题:我怎样用 X 作 Y?
回答:若是你想解决的是 Y ,提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 彻底无知,也对 Y 要解决的问题糊涂,还被特定形势禁锢了思惟。最好忽略这种人,等他们把问题搞清楚了再说。
问题:如何设定个人 shell 提示??
回答:若是你有足够的智慧提这个问题,你也该有足够的智慧去 RTFM,而后本身去找出来。
问题:我能够用 Bass-o-matic 文件转换工具将 AcmeCorp 档案转换为 TeX 格式吗?
回答:试试看就知道了。若是你试过,你既知道了答案,就不用浪费个人时间了。
问题:个人{程序/设定/SQL 语句}不工做
回答:这不算是问题吧,我对要我问你二十个问题才找得出你真正问题的问题没兴趣 —— 我有更有意思的事要作呢。在看到这类问题的时候,个人反应一般不外以下三种
问题:个人 Windows 电脑有问题,你能帮我吗?
回答:能啊,扔掉微软的垃圾,换个像 Linux 或 BSD 的开源操做系统吧。
注意:若是程序有官方版 Windows 或者与 Windows 有互动(如 Samba),你能够问与 Windows 相关的问题, 只是别对问题是由 Windows 操做系统而不是程序自己形成的回复感到惊讶, 由于 Windows 通常来讲实在太烂,这种说法一般都是对的。
问题:个人程序不会动了,我认为系统工具 X 有问题
回答:你彻底有多是第一个注意到被成千上万用户反复使用的系统调用与函数库档案有明显缺陷的人,更有可能的是你彻底没有根据。与众不同的说法须要与众不同的证据,当你这样声称时,你必须有清楚而详尽的缺陷说明文件做后盾。
问题:我在安装 Linux(或者 X )时有问题,你能帮我吗?
回答:不能,我只有亲自在你的电脑上动手才能找到毛病。仍是去找你当地的 Linux 使用群组者寻求实际的指导吧(你能在这儿找到使用者群组的清单)。
注意:若是安装问题与某 Linux 的发行版有关,在它的邮件列表、论坛或本地使用者群组中提问也许是恰当的。此时,应描述问题的准确细节。在此以前,先用 Linux
和全部被怀疑的硬件做关键词仔细搜索。
问题:我怎么才能破解 root 账号/窃取 OP 特权/读别人的邮件呢?
回答:想要这样作,说明了你是个卑鄙小人;想找个黑客帮你,说明你是个白痴!
最后,我将透过举一些例子,来讲明怎样聪明的提问;同一个问题的两种问法被放在一块儿,一种是愚蠢的,另外一种才是明智的。
蠢问题:
我能够在哪儿找到关于 Foonly Flurbamatic 的资料?
这种问法无非想获得 STFW 这样的回答。
聪明问题:
我用 Google 搜索过 "Foonly Flurbamatic 2600",可是没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料?
这个问题已经 STFW 过了,看起来他真的遇到了麻烦。
蠢问题:
我从 foo 项目找来的源码无法编译。它怎么这么烂?
他以为都是别人的错,这个傲慢自大的提问者。
聪明问题:
foo 项目代码在 Nulix 6.2 版下没法编译经过。我读过了 FAQ,但里面没有提到跟 Nulix 有关的问题。这是我编译过程的记录,我有什么作的不对的地方吗?
提问者已经指明了环境,也读过了 FAQ,还列出了错误,而且他没有把问题的责任推到别人头上,他的问题值得被关注。
蠢问题:
个人主机板有问题了,谁来帮我?
某黑客对这类问题的回答一般是:好的,还要帮你拍拍背和换尿布吗?
,而后按下删除键。
聪明问题:
我在 S2464 主机板上试过了 X 、 Y 和 Z ,但没什么做用,我又试了 A 、 B 和 C 。请注意当我尝试 C 时的奇怪现象。显然 florbish 正在 grommicking,但结果出人意料。一般在 Athlon MP 主机板上引发 grommicking 的缘由是什么?有谁知道接下来我该作些什么测试才能找出问题?
这个家伙,从另外一个角度来看,值得去回答他。他表现出了解决问题的能力,而不是坐等天上掉答案。
在最后一个问题中,注意告诉我答案
和给我启示,指出我还应该作什么诊断工做
之间微妙而又重要的区别。
事实上,后一个问题源自于 2001 年 8 月在 Linux 内核邮件列表(lkml)上的一个真实的提问。我(Eric)就是那个提出问题的人。我在 Tyan S2464 主板上观察到了这种没法解释的锁定现象,列表成员们提供了解决这一问题的重要信息。
经过个人提问方法,我给了别人能够咀嚼玩味的东西;我设法让人们很容易参与而且被吸引进来。我显示了本身具有和他们同等的能力,并邀请他们与我共同探讨。经过告诉他们我所走过的弯路,以免他们再浪费时间,我也代表了对他们宝贵时间的尊重。
过后,当我向每一个人表示感谢,而且赞扬此次良好的讨论经历的时候, 一个 Linux 内核邮件列表的成员表示,他以为个人问题获得解决并不是因为我是这个列表中的名人,而是由于我用了正确的方式来提问。
黑客从某种角度来讲是拥有丰富知识但缺少人情味的家伙;我相信他是对的,若是我像个乞讨者那样提问,不论我是谁,必定会惹恼某些人或者被他们忽视。他建议我记下这件事,这直接致使了本指南的出现。
若是仍得不到回答,请不要觉得咱们以为没法帮助你。有时只是看到你问题的人不知道答案罢了。没有回应不表明你被忽视,虽然不能否认这种差异很难区分。
总的来讲,简单的重复张贴问题是个很糟的点子。这将被视为无心义的喧闹。有点耐心,知道你问题答案的人可能生活在不一样的时区,可能正在睡觉,也有可能你的问题一开始就没有组织好。
你能够经过其余渠道得到帮助,这些渠道一般更适合初学者的须要。
有许多网上的以及本地的使用者群组,由热情的软件爱好者(即便他们可能从没亲自写过任何软件)组成。一般人们组建这样的团体来互相帮助并帮助新手。
另外,你能够向不少商业公司寻求帮助,不论公司大仍是小。别为要付费才能得到帮助而感到沮丧!毕竟,假使你的汽车发动机汽缸密封圈爆掉了 —— 彻底可能如此 —— 你还得把它送到修车铺,而且为维修付费。就算软件没花费你一分钱,你也不能强求技术支持老是免费的。
对像是 Linux 这种大众化的软件,每一个开发者至少会对应到上万名使用者。根本不可能由一我的来处理来自上万名使用者的求助电话。要知道,即便你要为这些协助付费,和你所购买的同类软件相比,你所付出的也是微不足道的(一般封闭源代码软件的技术支持费用比开源软件的要高得多,且内容也没那么丰富)。
态度和蔼一点。问题带来的压力常令人显得无礼或愚蠢,其实并非这样。
对初犯者私下回复。对那些坦诚犯错之人没有必要当众羞辱,一个真正的新手也许连怎么搜索或在哪找常见问题都不知道。
若是你不肯定,必定要说出来!一个听起来权威的错误回复比没有还要糟,别由于听起来像个专家很好玩,就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。
若是帮不了忙,也别妨碍他。不要在实际步骤上开玩笑,那样也许会毁了使用者的设置 —— 有些可怜的呆瓜会把它当成真的指令。
试探性的反问以引出更多的细节。若是你作得好,提问者能够学到点东西 —— 你也能够。试试将蠢问题转变成好问题,别忘了咱们都曾是新手。
尽管对那些懒虫抱怨一声 RTFM 是正当的,能指出文件的位置(即便只是建议个 Google 搜索关键词)会更好。
若是你决定回答,就请给出好的答案。当别人正在用错误的工具或方法时别建议笨拙的权宜之计(wordaround),应推荐更好的工具,从新界定问题。
正面的回答问题!若是这个提问者已经很深刻的研究并且也代表已经试过 X 、 Y 、 Z 、 A 、 B 、 C 但没获得结果,回答 试试看 A 或是 B
或者 试试 X 、 Y 、 Z 、 A 、 B 、 C
并附上一个连接一点用都没有。
帮助你的社区从问题中学习。当回复一个好问题时,问问本身如何修改相关文件或常见问题文件以避免再次解答一样的问题?
,接着再向文件维护者发一份补丁。
若是你是在研究一番后才作出的回答,展示你的技巧而不是直接端出结果。毕竟授人以鱼不如授人以渔
。
若是你须要我的电脑、Unix 系统和网络如何运做的基础知识,参阅 Unix 系统和网络基本原理。
当你发布软件或补丁时,试着按软件发布实践操做。
Evelyn Mitchel 贡献了一些愚蠢问题例子并启发了编写如何更好地回答问题
这一节, Mikhail Ramendik 贡献了一些特别有价值的建议和改进。