在开发过程当中,难免会遇到一些问题,而提问是最不费脑并且可能是最快的一种方式,但是,你的问题不一定会被人家所理解,但是你应该学会怎么提问
提问之前
在提问之前,首先要确保以下几个点:
- 有做好可能解决不了的心理准备
- 或许应该准备好付费的情况
- 确定这个问题是因为实现什么而出现的,是否可以换种实现方式
- 有认真思考过该问题的解决方案
- 有尝试去搜索过该问题的解决方案
- 确定 开发手册/文档中 没有该问题的解决方案
- 确定你有该问题的基础知识,而不是别人解答这个问题还要给你普及很多相关的知识
- 有做一系列的排查,并将问题确定在一个范围内
解决不了
当你的问题难度太大时,可能没有人能回答你的问题,你得做好解决不了的准备,解决不了请不要恼羞成怒,做出一些不理智的事情,或许可以尝试下付费解决,也或许可以换一种解决的方式(放弃问题的源头,用另一种方式实现你的逻辑)
认真思考问题的解决方案
当问题特别明显,只要有动脑就能解决这个问题时,没有人会喜欢回答这种基础问题,例如:
当你知道echo “hello world”语句,却不知道怎么输出”burnlord”时
当你知道如何移动文件到/tmp目录,却不知道移动到指定日期的目录时
当你知道mysql有解释器可以查看是否有使用到索引,却不知道如何看组合索引是否有效时 当报错信息出现的情况,却不知道去搜索时
搜索问题的解决方案
同样,当一个问题直接搜索就能出现答案,却一直拿出来问时,没有人会给伸嘴党
喂饭,这是对回答者的一种侮辱
请在提问的时候,先尝试在搜索引擎中搜索,或许答案就在第一页
开发手册
当你在搜索引擎没有找到一些 生僻/不知名/不公开 的一些问题时,或许你得考虑下是否有一份文档还没有看完
既然搜索引擎都找不到的问题,那你问对该项目毫不知情的人有什么用呢?
既然有开发文档,那你为什么不尝试下在开发文档中发现这个问题的解决方案呢?
问题的基础
千万不要问你对该问题一无所知的问题,当你没学过php时,请不要问为什么if(){}
括号里不加条件就会报错的问题
当你提出一个问题的,该问题相应的基础你应该要会,否则你会被人耻笑。
例如:
当你没看完新手教程,问swoole为什么运行之后改代码要重启
当你没看完面对对象,问为什么不use命名空间就会报错 当你连接websocket时,问为什么会发起一个http请求
排查问题
在提问之前,首先你得学会排查这个问题,确定问题的一个大致范围,否则会让人无从回答。
例如:当你上传文件这个逻辑出现问题时,你问:”为什么我没法上传文件”,是没有人能回答的了你的,你得自行排查,直到一个小范围。
如:
- 上传文件,选择文件之后,发生错误;
- 选择文件成功,发起http请求时出错;
- 发起http请求成功,到后端接收不到文件信息;
- 接收文件信息成功,无法保存上传文件;
- 将一个大问题分解成一个个步骤,自行测试每个步骤,直到某个步骤出错(如果每个步骤都有错,那就一个个步骤慢慢解决)
提问
在提问时,我们应该避免以下几种问法:
- 在吗?
- 大神救我
- 你好
- 大佬求带
- 有没有人用过xxx(说一个框架,或者一个不知名的项目)
- 大神这个是怎么做的(直接要代码)
- 可以问个问题吗?(不说问题,等别人回答可不可以。别人不一定在,别人在的时候你又不一定在。你可以先留言的!降低沟通成本,互相节约时间)
- 这个代码有什么错?(发出一串代码,不说问题)
- 这个代码怎么改?(发出一串代码,不说怎么改,不说问题。还有不发代码文本,只发代码截图的,你等别人去敲你的代码来改?)
- 为什么我这个有问题?(截图一段”xxxxx”自行判断输出的错误信息不截图代码)
- 能不能咨询一下(某种语言,某种框架,某种项目 一个大范围的概念)
当然,没有人会跟钱过不去,只要钱到位,可无视一切,直接贴问题,贴钱。
正确的提问应该注意以下几点:
- 切记,是你在问问题,罗列好问题详情,不要怕打字,要每个点说到位,该分段的分段,该上图的上图,可以先在txt里整理自己的问题,你嫌罗列详情麻烦,别人嫌你更麻烦
- 问题,要归纳好一起发送,不要一句话一句话的给他人发消息。不要不加、乱加标点符号,注意问题的关键的地方不要使用有歧义的的词
- 不要发抖动消息,不要动不动发视频,更不要发语音!59秒的语音需要59秒才能听完整,59秒的字别人可能10秒就看完了,不要浪费别人时间
- 描述准确,准确描述你要实现的功能,问题出现之前以及出现之后的现象
- 截图准确,不要截一些和问题无关,或者对解决问题没有任何帮助的图
- 态度端正,虚心请教,没有人有义务帮你
问题可分为以下几种:
- 概念问题,某种抽象概念的不理解
- 代码问题,代码出现非预期的情况,报错等
- 框架问题,出现框架报错,运行出错,运行逻辑不理解等问题
- 逻辑问题,对某种功能实现的逻辑不理解
- 性能优化问题
每种问题的提问方式如下:
概念问题
概念问题,我们必须要描述准确,并且有自行了解过概念的基础,例如:
- 我不太清楚为什么要用面对对象,直接函数封装不行吗?
- 为什么协程要是用mysql连接池 等
代码问题
代码问题,我们需要截图代码(如果他人可能需要调试,也要发代码文本),以及报错信息,并且说明自己要实现什么功能,例如:
- 我想要实现文件上传,我已经尝试了修改权限,但是不知道为什么代码会报错(附上错误信息,以及代码) 等
框架问题
框架问题,我们需要详细的说明框架的哪个部分,以及发生了什么问题,例如:
- 使用EasySwoole时,发现在生产模式下,调用配置文件错误
- 使用tp3.2时,上传文件总是报文件夹不存在,但是文件夹存在
- 使用tp3.2时,session生存时间无法配置
逻辑问题
逻辑问题,我们需要详细描述某个功能的哪部分逻辑,例如:
- 请问session过期是怎么实现的?
- 请问mysql连接池是怎么实现的?
性能优化问题
性能优化问题,需要先确认慢的地方,然后截图,例如:
- 我发现这段代码执行特别慢,有什么错误吗?(附上代码截图)
- 这段sql我想实现xxxxx查询,但是非常慢,能优化吗?(附上sql语句,表结构,解释器截图)
参考修改自:https://github.com/tioncico/How-To-Ask-Questions-The-Smart-Way
参考修改自:https://www.easyswoole.com/NoobCourse/artOfAskingQuestions.html
评论 (0)