如何正确的提问

如何正确的提问

2018-06-17 19:29:57  回复(3  分享

编程,尤其是互联网行业的编程技术,是一个很有趣的行当,一方面,它似乎门槛低得令人发指,任何没有经过系统学习训练的外行都可以插足其中;另一方面,它又有着很高的技术门槛,总能把缺乏系统知识的初学者坑得体无完肤。于是在开发者的社区里,我们总能看到这样的现象:没有掌握基础知识的初学者提着各种让高手们觉得可笑的问题,而高手们往往不愿意回答,甚至对初学者进行冷嘲热讽。对于这种现象,归根结底,往往在于新手们没有掌握提问的技术。

新手们错误的提问,总结下来存在如下几种问题:

'''缺乏独立思考''':这种情况通常的提问形式是一张截图+一句话(这是怎么回事?/谁遇到过这问题?/谁能帮我看看?),往往截图里的错误信息其实已经将错误的原因描述得十分清楚,甚至有些是以中文还贴出了文档地址的形式来提示,只要稍微对错误信息的描述进行分析就可以解决问题。这类问题通常非常简单,而老手们都不愿意回答。毕竟经常见到这种低级问题,任何人都会疲于应对。

'''描述不清''':形式与上文类似,也是一个截图+一句话,更有甚者截图都不提供,仅仅口头描述一个模凌两可的场景。这类问题通常问题出在代码中,但新手大概是缺乏分析能力,并没有从报错信息以及其附带的 backtrace 信息里定位到关键代码,从而未能提供完整的信息。还有可能错误信息被隐藏了,比如 web 开发中很常见的 500 错误,服务器通常出于安全考虑未将错误信息返回给客户端,而是存于服务器端的日志中。要回答这类问题,回答者需要反复向提问者索要日志信息和关键代码,彼此的时间将浪费在一来一回的对话中,因此这类问题也受到了老手们的反感而不愿意回答。

'''大而不当''':XX 怎么做?/谁做过 XXX?新手们大概不知道,他口中轻描淡写的 XXX,实现起来涉及到的知识点可不是一句两句话可以解释得清的。这种问题,应该自己做好调研和分析工作,而不是纠缠着他人提问。

'''把提问当教学''':这类问题形式多种多样,不外乎新手对基本概念缺乏认知,在回答者给出提示过后仍不知道应该查找资料填补知识,仍要求回答者给出进一步的解释。事实上,没有任何人有义务给新手提供培训指导,自主学习应该是任何一个人应该掌握的基本技能。

一个好的提问方式,能够节省彼此时间,那么,该如何正确提问?

'''端正态度,提问的目的是填补你的知识盲区以解决问题,而不是让别人替你解决问题'''。这是最常见的老手不愿意回答新手问题的原因之一,提问者往往带着命令的口吻要求他人为他分析,解决问题。要求一个陌生人无偿为你解决一个与他毫无干系的问题这本就是一件非常荒谬的事情。若不能端正这个态度,那么你的提问只会招来他人的反感,而不是为你解决问题。

'''提问前,多思考,多尝试'''。有的时候,报错信息已经包含了非常详尽的问题信息,也替你指向了错误关键代码。有的时候错误是框架底层抛出异常,报错信息指向的是抛异常的位置,但是我们也能从 backtrace 信息里追溯到真正引发错误的位置。看不懂错误信息,也可以将错误信息复制到搜索引擎里搜索,网络上必然有许多遇过和你类似问题的人,也能找到很多有价值的教程。若是认真完成了这份分析工作,大多数问题都可以独立解决,你也能从这次问题中得到进步。即使问题没有解决,因为你已经做了充足的准备,回答者对你的解答也会更加顺利。同时,对于你自己的一些想法,大胆地去尝试,去验证,而不是跑上网上问人“可不可以”,只有自己尝试了,知识才是你的,否则的话,他人回答一个“是”或“否”,也仅仅就是一个答案,永远不会成为你的知识。

'''不知就查,不懂再问'''。许多问题,对老手而言非常的简单,但是新手因为缺乏系统的知识而无所适从。老手往往给出了一个非常简洁的答案,至于背后涉及到复杂的知识体系,回答者自然没有这么多精力对此一一讲解。对于提问者而言,触碰到知识盲区立即想到丰富的互联网资源是一个好习惯,在恶补知识的时候遇到无法理解的地方进行提问可以,但你有义务先将知识点先梳理一遍。而不是因为看不懂他人的回答而在原问题上继续纠缠。

举个简单的例子:

提问者:“我的程序报了一个错误‘Class xxx\xx not found.’。”

回答者:“因为你没有安装 composer 依赖,你需要执行一遍‘composer install’。”

对于没有使用过 composer 的人而言,必然不知道 composer 是什么,也不知道为何要安装依赖。一名合格的提问者,此时应该好好利用搜索引擎查找 composer 的文档或教程。遇到不理解的,再继续提问:“我看了 composer 文档,那么我现在疑惑的是,composer install 后的类文件通过什么方式引入呢?”在此提问者可能不理解 PHP 的 autoload 特性,回答者再给出答复,提问者继续进行学习,可能还有机会了解到 PSR 规范。如此一来,回答者没有费劲口舌,提问者又掌握了三个知识点。但事实上,许多提问者都是不合格的,他们看到自己压根没听说过的 composer 就选择性地忽略了回答者的答复,继续追问自己无法找到类的问题,还可能把问题向错误的方向引导,最后的结果就是提问者的问题得不到解决。

'''说明你的目的'''。这是非常重要的一点,很多时候新手遇到的问题往往是因为自己的思路错了,如果不能明确地说明自己想要达到的效果,回答者将无法给出答复,因为提问者错误的思路是老手们料想不到的。而且,在思路一开始就错误的情况下,即使得到了答复解决了问题,最终效果也不是提问者最初想要的,那么这一次提问就是一次无效的提问。准确地描述自己的目的,是节省彼此时间的重要手段。

'''利用好互联网资源'''。其实前面几点也有所提及,编程之所以门槛低,互联网的繁荣功不可没,任何人都可以通过网络找到教程和可复制的代码,利用好互联网的资源,可以让你事半功倍。遇到问题,触及知识盲区的,花个几分钟在网上查找相关的教程和文档,比你在 QQ 群里提问结果没人回答要来得有价值。

'''如果你有尝试过任何解决办法,说出来'''。一个问题,造成的原因可能有好多种,如果你尝试了多种办法都无法解决,将你尝试过的办法以及遇到新的问题说出来,能够帮助回答者快速地为你找到正确的解决办法。否则的话,回答者只能一个个原因猜测来排除,这必然浪费彼此的时间,这也是老手不愿意回答新手问题的原因之一。

'''控制切入点''':这也是新手,尤其是许多还未入门的外行最常犯的错误,提的问题切入点过大,根本无法回答。对于一些诸如“XXX 怎么做”的问题,提问者有必要自己先对问题梳理一遍,对其中涉及的技术以及知识点做一番梳理,细节不懂再问,而不是不做任何思考就问出大而不当的问题。

“切勿问“谁遇过””。这个其实是一个非常可笑的提问方式,因为不可能有人遇过所有疑难杂症。而且大多数问题大同小异,老手凭借自己丰富的经验,是能够解决大多数自己未遇过的问题的。所以一个“谁遇过”的提问事实上非常多余,你只需要将你的问题准确、详细地描述清楚,自然有热心的老手们愿意分享他的经验。

新手不懂提问的问题,一直都是各大编程社区、技术群里老手们吐槽抱怨的,老手们为了得到有价值的问题,也提出了形形色色的提问模板,我这里也给出一份,其实也大同小异,你可以在各个编程社区里面见到类似的提问模板。

我在做 XXX 功能(说明目的),遇到了如下报错:(列出问题)

1.xxx

2.xxx

3.xxx

代码如下:(给出关键信息)

// 代码片段

我尝试百度 / 查书,找到如下内容:(说明尝试过的办法)

1.xxx

2.xxx

但是问题未能解决,遇到如下问题:

1.xxx

2.xxx

对于网上 / 书上的内容,我有如下不解:(说明自己的疑惑,控制好问题切入点)

1.xxx

2.xxx

其实,这不仅仅是一份提问模板,更是一份解决问题的思路。如果你能够按照模板的要求,先将自己的目的,以及错误信息做一番分析,触碰到知识盲区的部分查资料,上网搜索,那么绝大多数问题都可以独立解决而不需要到网上提出一些愚蠢而又烦人的问题,而且通过这条思路,在问题解决后,你也能得到更大的进步,这对于你自己,是有益的。新手与老手最大的区别,往往不是知识的多寡,而是老手掌握了自我学习成长的技能,能够凭借自己的能力解决问题。祝愿各位编程菜鸟们能够快速成长。

评论

tiancaibaike

2018-12-02 13:57:22

http://tiancaibaike.com/

:)

2019-03-09 00:00:58

:)

:)

2019-03-09 00:01:05

:)

发表评论:

*您的昵称:
*评论内容:
*您的性别:   
您的Email: (可选,您的留言被回复后用于提醒,不公开)