提问的智慧


Posted in PHP onOctober 09, 2006

提问的智慧

Copyright (C) 2001 by Eric S. Raymond
中文版Copyleft 2001 by D.H.Grand(nOBODY/Ginux)

英文版:http://www.tuxedo.org/~esr/faqs/smart-questions.html
感谢Eric的耐心指点和同意,本文才得以完成并发布,本指南
英文版版权为Eric Steven Raymond所有,
中文版版权由D.H.Grand[nOBODY/Ginux]所有。

在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出
答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以
获取你最想要的答案。

首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。
如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自
会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常
会暴露我们以前从没意识到或者思考过的问题。对黑客而
言,“问得好!”是发自内心的大力称赞。

尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,
对知识贫乏者怀有敌意,但其实不是那样的。

我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他
们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我
们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。
我们称这样的人为“失败者”(由于历史原因,我们有时
把它拼作“lusers”)。

我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常
被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的
家伙,以便更高效的利用时间来回答胜利者的问题。

如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我
们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过
了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的
文化中来。但让我们帮助那些不愿意帮助自己的人是没有
意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个
技术支持协议得了,别向黑客乞求帮助。

如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一
员。立刻得到有效答案的最好方法,就是象胜利者那样提问--聪明、自信、有
解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。

(欢迎对本指南提出改进意见。任何建议请E-mail至esr@thyrsus.com,然而
请注意,本文并非网络礼节的通用指南,我通常会拒绝无助于在技术论坛得到
有用答案的建议。)
(当然,如果你写中文,最好还是寄到DHGrand@hotmail.com;-)

========
提问之前
========

在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到:
1. 通读手册,试着自己找答案。
2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。
3. 在网上搜索(个人推荐google~~~)。
4. 向你身边精于此道的朋友打听。

当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你
的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问
者能从答案中学到东西,我们更乐于回答他的问题。

周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得
不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实
质性的帮助。

小心别问错了问题。如果你的问题基于错误的假设,普通黑客(J. Random
Hacker)通常会用无意义的字面解释来答复你,心里想着“蠢问题...”,希
望着你会从问题的回答(而非你想得到的答案)中汲取教训。

决不要自以为够资格得到答案,你没这种资格。毕竟你没有为这种服务支付任
何报酬。你要自己去“挣”回一个答案,靠提出一个有内涵的,有趣的,有思
维激励作用的问题--一个对社区的经验有潜在贡献的问题,而不仅仅是被动的
从他人处索要知识--去挣到这个答案。

另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。
“谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么
地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有
人指点正确的方向,你就有完成它的能力和决心。

========
怎样提问
========

------------
谨慎选择论坛
------------

小心选择提问的场合。如果象下面描述的那样,你很可能被忽略掉或者被看作失败者:
1. 在风马牛不相及的论坛贴出你的问题
2. 在探讨高级技巧的论坛张贴非常初级的问题;反之亦然
3. 在太多的不同新闻组交叉张贴

----------------------------
用辞贴切,语法正确,拼写无误
----------------------------

我们从经验中发现,粗心的写作者通常也是马虎的思考者(我敢打包票)。
回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。

正确的拼写,标点符号和大小写很重要。
更一般的说,如果你的提问写得象个半文盲,你很有可能被忽视。

如果你在使用非母语的论坛提问,你可以犯点拼写和语法上的小错--但决不能
在思考上马虎(没错,我们能弄清两者的分别)

----------------------------
使用含义丰富,描述准确的标题
----------------------------

在邮件列表或者新闻组中,大约50字以内的主题标题是抓住资深专家注意力
的黄金时机。别用喋喋不休的“帮帮忙”(更别说“救命啊!!!!!”这
样让人反感的话)来浪费这个机会。不要妄想用你的痛苦程度来打动我们,
别用空格代替问题的描述,哪怕是极其简短的描述。

蠢问题:
救命啊!我的膝上机不能正常显示了!

聪明问题:
XFree86 4.1下鼠标光标变形,Fooware MV1005的显示芯片。

如果你在回复中提出问题,记得要修改内容标题,表明里面有一个问题。一个
看起来象“Re:测试”或者“Re:新bug”的问题很难引起足够重视。另外,引
用并删减前文的内容,给新来的读者留下线索。

------------------
精确描述,信息量大
------------------

1. 谨慎明确的描述症状。
2. 提供问题发生的环境(机器配置、操作系统、应用程序以及别的什么)。
3. 说明你在提问前是怎样去研究和理解这个问题的。
4. 说明你在提问前采取了什么步骤去解决它。
5. 罗列最近做过什么可能有影响的硬件、软件变更。

尽量想象一个黑客会怎样反问你,在提问的时候预先给他答案。

Simon Tatham写过一篇名为《如何有效的报告Bug》的出色短文。强力推荐你也读一读。

--------
话不在多
--------

你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完
全转储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得越小
越好。

这样做的用处至少有三点。第一,表现出你为简化问题付出了努力,这可以使你得
到回答的机会增加;第二,简化问题使你得到有用答案的机会增加;第三,在提炼
你的bug报告的过程中,也许你自己就能找出问题所在或作出更正。

------------------
只说症状,不说猜想
------------------

告诉黑客们你认为问题是怎样引起的没什么帮助。(如果你的推断如此有效,还用
向别人求助吗?),因此要确信你原原本本告诉了他们问题的症状,不要加进你自
己的理解和推论。让黑客们来诊断吧。

蠢问题:
我在内核编译中一次又一次遇到SIG11错误,我怀疑某条飞线搭在主板的走线上了,
这种情况应该怎样检查最好?

聪明问题:
我自制的一套K6/233系统,主板是FIC-PA2007 (VIA Apollo VP2芯片组),256MB
Corsair PC133
SDRAM,在内核编译中频频产生SIG11错误,从开机20分钟以后就有这种情况,开机
前20分钟内从没发生过。重启也没有用,但是关机一晚上就又能工作20分钟。所有
内存都换过了,没有效果。相关部分的典型编译记录如下...。

------------------
按时间顺序列出症状
------------------

对找出问题最有帮助的线索,往往就是问题发生前的一系列操作,因此,你的说明
应该包含操作步骤,以及电脑的反应,直到问题产生。

如果你的说明很长(超过四个段落),在开头简述问题会有所帮助,接下来按时间
顺序详述。这样黑客们就知道该在你的说明中找什么。

PHP 相关文章推荐
用PHP4访问Oracle815
Oct 09 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
如何判断php数组的维度
Jun 10 PHP
php define的第二个参数使用方法
Nov 04 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 PHP
PHP判断一个变量是否为整数、正整数的方法示例
Sep 11 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
DOMXML函数笔记
Oct 09 #PHP
一个很方便的 XML 类!!原创的噢
Oct 09 #PHP
提问的智慧(2)
Oct 09 #PHP
PHP的FTP学习(二)[转自奥索]
Oct 09 #PHP
在PHP中利用XML技术构造远程服务(上)
Oct 09 #PHP
在PHP中利用XML技术构造远程服务(下)
Oct 09 #PHP
把从SQL中取出的数据转化成XMl格式
Oct 09 #PHP
You might like
社区(php&&mysql)四
2006/10/09 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
jQuery基础知识小结
2014/12/22 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
python抽取指定url页面的title方法
2018/05/11 Python
windows下python安装pip图文教程
2018/05/25 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Django基于客户端下载文件实现方法
2020/04/21 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
成功的餐厅经营创业计划书
2014/01/15 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
考研英语辞职信
2015/05/13 职场文书
刑事法律意见书
2015/06/04 职场文书
世界名著读书笔记
2015/06/25 职场文书
生产设备维护保养制度
2015/08/06 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python