提问的智慧


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 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
php cli 小技巧
Jun 03 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
详细解读php的命名空间(一)
Feb 21 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
如何用PHP websocket实现网页实时聊天
May 26 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
jQuery 源码分析笔记
2011/05/25 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
JavaScript中URL编码函数代码
2011/01/11 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
2019/06/10 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Numpy掩码式数组详解
2018/04/17 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
Python实现简单的2048小游戏
2021/03/01 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
费用会计岗位职责
2014/01/01 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
介绍信怎么写
2015/05/05 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
四则混合运算教学反思
2016/02/23 职场文书
如何书写授权委托书?
2019/06/25 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python