提问的智慧(How To Ask Questions The Smart Way)——Eric Steven Raymondlinux
引言程序员
在 黑客 的世界里,你所提技术问题的解答很大程度上取决于你提问的方式与解决此问题的难度,本文将教你如何提问才更有可能获得满意的答复。shell
开源程序的应用已经很广,你一般能够从其余更有经验的用户而不是黑客那里获得解答。这是好事,他们通常对新手常有的毛病更容忍一点。然尔,使用咱们推荐的方法,象对待黑客那样对待这些有经验的用户,一般能最有效地获得问题的解答。编程
第一件须要明白的事是黑客喜欢难题和激发思考的好问题。假如不是这样,咱们也不会写本文了。若是你能提出一个有趣的问题让咱们咀嚼玩味,咱们会感激你。好问题是种激励与礼物,帮助咱们发展认知,揭示没有注意或想到的问题。在黑客中,“好问题!” 是很是热烈而真挚的赞许。网络
此外,黑客还有遇到简单问题就表现出敌视或傲慢的名声。有时,咱们看起来还对新手和愚蠢的家伙有条件反射式的无礼,但事情并不真是这样。工具
咱们只是毫无歉意地敌视那些提问前不肯思考、不作本身家庭做业的人。这种人就象时间无底洞──他们只知道索取,不肯意付出,他们浪费了时间,这些时间本可用于其它更有趣的问题或更值得回答的人。咱们将这种人叫作 “失败者(loser)” (因为历史缘由,咱们有时将“loser”拼写为“lusers” 。)学习
咱们意识到许多人只是想使用咱们写的软件,他们对学习技术细节没有兴趣。对大多数人而言,计算机只是种工具,是种达到目的的手段而已。他们有本身的生活而且有更要紧的事要作,咱们认可这点,也从不期望每一个人都对这些让咱们着迷的技术问题感兴趣。不过,咱们回答问题的风格是为了适应那些真正对此有兴趣并愿意主动参与解决问题的人,这一点不会变,也不应变。若是连这都变了,咱们就会在本身能作得最好的事情上再也不那么犀利。测试
咱们(大多数)是自愿者, 从本身繁忙的生活中抽时间来回答问题,有时会力不从心。所以,咱们会绝不留情地滤除问题,特别是那些看起来象是失败者提的,以便更有效地把回答问题的时间留给那些胜利者。字体
若是你认为这种态度使人反感、以施惠者自居或傲慢自大,请检查你的假设,咱们并未要求你屈服──事实上,假如你作了该作的努力,咱们中的大多数将很是乐意平等地与你交流,并欢迎你接纳咱们的文化。试图去帮助那些不肯自救的人对咱们简直没有效率。不懂没有关系,但愚蠢地作事不行。网站
因此,你没必要在技术上很在行才能吸引咱们的注意,但你 必须 表现出能引导你在行的姿态──机 敏、有想法、善于观察、乐于主动参与问题的解决。若是你作不到这些使你不同凡响的事情,咱们建议你付钱跟别人签商业服务合同,而不是要求黑客无偿帮助。
若是你决定向咱们求助,你不会想成为一名失败者,你也不想被当作一个失败者。获得快速有效回答的最好方法是使提问者看起来象个聪明、自信和有想法的人,而且暗示只是碰巧在某一特别问题上须要帮助。
(欢迎对本文指正,能够将建议发至 esr@thyrsus.com 或 respond-auto@linuxmafia.com。 请注意,本文不想成为通常性的 网络礼仪 指南,我通常会拒绝那些与引出技术论坛中有用的回答不特别相关的建议。)
提问前
在经过电邮、新闻组或论坛提技术问题之前,作如下事情:
尝试在你准备提问论坛的历史文档中搜索答案
尝试搜索互联网以找到答案
尝试阅读手册以找到答案
尝试阅读“常见问题文档”(FAQ)以找到答案
尝试本身检查或试验以找到答案
尝试请教懂行的朋友以找到答案
若是你是程序员,尝试阅读源代码以找到答案
提问时,请先代表你已作了上述事情,这将有助于创建你不是寄生虫与浪费别人时间的印象。最好再表述你从中 学到的东西 ,咱们喜欢回答那些表现出能从答案中学习的人。
运用某些策略,好比用谷歌(Google)搜索你遇到的各类错误提示(既搜索 谷歌论坛,也搜索网页), 这样极可能直接就找到了解决问题的文档或邮件列表线索。 即便没有结果,在邮件列表或新闻组寻求帮助时提一句“我在谷歌中搜过下列句子但没有找到什么有用的东西” 也是件好事,至少它代表了搜索引擎不能提供哪些帮助。将搜索关键词与你的问题及可能的解决方案联系起来,还有助于引导其余有相似问题的人。
别着急,不要期望几秒钟的谷歌搜索就能解决一个复杂的问题。读一下常见问题文档。在向专家提问以前,先向后靠靠放松一下,再思考一下问题。相信咱们,他们能从你的提问看出你作了多少阅读与思考,若是你是有备而来,将更有可能获得解答。不要将全部问题一股脑抛出,只因你的第一次搜索没有结果(或者结果太多)。
认真地思考,准备好你的问题。轻率的提问只能获得轻率的回答,或者压根没有。在提问时,你越是表现出在此前作过思考与努力去解决本身的问题,你越有可能获得真正的帮助。
注意别提错问题。若是提问基于错误的假设,某黑客多半会一边想 “愚蠢的问题……”,一边按将错就错的答案回复你,而且但愿这种只是获得你本身“问的问题”而非真正所需的解答,给你一个教训。
永远不要假设你 有资格 获得解答。你没有这种资格,毕竟你没有为此服务付费。若是你可以提出有内容、有趣和激励思考的问题──那种毫无疑问可以向社区贡献经验,而不只仅是消极地要求从别人那获取知识的问题,你将“挣到”答案。
另外一方面,代表你有能力也乐意参与问题的解决是个很好的开端。“有没有人能指个方向?”,我这还差点什么?”,“我应该查哪一个网站?”,一般要比 “请给出我能够用的完整步骤”更容易获得回复,由于你代表了只要有人能指个方向,你就很乐意完成剩下的过程。
提问时
仔细挑选论坛
要对在哪提问留心,若是你作了下述事情,多半会被一笔勾销或被当作“失败者”:
张贴与论坛主题无关的问题
在面向高级技术问题的论坛上张贴肤浅的问题,或者反之。
在太多不一样的新闻组同时张贴
给既非熟人也没有义务解决你问题的人发送你私人的电邮
为保护通讯的渠道不被无关的东西淹没,黑客会除掉那些没有找对地方的问题,你不会想让这种事落到本身头上的。
所以,第一步是找对论坛。谷歌和其它搜索引擎仍是你的朋友,能够用它们搜索你遇到困难的软硬件问题最相关的项目网站。那里一般都有项目的常见问题(FAQ)、邮件列表及文档的连接。若是你的努力(包括 阅读 FAQ)都没有结果,这些邮件列表就是最后能取得帮助的地方。项目的网站也许还有报告臭虫的流程或连接,若是是这样,去看看。
向陌生的人或论坛发送邮件极有多是在冒险。譬如,不要假设一个内容丰富的网页的做者想充当你的免费顾问,不要对你的问题是否会受到欢迎作太乐观的估计──若是你不肯定,向别处发或者压根别发。
在选择论坛、新闻组或邮件列表时,别太相信名字,先看看 FAQ 或者许可书以明确你的问题是否切题。发贴前先翻翻已有的帖子,这样可让你感觉一下那里行事的方式。事实上,张贴前在新闻组或邮件列表的历史文档中搜索与你问题相关的关键词是个极好的主意,也许就找到答案了。即便没有,也能帮助你概括出更好的问题。
别象机关枪似的一次性“扫射”全部的帮助渠道,这就象大喊大叫同样会使人不快,温柔地一个一个来。
弄懂主题!最典型的错误之一是在某种致立于跨平台可移植的语言、库或工具的论坛中提关于 Unix 或 Windows 操做系统程序接口的问题。若是你不明白为何这是大错,最好在搞清楚概念前什么也别问。
通常来讲,在仔细挑选的公共论坛中提问比在私有论坛中提一样的问题更容易获得有用的回答。有几个道理支持这点,一是看潜在的回复者有多少,二是看论坛的参与者有多少,黑客更愿回答能启发多数人的问题。
能够理解,老练的黑客和一些流行软件的做者正在承受过多的不当消息。就象那根最后压垮骆驼背的稻草同样,你的加入也有可能使状况走向极端──已经好几回了,一些流行软件的做者退出了对本身软件的支持,由于伴随而来的涌入其私人邮箱的垃圾邮件变得没法忍受。
面向新手的论坛和互联网中继聊天(IRC)一般响应最快
本地的用户组织或者你所用的 Linux 发行版也许正在宣传新手取得帮助的论坛或 IRC 通道(在一些非英语国家,新手论坛极可能仍是邮件列表),这些地方是开始提问的好去处,特别是当你以为遇到的也许只是相对简单或者很普通的问题时。通过宣传的 IRC 通道是公开邀请提问的地方,一般能够获得实时的回复。
事实上,若是出问题的程序来自某发行版(这很常见),最好先去该发行版的论坛或邮件列表中提问,再到程序自己的项目论坛或邮件列表,(不然)该项目的黑客可能仅仅回复“用 咱们的 代码”。
在任何论坛发贴之前,先看看有没有搜索功能。若是有,就试着用问题的几个关键词搜索一下,也许就有帮助。若是在此以前你已作过全面的网页搜索(你应该这样去作),仍是再搜索一下论坛,搜索引擎有可能没来得及索引此论坛的所有内容。
经过论坛或 IRC 通道提供项目的用户支持有增加的趋势,电子邮件交流则更多地为项目开发者保留。因此先在论坛或 IRC 中寻求与该项目相关的帮助。
第二步,使用项目的邮件列表
当某个项目存在开发者邮件列表时,要向列表而不是其中的个别成员提问,即便你确信他能最好地回答你的问题。查一查项目的文档和主页,找到项目的邮件列表并使用它。采用这种办法有几个很好的理由:
向个别开发者提的问题(若是)足够好,也将对整个项目组有益。相反,若是你认为本身的问题对整个项目组来讲太愚蠢,这也不能成为骚扰个别开发者的理由。
向列表提问能够分散开发者的负担,个别开发者(尤为是项目领导)也许太忙以致于无法回答你的问题。
大多数邮件列表都要存档,那些存档将被搜索引擎索引,若是你向列表提问并获得解答,未来其它人能够经过网页搜索找到你的问题和答案,也就不用再次发问了。
若是某些问题常常被问到,开发者能够利用此信息改进文档或软件自己,以使其更清楚。若是只是私下提问,就没有人能看到最多见问题的完整场景。
若是一个项目既有 “用户” 也有“开发者”(或 “黑客”)邮件列表或论坛,而你又不摆弄那些代码,向“用户”列表或论坛提问。不要假设本身会在开发者列表中受到欢迎,那些人多半会遭受你的噪音干扰。
然尔,若是你 确信 你的问题不通常,并且在“用户” 列表或论坛中几天都没有回复,能够试试“开发者”列表或论坛。建议你在张贴前最好先暗暗地观察几天以了解那的行事方式(事实上这是参与任何私有或半私有列表的好主意)
若是你找不到一个项目的邮件列表,而只能查到项目维护者的地址,只管向其发信。即使在这种状况下,也别假设(项目)邮件列表不存在。在你的电子邮件中陈述你已经试过但没有找到合适的邮件列表,也说起你不反对将本身的邮件转发给他人(许多人认为,即便没什么秘密,私人电子邮件也不该该被公开。经过容许将你的电子邮件转发他人,你给了相应人员处置你邮件的选择)。
使用有意义且明确的主题
在邮件列表、新闻组或论坛中,主题是你在五十个或更少的字之内吸引有资格专家注意的黄金机会,不要用诸如 “请帮我” (更别提大写的 “请帮我!!!!”,这种主题的消息会被条件反射式地删掉)之类的唠叨浪费机会。不要用你痛苦的深度来打动咱们,相反,要在这点空间中使用超级简明扼要的问题描述。
使用主题的好惯例是“对象──误差”(式的描述),许多技术支持组织就是这样作的。在“对象”部分指明是哪个或哪一组东西有问题,在“误差”部分则描述与指望的行为不一致的地方。
愚蠢: 救命啊!个人笔记本视频工做不正常!
明智: X.org 6.8.1 扭曲鼠标光标,MV1005 型号的某显卡芯片组
更明智: 使用 MV1005 型号的某显卡芯片组在 X.org 6.8.1 的鼠标光标被扭曲
编写 “对象──误差”式描述的过程有助于你组织对问题的细致思考。是什么被影响了?仅仅是鼠标光标或者还有其它图形?只在 X.org 中出现?或只是在其 6.8.1 版中?是针对某显卡芯片组?或者只是其中的 MV1005 型号?一个黑客只需描一眼就可以当即明白什么是你遇到的问题,什么是你本身的问题。
更通常地,想象一下在一个只显示主题的文档索引中查找。让你的主题更好地反映问题,能够使下一个搜索相似问题的人可以在文档中直接就找到答案的线索,而不用再次发贴提问。
若是你想在回复中提问,确保改变主题以代表你是在问一个问题,一个主题象 “Re: 测试” 或者 “Re: 新臭虫”的消息不太可能引发足够的注意。同时,将回复中与新主题不甚相关的引用内容尽可能删除。
对于列表消息,不要直接点击回复(按钮)来开始一个全新的线索,这将限制你的观众。有些邮件阅读程序,好比 mutt,容许用户按线索排序并经过折叠线索来隐藏消息,这样作的人永远看不到你发的消息。
仅仅改变主题还不够。mutt 和其它一些邮件阅读程序还要检查邮件头主题之外的其它信息,以便为其指定线索,因此宁肯发一个全新的邮件。
在论坛,由于消息与特定的线索紧密结合,而且一般在线索以外不可见,好的提问方式略有不一样,经过回复提问并没关系。不是全部论坛都容许在回复中出现分离的主题,并且这样作了基本上没有人会去看。不过,经过回复提问自己就是使人怀疑的作法,由于它们只会被正在查看该线索的人读到。因此,除非你 只想 在该线索当前活跃的人群中提问,仍是另起炉灶比较好。
使问题容易回复
以“请向……回复”来结束问题多半会使你得不到回答。若是你以为花几秒钟在邮件客户端设置一下回复地址都麻烦,咱们也以为花几秒钟考虑你的问题更麻烦。若是你的邮件客户端程序不支持这样作,换个好点的;若是是操做系统不支持全部这种邮件客户端程序,也换个好点的。
在论坛,要求经过电子邮件回复是彻底无礼的,除非你确信回复的信息也许是敏感的(并且有人会为了某些未知的缘由,只让你而不是整个论坛知道答案)。若是你只是想在有人回复线索时获得电子邮件提醒,能够要求论坛发送。几乎全部论坛都支持诸如“留意本线索”、“有回复发送邮件”等功能。
用清晰、语法、拼写正确的语句书写
经验告诉咱们,粗心与草率的做者一般也粗心与草率地思考和编程(我敢打赌)。为这些粗心与草率的思考者回答问题没有什么好处,咱们宁肯将时间花在其它地方。
清楚、良好地表达你的问题很是重要。若是你以为这样作麻烦,咱们也以为注意(你的问题)麻烦。花点额外的精力斟酌一下字句,用不着太僵硬与正式──事实上,黑客文化很看重能准确地使用非正式、俚语和幽默的语句。但它 必须 很准确,并且有迹象代表你是在思考和关注问题。
正确地拼写、使用标点和大小写,不要将“its”混淆为“it's”,“loose”搞成“lose”或者将“discrete”弄成 “discreet”。不要所有用大写,这会被视为无礼的大声嚷嚷 (所有小写也好不到哪去,由于不易阅读。Alan Cox [注:著名黑客,Linux 内核的重要参与者] 也许能够这样作,但你不行。)
通常而言,若是你写得象个半文盲似的傻子,多半得不到理睬。也不要使用即时通信中的简写,如将“you”简化为“u”会使你看起来象一个为了节约二次击键的半文盲式的傻子。更糟的是,若是象个小孩似地鬼画桃符那绝对是在找死,能够确定没人会理你(或者最可能是给你一大堆指责与挖苦)。
若是在非母语论坛提问,你的拼写与语法错误会获得有限的宽容,但懒惰彻底不会被容忍(是的,咱们一般看得出其中的差异)。同时,除非你知道回复者使用的语言,请使用英语书写。繁忙的黑客通常会直接删除用他们看不懂语言写的消息。在互联网上英语是工做语言,用英语书写能够将你的问题不被阅读就被直接删除的可能性降到最低。
使用易于读取且标准的文件格式发送问题
若是你人为地将问题搞得难以阅读,它多半会被忽略,人们更愿读易懂的问题,因此:
使用纯文本而不是 HTML(超文本标注语言)( 关闭HTML 并不难)
使用 MIME(多用途互联网邮件扩展)附件一般没有问题,前提是真正有内容(譬如附带的源文件或补丁),而不只仅是邮件客户端程序生成的模板(譬如只是消息内容的拷贝)。
不要发送整段只是单行句子但屡次折回的邮件(这使得回复部份内容很是困难)。设想你的读者是在80个字符宽的文本终端阅读邮件,设置你的行折回点小于 80 列。
可是,也 不要 用任何固定列折回数据(譬如日志文件拷贝或会话记录)。数据应该原样包含,使回复者确信他们看到的是与你看到的同样的东西。
在英语论坛中,不要使用'Quoted-Printable' MIME 编码发送消息。这种编码对于张贴非 ASCII 语言多是必须的,但不少邮件程序并不支持。当它们分断时,那些文本中四处散布的 “=20”符号既难看也分散注意力,甚至有可能破坏内容的语意。
永远不要 期望黑客们阅读使用封闭的专用格式编写的文档,诸如微软公司的 Word 或 Excel 文件等。大多数黑客对此的反应就象有人将还在冒热气的猪粪倒在你门口时你的反应同样。即便他们可以处理,也很厌恶这么作。
若是你从使用视窗的电脑发送电子邮件,关闭微软愚蠢的“聪明引用”功能,以避免在你的邮件中处处散布垃圾字符。
在论坛,勿滥用“表情符号”和“HTML”功能(当它们提供时)。一两个表情符号一般没有问题,但花哨的彩色文本倾向于令人认为你是个无能之辈。过滥地使用表情符号、色彩和字体会使你看来象个傻笑的小姑娘。这一般不是个好主意,除非你只是对性而不是有用的回复更有兴趣。
若是你使用图形用户界面的邮件客户端程序(如网景公司的 Messenger、微软公司的 Outlook 或者其它相似的),注意它们的缺省配置不必定知足这些要求。大多数这类程序有基于菜单的“查看源码”命令,用它来检查发送文件夹中的消息,以确保发送的是没有多余杂质的纯文本文件。
描述问题应准确且有内容
仔细、清楚地描述问题的症状
描述问题发生的环境(主机、操做系统、应用程序,任何相关的),提供销售商的发行版和版本号(如:“Fedora Core 7”、“Slackware 9.1”等)
描述提问前作过的研究及其理解。
描述提问前为肯定问题而采起的诊断步骤。
描述最近对计算机或软件配置的任何相关改变。
若是可能,提供在可控环境下重现问题的方法。
尽最大努力预测黑客会提到的问题,并提早备好答案。
若是你认为是代码有问题,向黑客提供在可控环境下重现问题的方法尤为重要。当你这么作时,获得有用且及时回复的可能性将大大增长。
西蒙.泰瑟姆(Simon Tatham)写过一篇 如何有效报告臭虫 的文章,我强烈推荐各位阅读。
量不在多,精炼则灵
你应该(写得)精炼且有内容,简单地将一大堆代码或数据罗列在求助消息中达不到目的。若是你有一个很大且复杂的测试样例让程序崩溃,尝试将其裁剪得越小越好。
至少有三个理由支持这点。第一,让别人看到你在努力简化问题使你更有可能获得回复。第二,简化问题使你更有可能获得 有用的 回复。第三,在提纯臭虫报告的过程当中,你可能本身就找到了解决办法或权宜之计。
别急于宣称找到臭虫
当你在一个软件中遇到问题,除非你 很是、很是 的有根据,不要动辄声称找到了臭虫。提示:除非你能提供解决问题的源代码补丁,或者对前一版本的回归测试表现出不正确的行为,不然你都多半不够彻底确信。对于网页和文档也如此,若是你(声称)发现了文档的“臭虫”,你应该能提供相应位置的替代文本。
记住,还有许多其它用户并未经历你遇到的问题,不然你在阅读文档或搜索网页时就应该发现了(你在报怨前已经作了这些,是吧 ?)。这也意味着颇有多是你弄错了而不是软件自己有问题。
编写软件的人老是很是辛苦地使它尽量完美。若是你声称找到了臭虫,也就置疑了他们的能力,即便你是对的,也有可能会使其中的部分人感到不快。(此外,)在主题中嚷嚷“臭虫”也是特别不老练的。
提问时,即便你私下很是确信已经发现一个真正的臭虫,最好写得象是 你 作错了什么。若是真的有臭虫,你会在回复中看到这点。这样作的话,若是真有虫子,维护者就会向你道歉,这总比你弄砸了而后欠别人一个道歉要强。
低三下四代替不了作本身的家庭做业
有些人明白他们不该该粗鲁或傲慢地行事并要求获得答复,但他们退到相反的低三下四的极端:“我知道我只是个可怜的新丁,一个失败者,但……”。这既令人困扰,也没有用,当伴随着对实际问题含糊的描述时还特别使人反感。
别用低级灵长类动物的办法浪费你个人时间,相反,尽量清楚地描述背景状况和你的问题,这比低三下四更好地摆正了你的位置。
有时,论坛设有单独的初学者提问版面,若是你真的认为遇到了肤浅的问题,到那去就是了,但同样别低三下四。
描述问题症状而不是猜想
告诉黑客是什么致使了问题是没用的(若是你的诊断理论是了不得的东西,你还会向别人咨询求助吗?)。因此,确保只是告诉他们问题的原始症状,而不是你的解释和理论,让他们来解释和诊断。若是你认为陈述本身的猜想很重要,应清楚地说明这只是你的猜想并描述为何它们不起做用。
愚蠢: 我在编译内核时接连遇到 SIG11 错误,怀疑主板上的某根电路丝断了,找到它们的最好办法是什么?
明智: 我组装的电脑(K6/233 CPU、FIC-PA2007 主板[威盛 Apollo VP2 芯片组]、Corsair PC133 SDRAM 256Mb 内存)最近在开机 20 分钟左右、作内核编译时频繁地报 SIG11 错,但在头 20 分钟内从不出问题。重启动不会复位时钟,但整夜关机会。更换全部内存未解决问题,相关的典型编译会话日志附后。
因为以上这点许多人彷佛难以掌握,这里有句话能够提醒你:“全部的诊断专家都来自密苏里州”。美国国务院的官方座右铭则是“让我看看”(出自国会议员威勒德.D.范迪弗[Willard D. Vandiver]在1899年时的讲话:“我来自一个出产玉米、棉花、牛蒡和民主党人的国家,滔滔雄辩既不能说服我,也不会让我满意。我来自密苏里州,你必须让我看看。”)针对诊断者而言,这并非怀疑,而只是一种真实而有用的需求,以便让他们看到与你看到的原始证据尽量一致的东西,而不是你的猜想与总结。(因此,)让咱们看看。
按时间前后罗列问题症状
刚出问题以前发生的事情一般包含有解决问题最有效的线索。因此,记录中应准确地描述你、电脑和软件在崩溃前都作了什么。在命令行处理的状况下,有会话日志(如运行脚本工具生成的)并引用相关的若干(如20)行记录会很是有帮助。
若是崩溃的程序有诊断选项(如-v详述开关),试着选择这些能在记录中增长排错信息的选项。记住,“多”不等于“好”。试着选取适当的排错级别以便提供有用的信息而不是将阅读者淹没在垃圾中。
若是你的记录很长(如超过四段),在开头简述问题随后按时间前后罗列详细过程也许更有用。这样,黑客在读你的记录时就知道该注意哪些内容了。
描述目标而不是过程
若是你想弄清楚如何作某事(而不是报告一个臭虫),在开头就描述你的目标,而后才陈述遇到问题的特定步骤。
常常出现这种状况,寻求技术帮助的人在脑壳里有个更高层次的目标,他们在自觉得能达到目标的特定道路上被卡住了,而后跑来问该怎么走,但没有意识到这条路自己有问题,结果要费很大的劲才能经过。
愚蠢: 我怎样才能让某图形程序的颜色拾取器取得十六进制的 RGB 值?
明智: 我正试着用本身选定数值的颜色替换一幅图片的色表,我如今知道的惟一方法是编辑每一个表槽,但却没法让某图形程序的颜色拾取器取得十六进制的 RGB 值。
第二种提法是明智的,它使得建议采用更合适的工具以完成任务的回复成为可能。
别要求私下回复电邮
黑客们认为问题的解决过程应该公开、透明,此过程当中若是更有才能的人注意到不完整或者不当之处,最初的回复才可以、也应该被纠正。同时,做为回复者也由于能力和学识被其它同行看到而获得某种回报。
当你要求私下回复时,此过程和回报都被停止。别这样作,让 回复者 来决定是否私下回答──若是他真这么作了,一般是由于他认为问题编写太差或者太肤浅,以致于对其它人毫无心义。
对这条规则存在一条有限的例外,若是你确信提问可能会引来大量雷同的回复时,那么“向我发电邮,我将为论坛概括这些回复”将是神奇的句子。试着将邮件列表或新闻组从洪水般雷同的回复中解救出来是很是有礼貌的──但你必须信守诺言。
提问应明确
漫无边际的问题一般也被视为没有明确限制的时间无底洞。最有可能给你有用答案的人一般也是最忙的人(假如只是由于他们承担了太多工做的话),这些人对于没有止境的时间无底洞极其敏感,因此他们也倾向于讨厌那些漫无边际的问题。
若是你明确了想让回复者作的事(如指点方向、发送代码、检查补丁或其它),你更有可能获得有用的回复。(由于)这样可让他们集中精力并间接地设定了他们为帮助你须要花费的时间和精力上限,这很好。
要想理解专家生活的世界,能够这样设想:那里有丰富的专长资源但稀缺的响应时间。你暗中要求他们奉献的时间越少,你越有可能从这些真正懂行也真正很忙的专家那里获得解答。
因此限定你的问题以使专家回答时须要付出的时间最少──这一般与简化问题还不太同样。举个例,“请问能否指点一下哪有好一点的 X 解释?”一般要比“请解释一下 X”明智。若是你的代码不运行了,一般请别人看看哪有问题比叫他们帮你改正更明智。
关于代码的问题
别要求他人给你出问题的代码排错而不说起应该从何入手。张贴几百行的代码,而后说一声“它不能运行”会让你得不到理睬。只贴几十行代码,而后说一句“在第七行之后,本应该显示<x>,但实际出现的是<y>”很是有可能让你获得回复。
最精确描述代码问题的方法是提供一个能展现问题的最小测试样例。什么是最小测试样例?它是对问题的展示,只须要恰好可以重现非预期行为的代码便可。如何生成一个最小测试样例?若是你知道哪一行或哪一段代码会产生问题,将其复制并提供恰好够用的外围支撑代码以构成一个完整的样例(够用是指源码恰好能被编译器、解释器或任何处理它的程序所接受)。若是你不能将问题缩小到特定的段落,复制源码并去除那些与问题无关的代码段。你能提供的最小测试样例越小越好(参见 量不在多,精炼则灵 )。
生成一个很是小的最小测试样例并不老是可能,但尽力去作是很好的锻练,这有可能帮助你找到须要本身解决的问题。即便你找不到,黑客们喜欢看到你努力过,这将使他们更合做。
若是你只是想让别人帮忙审一下代码,在最开头就要说出来,而且必定要提到你认为哪一部分特别须要关注以及为何。
别张贴家庭做业式问题
黑客们善于发现“家庭做业”式的问题。咱们中的大多数人已经作了本身的家庭做业,那是该 你 作的,以便从中学到东西。问一下提示没有关系,但不是要求完整的解决方案。
若是你怀疑本身碰到了一个家庭做业式的问题,但仍然没法解决,试试在用户组、论坛或(做为最后一招)在项目的“用户”邮件列表或论坛中提问。尽管黑客们 会 看出来,一些老用户也许仍会给你提示。
删除无心义的要求
抵制这种诱惑,即在求助消息末尾加上诸如“有人能帮我吗?”或“有没有答案?”之类在语义上毫无心义的东西。第一,若是问题描述还不完整,这些附加的东西最多也只能是多余的。第二,由于它们是多余的,黑客们会认为这些东西烦人──就颇有可能用逻辑上无误但打发人的回复,诸如“是的,你能够获得帮助”和“不,没有给你的帮助”。
通常来讲,避免提“是或否”类型的问题,除非你想获得 “是或否”类型的回答。
不要把问题标记为“紧急”, 即便对你而言的确如此
这是你的问题,不要咱们的。宣称“紧急”极有可能事与愿违:大多数黑客会直接删除这种消息,他们认为这是无礼和自私地企图获得即时与特殊的关照。
有一点点局部的例外,若是你是在一些知名度很高、会使黑客们激动的地方使用程序,也许值得这样去作。在这种状况下,若是你有期限压力,也颇有礼貌地提到这点,人们也许会有足够的兴趣快一点回答。
固然,这是很是冒险的,由于黑客们对什么是使人激动的标准多半与你的不一样。譬如从国际空间站这样张贴没有问题,但表明感受良好的慈善或政治缘由这样作几乎确定不行。事实上,张贴诸如“紧急:帮我救救这个毛绒绒的小海豹!”确定会被黑客回避或光火,即便他们认为毛绒绒的小海豹很重要。
若是你以为这难以想象,再把剩下的内容多读几遍,直到弄懂了再发贴也不迟。
礼貌老是有益的
礼貌一点,使用“请”和“谢谢你的关注”或者“谢谢你的关照”,让别人明白你感谢他们无偿花时间帮助你。
坦率地讲,这一点没有语法正确、文字清晰、准确、有内容和避免使用专用格式重要(同时也不能替代它们)。黑客们通常宁肯读有点唐突但技术鲜明的臭虫报告,而不是那种有礼但含糊的报告。(若是这点让你不解,记住咱们是按问题能教咱们什么来评价它的)
然尔,若是你已经谈清楚了技术问题,客气一点确定会增长你获得有用回复的机会。
(咱们必须指出,本文惟一受到一些老黑客认真反对的地方是之前曾经推荐过的“提早谢了”,一些黑客认为这隐含着过后不用再感谢任何人的暗示。咱们的建议是要么先说 “提早谢了”,过后 再 对回复者表示感谢,要么换种方式表达,譬如用“谢谢你的关注”或“谢谢你的关照”)。
问题解决后追加一条简要说明
问题解决后向全部帮助过的人追加一条消息,让他们知道问题是如何解决的并再次感谢。若是问题在邮件列表或新闻组中受到普遍关注,在那里追加此消息比较恰当。
最理想的方式是向最初提问的线索回复此消息,并在主题中包含“已解决”、“已搞定”或其它同等含义的明显标记。在人来人往的邮件列表里,一个看见线索 “问题 X”和“问题 X-已解决”的潜在回复者就明白不用再浪费时间了(除非他我的以为“问题 X”有趣),所以能够利用此时间去解决其它问题。
追加的消息用不着太长或太复杂,一句简单的“你好──是网线坏了!谢谢你们──比尔”就比什么都没有要强。事实上,除非解决问题的技术真正高深,一条简短而亲切的总结比长篇大论要好。说明是什么行动解决了问题,用不着重演整个排错的故事。
对于有深度的问题,张贴排错历史的摘要是恰当的。描述问题的最终状态,说明是什么解决了问题,在此以后 才指明能够避免的弯路。应避免的弯路部分应放在正确的解决方案和其它总结材料以后,而不要将此消息搞成侦探推理小说。列出那些帮助过你的名字,那样你会交到朋友的。
除了有礼貌、有内容之外,这种类型的追帖将帮助其余人在邮件列表、新闻组或论坛文档中搜索到真正解决你问题的方案,从而也让他们受益。
最后,此类追帖还让每位参与协助的人因问题的解决而产生一种知足感。若是你本身不是技术专家或黑客,相信咱们,这种感受对于你寻求帮助的老手和专家是很是重要的。问题叙述到最后不知所终老是使人沮丧的,黑客们痒痒地渴望它们被解决。“挠痒痒”为你挣到的信誉将对你下次再次张贴提问很是很是的有帮助。
考虑一下怎样才能避免他人未来也遇到相似的问题,问问本身编一份文档或 FAQ 补丁会不会有帮助,若是是的话就将补丁发给维护者。
在黑客中,这种良好的后继行动实际上比传统的礼貌更重要,也是你善待他人而赢得声誉的方式,这是很是有价值的财富。
如何解读回答
“读读该死的手册”(RTFM)和“搜搜该死的网络”(STFW):如何明白你已彻底搞砸
有一个古老而神圣的传统:若是你收到“读读该死的手册”(RTFM) 的回复,发信人认为你应该去“读读该死的手册”。他或她多半是对的,去读一下吧。
“读读该死的手册”(RTFM)有个年轻一点的亲戚,若是你收到“搜搜该死的网络”(STFW)的回复,发信人认为你应该“搜搜该死的网络”。那人多半也是对的,去搜一下吧。(更温和一点的说法是“谷歌是你的朋友!”)
在论坛,你也可能被要求去搜索论坛的文档。事实上,有人甚至可能热心地为你提供之前解决此问题的线索。但不要依赖这种关照,提问前应该先搜索一下文档。
一般,叫你搜索的人已经打开了能解决你问题的手册或网页,正在一边看一边敲键盘。这些回复意味着他认为:第一,你要的信息很容易找到。第二,自已找要比别人喂到嘴里能学得更多。
你不该该以为这样就被冒犯了,按黑客的标准,回复者没有不理你就是在向你表示某种尊敬,你反而应该感谢他热切地想帮助你。
若是还不明白……
若是你看不懂回答,不要立刻回复一个要求说明的消息,先试试那些最初提问时用过的相同工具(如手册、FAQ、网页、懂行的朋友等)试着搞懂回答。若是仍是须要说明,展示你已经明白的。
譬如,假如我告诉你:“看起来象是某输入项有问题,你须要清除它”,接着是个 很差 的回帖:“什么是某输入项?”。而这是一个 很好 的跟帖:“是的,我读了手册,某某输入项只在 -z 和 -p 开关中被提到,但都没有涉及到如何清除它们,你指的是哪个仍是我弄错了什么?”
对待无礼
不少黑客圈子中看似无礼的行为并非存心冒犯。相反,它是直接了当、一针见血式的交流风格,这种风格对于更关注解决问题而不是使别人感受舒服而混乱的人是很天然的。
若是你以为被冒犯了,试着平静地反应。若是有人真的作了过格的事,邮件列表、新闻组或论坛中的前辈多半会招呼他。若是这 没有 发生而你却光火了,那么你发火对象的言语可能在黑客社区中看起来是正常的,而 你 将被视为有错的一方,这将伤害到你获取信息或帮助的机会。
另外一方面,你会偶而真的碰到无礼和无聊的言行。与上述相反,对真正的冒犯者狠狠地打击、用犀利的语言将其驳得体无完肤都是能够接受的。然尔,在行事以前必定要很是很是的有根据。纠正无礼的言论与开始一场毫无心义的口水战仅一线之隔,黑客们本身莽撞地越线的状况并不鲜见。若是你是新手或外来者,避开这种莽撞的机会并不高。若是你想获得的是信息而不是消磨时光,这时最好不要把手放在键盘上以避免冒险。
(有些人断言不少黑客都有轻度的自闭症或阿斯伯格综合症,缺乏用于润滑人类社会“正常”交往所需的脑电路。这既多是真也多是假。若是你本身不是黑客,兴许你认为咱们脑壳有问题还能帮助你应付咱们的古怪行为。只管这么干好了,咱们不在意。咱们 喜欢 如今这个样子,而且通常都对病号标记有站得住脚的怀疑。)
在下一节,咱们会谈到另外一个问题,当 你 行为不当时会受到的“冒犯”。
别象失败者那样反应
在黑客社区的论坛中有那么几回你可能会搞砸──以本文描述或相似的方式。你会被示众是如何搞砸的,也许言语中还会带点颜色。
这种事发生之后,你能作的最糟糕的事莫过于哀嚎你的遭遇、宣称被口头攻击、要求道歉、高声尖叫、憋闷气、威胁诉诸法律、向其雇主报怨、忘了关马桶盖等等。相反,你该这样去作:
熬过去,这很正常。事实上,它是有益健康与恰当的。
社区的标准不会本身维持,它们是经过参与者积极而 公开 地执行来维持的。不要哭嚎全部的批评都应该经过私下的邮件传送,这不是事情运做的方式。当有人评论你的一个说法有误或者提出不一样见解时,坚持声称受到我的攻击也毫无益处,这些都是失败者的态度。
也有其它的黑客论坛,受太高礼节要求的误导,禁止参与者张贴任何对别人帖子挑毛病的消息,并声称“若是你不想帮助用户就闭嘴”。有思路的参与者纷纷离开的结果只会使它们变成了毫无心义的唠叨与无用的技术论坛。
是夸张的“友谊”(以上述方式)仍是有用?挑一个。
记着:当黑客说你搞砸了,而且(不管多么刺耳地)告诉你别再这样作时,他正在为关心你和他的社区而行动。对他而言,不理你并将你从他的生活中滤除要容易得多。若是你没法作到感谢,至少要有点尊严,别大声哀嚎,也别由于本身是个有戏剧性超级敏感的灵魂和自觉得有资格的新来者,就期望别人象对待脆弱的洋娃娃那样对你。
有时候,即便你没有搞砸(或者只是别人想象你搞砸了), 有些人也会平白无故地攻击你本人。在这种状况下,报怨却是 真的 会把问题搞砸。
这些找茬者要么是毫无办法但自觉得是专家的不中用家伙,要么就是测试你是否真会搞砸的心理专家。其它读者要么不理睬,要么用本身的方式对付他们。这些找茬者在给本身找麻烦,这点你不用操心。
也别让本身卷入口水战,大多数口水战最好不要理睬──固然,是在你核实它们只是口水战、没有指出你搞砸的地方,并且没有巧妙地将问题真正的答案藏于其中以后(这也是可能的)。
提问禁忌
下面是些典型的愚蠢问题和黑客不回答它们时的想法。
问:我到哪能够找到某程序或 X 资源? 问:我怎样用 X 作 Y? 问:如何配置个人 shell 提示? 问:我能够用 Bass-o-matic 文件转换工具将 AcmeCorp 文档转为 TeX 格式吗? 问:个人{程序、配置、SQL 语句}不运行了 问:个人视窗电脑出问题了,你能帮忙吗? 问:个人程序不运行了,我认为系统工具X有问题 问:我安装 Linux 或 X 遇到困难,你能帮忙吗? 问:我如何才能破解超级用户口令/盗取通道操做员的特权/查看某人的电子邮件? 问: 我到哪能够找到某程序或 X 资源?
答: 在我找到它的一样地方,笨旦──在网页搜索引擎上。上帝啊,难道还有人不知道如何使用 谷歌 吗?
问: 我怎样用 X 作 Y?
答: 若是你想解决的是 Y,提问时别给出可能并不恰当的方法。这种问题说明提问者不但对 X 彻底无知,也对要解决的 Y 问题糊涂,还被特定形势禁锢了思惟。等他们把问题弄好再说。
问: 如何配置个人 shell 提示?
答: 若是你有足够的智慧提这个问题,你也该有足够的智慧去 “读读该死的手册”(RTFM),而后本身去找出来。
问: 我能够用 Bass-o-matic 文件转换工具将 AcmeCorp 文档转为 TeX 格式吗?
答: 试试就知道了。若是你试过,你既知道了答案,又不用浪费个人时间了。
问: 个人{程序、配置、SQL 语句}不运行了
答: 这不是一个问题,我也没有兴趣去猜你有什么问题──我有更要紧的事要作。看到这种东西,个人反应通常以下:
你还有什么补充吗?
噢,太糟了,但愿你能搞定。
这跟我究竟有什么关系?
问: 个人视窗电脑出问题了,你能帮忙吗?
答: 是的,把视窗垃圾删了,装个象 Linux 或 BSD 的开源操做系统吧。
注意:若是程序有官方的视窗版或者与视窗有交互(如 Samba),你 能够 问与视窗相关的问题,只是别对问题是由视窗操做系统而不是程序自己形成的回复感到惊讶,由于视窗通常来讲太差,这种说法通常都成立。
问: 个人程序不运行了,我认为系统工具 X 有问题
答: 你彻底有多是第一个注意到被成千上万用户反复使用的系统调用与库文件有明显缺陷的人,更有可能的是你彻底没有根据。与众不同的说法须要与众不同的证据,当你这样声称时,你必须有清楚而详尽的缺陷说明文档做后盾。
问: 我安装 Linux 或 X 遇到困难,你能帮忙吗?
答: 不行,我须要亲手操做你的电脑才能帮你排错,去向当地的 Linux 用户组寻求方便的帮助(你能够在 这里 找到用户组列表)
注意:若是安装问题与某 Linux 发行版有关,在针对 它 的邮件列表、论坛或本地用户组织中提问也许是恰当的。此时,应描述问题的准确细节。在此以前,先用 “linux”和 全部 被怀疑的硬件 [做关键词] 仔细搜索。
问: 我如何才能破解超级用户口令/盗取通道操做员的特权/查看某人的电子邮件?
答: 想作这种事情说明你是个卑劣的家伙,想让黑客教你作这种事情说明你是个白痴。
好问题与坏问题
最后,我将经过举例来演示提问的智慧。一样的问题两种提法,一种愚蠢,另外一种明智。
愚蠢:我在哪能找到关于 Foonly Flurbamatic 设备的东西? 这个问题在乞求获得 “搜搜该死的网络”(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 都不知道。
若是你不肯定,必定要说出来! 一个听起来权威的错误回复比没有还要糟,别由于听起来象个专家好玩就给别人乱指路。要谦虚和诚实,给提问者与同行都树个好榜样。
若是帮不了忙,别妨碍。 不要在具体步骤上开玩笑,那样也许会毁了用户的安装──有些可怜的呆瓜会把它当成真的指令。
探索性的反问以引出更多的细节。 若是你作得好,提问者能够学到点东西──你也能够。试试将不好的问题转变成好问题,别忘了咱们都曾是新手。
尽管对那些懒虫报怨一声“读读该死的手册”(RTFM)是正当的,指出文档的位置(即便只是建议作个谷歌关键词搜索)会更好
若是你决意回答,给出好的答案。 当别人正在用错误的工具或方法时别建议笨拙的权宜之计,应推荐更好的工具,从新组织问题。
帮助你的社区从中学习。当回复一个好问题时,问问本身 “如何修改相关文件或 FAQ 文档以避免再次解答一样的问题?”,接着再向文档维护者发一份补丁。
若是你是在研究一番后才作出的回答,展示你的技巧而不是直接端出结果。毕竟“授人以鱼,不如授人以渔”。