我们在开发中,经常遇到这样那样的问题,很多的问题,而解决问题的过程通常是痛苦的,特别是对于一些刚刚入门的新人来说,一些很简单的问题卡一天也是常有的事情,一部分的原因固然是因为可能这个问题比较的难,经验不足,但是对于新人来说,更多的情况是缺少解决问题的思路,才会导致解决问题的时候,一直卡壳,下面我会跟大家分享一下自己入行以后总结出来的问题解决思路,一是对自己对思路的总结,二是希望能够帮助到大家。不要说自己没有经验,假如你有自己的方法,那么经验是可以很快的积累起来的
当我们遇到一个问题的时候,应该从哪里开始入手呢
经验法
是不是万万没有想到呢???不是说好的讲解决思路吗?怎么一上来就是经验法呢?记得是哪个网站的调查,世界上最多的js错误好像是undefined.xx 这个类型的错误,可以说,很多时候,某些问题只是单纯的手误罢了,说白了属于那种你一看就知道自己错在哪里的问题,所以出了问题以后,第一个先看看报错,再看看哪里出了问题,回想一下以前是不是也有类似的错误,很有可能就是因为写这行代码的时候心情不太好,导致出现了欠考虑的地方,或者忘记了一些东西导致的,可以说是最快的解决方案了。但是所谓的经验,依旧是需要使用问题解决思路慢慢积累起来有的人的经验计算方法是加法,只是一个问题的经验,而有的人的经验是乘法,是一类问题的经验,而这个不同,也就决定了你是不是能一眼就看出问题所在的关键。
但是实际上很多时候,我们的经验法也不够管用(ps:当然是因为你写这段代码的时候就已经知道可能遇到什么问题所以提前预防了)
这个时候我们就需要逐步的定位、分析、解决问题了
我们需要
定位复现问题
如何定位与复现问题其实是一个很困难的事情,我们可以说得很直白,当你能够百分之百复现问题的时候,问题就已经解决了70%了,而当你能够找到问题出现的原因的时候,问题已经解决90%了。
所以如何定位问题是重中之重
如何定位呢?
- 阅读错误信息,很多时候错误信息以及很明显的告诉了你,你那里错了!读完了以后也就大概率知道要修改那里了,或者可以用来走下一步
- 观察,重复自己的操作,判断在什么情况下会出现这个问题,假如能够进行准确的复现,则可以进行下一步
- 假如无法准确的复现,比如这个bug出现在线上,可以借助一些工具,比如fundebug来获取错误日志,
- 假如能够复现,但是你依旧无法判断问题出现在那里,可能是范围太广了,这个时候我们可以逐步进行一些排查,比如先从网络看起,判断问题是前端还是后端
- 确定是前端得话问题,我们可以回想一下这个问题没有出现的情况是什么时候,我们可以去慢慢的删除一些业务内容,找到一个点,这个点是处于有问题已经没有问题的交界处,当我们找到这个点的时候,就可以进行下一步了,假如这个点不是很好找,我们就要去逐步的分析问题了
假如我们现在已经可以很好的定位到问题了那么我们就可以使用以下的手段去进行解决
文档
很多时候我们遇到的问题都是第三方的组件之类引发的问题,或者是框架的问题,即使是原生的JS写出问题了,我们也有对应的MDN等文档可以看,出了问题,根据错误的提示去看文档是最为高效的解决问题的方案,因为很多时候确实就是因为忽略了文档的一些点,导致了自己没注意到问题,当然看文档也是要有技巧的,从头开始看一遍并不是一个好的方法,而是根据自己具体使用了哪个模块,哪个功能,哪个组件去看文档,这样就会比较的高效,同时,在进行一个项目开发之前,应该先把一个文档整体的过一遍,这样再进行开发,就游刃有余了,有的内容即使暂时看不懂也没有关系,留个心眼,知道大概有这么一个东西就好了,这样再回头排查问题的时候,至少就有路子可以走了,同时我们要善用网页搜索,通过网页搜索,我们可以快速的找到关键字,帮助自己定位问题。
但是很多时候我们也判断不出来自己的问题在哪里,也就不知道应该去哪里看文档
那么这个时候我们就需要借助
搜索引擎
搜索引擎应该是我们最经常使用的解决问题的方案了,不过我依旧把他放到了文档的后面,因为根据个人大部分的时候的经验来看,对于某些关键点的问题来看,搜索引擎其实并不比文档更好,甚至很多时候都需要你去看文档,但是对于某些很具体的问题的时候,搜索引擎就要好用很多了。
这里需要注意的是
- 我们要选对搜索引擎,同样的关键字,在不同的引擎下搜索出来的结果其实不一定是一样的,换个搜索引擎,说不定能看到不同的东西
- 注意关键字,注意去提炼关键字,尽量简洁让人很容易就明白,不要用过多的业务的内容
-
高级搜索,搜索引擎语法,是的,搜索引擎是有语法的,使用语法完成高级搜索,往往可以事半功倍
而很多时候一些问题也不是我们一搜就能够搜索出来的
这个时候我们就需要
issue以及官方社区
理论上来说一个好的搜索引擎应该能够搜出issue跟官方社区的答案,然而~
大部分的第三方内容都有自己的issue以及官方社区,通过issue,你可以查到很多自己以为的很奇怪的问题,相信我,大部分的问题,你遇到了,别人也遇到了。假如你遇到了一个只有你遇到的问题,那么恭喜你,获得了一个参与开源的机会,你可以想内容的作者直接提issue,被作者所回答,质量自然也是最高的,而官方社区里面就更是如此了,比较有名的就是微信的官方社区,基本上你能遇到的里面都有很多人遇到过,不过个人觉得微信的官方社区有的时候对于一些问题会处于挂起的状态,这个就稍微有点尴尬了。遇到这种问题,其实发个邮件也不见得有多大的问题
以上提到的解决思路,其实是建立在了一个基础上的,那么就是你对自己的问题有了一个初步的认识与了解,你可以准确的找到问题,然后针对问题进行提问等操作,这也是我们在处理问题的时候经常遇到的情况
不过以上都是建立在我们已经基本定位了问题的情况下可以做的事情,如果没有定位好问题,那么实际上就会出现很大的偏差
我们需要
逐步排查
其实在定位问题的时候我们就已经在进行逐步的排查了,而这里的逐步排查我个人的看起是其实这个时间点我们不仅是在定位问题,也是在实际的解决问题,某些问题可能复现出来很简单,但是我们就是找不到他的解决方案,只能自己去思考为什么,怎么解决
在这个阶段,最常使用的东西就是console以及debugger了,通过观察这个阶段的console输出,根据debuuger走流程
与定位的时候删除业务代码不同的是,在这个阶段,我们可以完全将业务代码抽离出来,除非完全问题就是因为业务代码产生的
这个步骤我们可以先搭建一个开发环境,然后里面重新还原我们出现问题的情况,一步步做到,我们到底做了什么才出现的问题
这个地方也是最麻烦的情况了
需要我们一步步排查,一步步的试错,一步步的调整
甚至需要我们
深入源代码
其实深入源代码并不是很可怕,特别是很多的时候我们去看的源代码大部分都是一些组件库这种第三方的源代码,他们的难度在于工程化相关的东西,而一些组件的实现其实不见得很难的,我们去逐步的分析源代码其实并不是一个很困难的事情
如果怎么都解决不了问题
我们可以
向人求助
及时向领导反馈,向部门里面其他的高手请求帮助,不过这里要注意的是,很有可能你的问题很难并且你已经做过了很多的尝试了,不要做伸手党,你应该清晰的描述自己的问题,并且给出自己的尝试过的方案,给出自己的看法,即使这个看法是错误的,这样也可以帮助帮助你的人即使填坑,当然有的时候不幸的也会发生误导的事情~
而假如找不到人或者没有办法解决
其实有的时候
绕过
也是一个方案~换一种方案去实现
总结与挖掘
最后,我们在解决了问题以后,一定要去总结问题产生的原因,有的时候因为比较着急,可能我们写的代码比较的丑陋,这个时候我们可以慢慢调整,如果具有普遍的价值,应该对齐进行抽象,从解决一个问题,变成解决一类问题,假如具有挖掘的价值,我们应该可以去挖掘它
持续学习
最后想说的是,很多时候原本困扰我们的问题,可能只是我们的接触面太窄了,或者当时的水平太渣了,现在回过头去看以前的一些自己的文章以及写过的代码,是不是会有一种怎么自己以前那么菜的疑惑,通过对问题的总结整理形成经验,加上不断的学习,最终才可能更加的强大,能解决的问题也会更加的多,才能处理更难的问题,去开阔自己的视野,可能很多问题根本就不再是问题了
最后
以上是一些自己最近回来反思自己在处理问题的时候,是否会有一个思考回路的总结,针对的是我们写代码的时候出现报错或者未知的情况的时候,如何去进行思考
虽然我写下来的时候是有先后之分,不过教条主义是一个害人的事情,实际情况下大部分还是根据经验然后再去执行步骤,并是一定要按照所有的步骤走下来,你才能解决问题,但是走一下这么的步骤,可以帮助你更好的吸收经验,步骤不是最重要的,解决问题的思路才是。
希望这篇文章能够帮助你解决问题,也希望这篇文章可以帮助你建立自己的解决思路。