如何高效的提问。

随着年纪与工作年限的增长,工作经验越来越丰富。周边同事朋友问我的问题越来越多。遇到过很多奇葩问题,也遇到过形形色色的人。每个人的性格都不同,问问题得方式也不同,最终每个人的成长方向,成长速度也都不同。

本文仅对提问者提出一些友善的建议,并且阐述自身对于如何正确的提问题表达自己的一个观点。

提问前

提问前不要盲目提问,新人首要学会的不是提问,而是尝试自己解决,如何自己解决问题也是一门学问,也考验新人的自学能力以及未来的发展前景。

尝试自己解决

不论你刚工作还是工作了一两年。提问之前都请自己尝试着解决问题。这很重要,是培养一个人的学习能力的关键,如果你在很长的工作年限都无法学会这一点,那么请放弃这个行业吧

善于搜索

解决问题的方式有很多,我想最实用也是用的最多的应该就是利用网络资源自己检索。
搜索也不是每个人都会用的,如何正确高效的百度取决你的知识广度,新人在遇到问题往往都是不知道如何百度,因为新人连基本的问题关键字都无法提取。

遇到问题请先判断问题得所属知识点范围,比如是tomcat、servlet、js、数据库、java等等。将问题逐渐转化为技术知识点,提取关键字然后才是搜索答案。

举个例子:某一天我写了一个controller,发现前端的参数后端没有接收到。

  • 第一要查看前端的request请求中是否包含正确的参数信息
  • 第二你需要知道servlet中content-type
  • 第三你可能还需要知道springmvc相关的知识

如果你以上知识点都不知道,那么你只能搜索[controller中无法接收前端请求参数]。这样你就无法精准的得到想要的答案。但是也并不是说这样搜索就没有意义,因为网络上的知识会引导你走向正确的道路。比如最终你通过检索可能会将你引导到servlet,content-type,json,form,requestbody等知识点上。而你要做的就是通过这些知识点解决你遇到的问题。强调一点,这就是自学能力

善于摸索

有时候我们遇到的问题往往不是一个小知识点,可能是一门新技术,一个新框架。很多时候大家可能都没有遇到过类似的问题。那么你只能通过自身不断的摸索,尝试,折腾去解决你的问题。这里只提供少量的经验

  • 去官网查阅相关资料吧。如果是英文也请努力的去阅读,能阅读多少算多少,这决定你以后的成长上限
  • 不断的实践尝试吧,从官网的demo例子考试,不断的尝试折腾。不断的排除。
  • 善用github等开源的代码库,也许你搜索后可能会发现github上有你想要的东西。
  • 如果你正在研究的东西刚好是开源的,那么请尝试阅读开源代码,这个很难,但决定你未来的发展上限

如何提问

如果你已经努力尝试过自己解决,但是依然没有头绪,那么你应该要寻求帮助了。而且在实际工作中其实我们是没有太多时间去自己学习,自己折腾的。所以如何正确的提问对于工作来说更加重要。

对于自身发展成长来学,自己尝试解决比直接提问更加有意义。但是毕竟我们已经都是步入社会的人,每天都有完不成的工作任务。所以在有限的时间内还是请高效的提问吧。

用词准确,问题清晰

作为一个IT人员,请注意问问题的用词,尽量使用专业的术语提问,当然这也需要看你身边的同事的专业水平。一般IT人员的思维模式可能专业术语才是他们神经反射的催化剂。
如果你的问题看起来像是在描述一场车祸,一天早上XX发生了一场事故。那么你提的问题是很难被解答的而且一定会被反问,为什么会出现这场事故。

好吧我们换一种方式来提这个问题。一天早上XX发生了一场事故,车辆信息是XX,据司机所说,刹车好像坏了,但是我不知道怎么处理这个问题。如果我是一个专业修车的,好吧,你的问题非常棒。我可以立即帮你处理掉。

回到TI的世界,XX问我,今天早上我点击请假流程的提交按钮,但是没有任何反馈信息,我不知道哪里出现了问题。好吧,这个问题本身没有什么毛病。但是我们是程序员,不是业务员。对于我本人来说我是非常不愿意去处理这种问题。每个人都有自己的工作,我们在同一家公司做着同样的项目,我可以帮你解决你解决不了的问题,但是我没有义务把你的工作也做了。

同样的我换一个方式,今天早上我点击请假流程的提交按钮,发现后端在获取绑定的流程信息是空的。但是我不知道这个获取流程信息的逻辑是否正确。如果是这样,我很乐意帮助你并指导里流程与表单的之间的绑定关系,并且讲解一些重要的代码逻辑比如流程版本等信息。

描述清楚,信息充足。

如何定义一个问题是否描述清楚,信息量是否充足。我的理解是必须包含以下几点。

准确有效的信息

这点请参考【用词准确,问题清晰】。

问题的表现内容

比如上述例子中,问题得表述内容,页面按钮点击无效,后端抛异常,前端脚本错误等等,这些都属于问题表现内容。注意我这里针对的是程序员。但是提问题只说问题得表现是不够,这仅仅是最基础的。如果表现都说不清楚,我觉得你可能什么行业都不适合做

做过什么尝试

参考【用词准确,问题清晰】。我做过什么尝试,比如我通过调试最终发现,某一个代码获取的数据是空的,或者我调试后发现某个参数可能不对,但是我不太确定这里面的逻辑关系。这才是我们程序员要做的事情。提问题时把这个追加上,才会得到更多的认可。

遇到问题前你做过什么

为了让别人更好的判断问题得原因,提问题前请回忆下你做过什么非常规操作,比如我改了某些重要的配置文件,又或者我删过某些测试数据。又或者我改过XX环境等等。

想要问到什么

强调一下这点很重要,以上信息都是为了让别人帮助你解决问题,但是你能从问题得到什么。想清楚了再问,比如我想知道流程和表单是如何绑定的,在哪里绑定的。数据库之间有时如何设计的,如果有多个版本有时如何在不同版本之间做到有效隔离的等等。想清楚你想要问到什么,这决定你以后的工作中是否能独立承担工作。

别问毫无意义的问题。

这里我不太确定哪些是毫无意义的问题,但是我觉得对于程序员来说,【今天早上我点击请假流程的提交按钮,但是没有任何反馈信息,我不知道哪里出现了问题】这种问题是毫无意义的,对于你来说,别人帮你解决了这个问题,我不知道你能得到什么,也不知道你以后遇到类似的问题是不是能自己处理。请不要把帮你解决问题和帮你解决工作画等号

提问后

提问后,如果你得到了你想要的信息,又或者别人直接帮你把问题处理掉了。那么恭喜你你已经学会了如何正确的提问题。另外我说一句请不要让别人帮你把问题解决掉,而是让别人告诉应该怎么解决。

但是提问题之后,请做好归纳总结。这可能包含自身某方面的知识点的盲点,也可能是项目中的某个业务逻辑,也可能是某个框架的知识点。

提问题不是程序员提问题的本意,从问题中学到什么才是程序员提问题的本意。

注意事项

  • 谦虚,别人没有义务帮你解决问题。
  • 做好冷场准备,也许他正在忙,也许这个问题网上已经有了明确答案,也许他也没有遇到过类似问题,也许...
  • 没有一定的自学能力不适合做IT
  • 以上论述纯属个人观点,刚入职场的应届生做不到正确的提问也属正常,但是请不要容忍自己长时间的毫无进步。

有感而发,胡说八道

我觉得公司没有一个职位或者岗位是专门帮别人解决问题的。就算是某一个产品使用过程中出了问题。那么也有一个规范的流程。比如当我们发现某一个产品出现问题,向开发人员提出该问题后,开发人员没有义务帮你解决问题,研发人员本职工作是从研发经理那接收研发任务。那么产品中的问题如何解决,在那一次迭代中解决,应该是产品经理的本质工作。

恕我直言,打破标准规范的流程制度最终都会导致管理上的混乱,比如开发人员直接帮业务人员解决问题,会导致产品的迭代、质量不可控,导致多个小组之间的工作混乱。

在一个公司中往往会一人身兼多职,但是我相信如果想做好一个企业一些标准的流程制度是必须要遵从的。

附图

image.png

评论

公众号:mumuser

企鹅群:932154986

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×