問(wèn)題的解決思路

我們?cè)陂_(kāi)發(fā)中,經(jīng)常遇到這樣那樣的問(wèn)題,很多的問(wèn)題,而解決問(wèn)題的過(guò)程通常是痛苦的,特別是對(duì)于一些剛剛?cè)腴T(mén)的新人來(lái)說(shuō),一些很簡(jiǎn)單的問(wèn)題卡一天也是常有的事情,一部分的原因固然是因?yàn)榭赡苓@個(gè)問(wèn)題比較的難,經(jīng)驗(yàn)不足,但是對(duì)于新人來(lái)說(shuō),更多的情況是缺少解決問(wèn)題的思路,才會(huì)導(dǎo)致解決問(wèn)題的時(shí)候,一直卡殼,下面我會(huì)跟大家分享一下自己入行以后總結(jié)出來(lái)的問(wèn)題解決思路,一是對(duì)自己對(duì)思路的總結(jié),二是希望能夠幫助到大家。不要說(shuō)自己沒(méi)有經(jīng)驗(yàn),假如你有自己的方法,那么經(jīng)驗(yàn)是可以很快的積累起來(lái)的

當(dāng)我們遇到一個(gè)問(wèn)題的時(shí)候,應(yīng)該從哪里開(kāi)始入手呢

經(jīng)驗(yàn)法

是不是萬(wàn)萬(wàn)沒(méi)有想到呢???不是說(shuō)好的講解決思路嗎?怎么一上來(lái)就是經(jīng)驗(yàn)法呢?記得是哪個(gè)網(wǎng)站的調(diào)查,世界上最多的js錯(cuò)誤好像是undefined.xx 這個(gè)類型的錯(cuò)誤,可以說(shuō),很多時(shí)候,某些問(wèn)題只是單純的手誤罷了,說(shuō)白了屬于那種你一看就知道自己錯(cuò)在哪里的問(wèn)題,所以出了問(wèn)題以后,第一個(gè)先看看報(bào)錯(cuò),再看看哪里出了問(wèn)題,回想一下以前是不是也有類似的錯(cuò)誤,很有可能就是因?yàn)閷?xiě)這行代碼的時(shí)候心情不太好,導(dǎo)致出現(xiàn)了欠考慮的地方,或者忘記了一些東西導(dǎo)致的,可以說(shuō)是最快的解決方案了。但是所謂的經(jīng)驗(yàn),依舊是需要使用問(wèn)題解決思路慢慢積累起來(lái)有的人的經(jīng)驗(yàn)計(jì)算方法是加法,只是一個(gè)問(wèn)題的經(jīng)驗(yàn),而有的人的經(jīng)驗(yàn)是乘法,是一類問(wèn)題的經(jīng)驗(yàn),而這個(gè)不同,也就決定了你是不是能一眼就看出問(wèn)題所在的關(guān)鍵。
但是實(shí)際上很多時(shí)候,我們的經(jīng)驗(yàn)法也不夠管用(ps:當(dāng)然是因?yàn)槟銓?xiě)這段代碼的時(shí)候就已經(jīng)知道可能遇到什么問(wèn)題所以提前預(yù)防了)

這個(gè)時(shí)候我們就需要逐步的定位、分析、解決問(wèn)題了
我們需要

定位復(fù)現(xiàn)問(wèn)題

如何定位與復(fù)現(xiàn)問(wèn)題其實(shí)是一個(gè)很困難的事情,我們可以說(shuō)得很直白,當(dāng)你能夠百分之百?gòu)?fù)現(xiàn)問(wèn)題的時(shí)候,問(wèn)題就已經(jīng)解決了70%了,而當(dāng)你能夠找到問(wèn)題出現(xiàn)的原因的時(shí)候,問(wèn)題已經(jīng)解決90%了。
所以如何定位問(wèn)題是重中之重
如何定位呢?

  1. 閱讀錯(cuò)誤信息,很多時(shí)候錯(cuò)誤信息以及很明顯的告訴了你,你那里錯(cuò)了!讀完了以后也就大概率知道要修改那里了,或者可以用來(lái)走下一步
  2. 觀察,重復(fù)自己的操作,判斷在什么情況下會(huì)出現(xiàn)這個(gè)問(wèn)題,假如能夠進(jìn)行準(zhǔn)確的復(fù)現(xiàn),則可以進(jìn)行下一步
  3. 假如無(wú)法準(zhǔn)確的復(fù)現(xiàn),比如這個(gè)bug出現(xiàn)在線上,可以借助一些工具,比如fundebug來(lái)獲取錯(cuò)誤日志,
  4. 假如能夠復(fù)現(xiàn),但是你依舊無(wú)法判斷問(wèn)題出現(xiàn)在那里,可能是范圍太廣了,這個(gè)時(shí)候我們可以逐步進(jìn)行一些排查,比如先從網(wǎng)絡(luò)看起,判斷問(wèn)題是前端還是后端
  5. 確定是前端得話問(wèn)題,我們可以回想一下這個(gè)問(wèn)題沒(méi)有出現(xiàn)的情況是什么時(shí)候,我們可以去慢慢的刪除一些業(yè)務(wù)內(nèi)容,找到一個(gè)點(diǎn),這個(gè)點(diǎn)是處于有問(wèn)題已經(jīng)沒(méi)有問(wèn)題的交界處,當(dāng)我們找到這個(gè)點(diǎn)的時(shí)候,就可以進(jìn)行下一步了,假如這個(gè)點(diǎn)不是很好找,我們就要去逐步的分析問(wèn)題
    假如我們現(xiàn)在已經(jīng)可以很好的定位到問(wèn)題了那么我們就可以使用以下的手段去進(jìn)行解決

文檔

很多時(shí)候我們遇到的問(wèn)題都是第三方的組件之類引發(fā)的問(wèn)題,或者是框架的問(wèn)題,即使是原生的JS寫(xiě)出問(wèn)題了,我們也有對(duì)應(yīng)的MDN等文檔可以看,出了問(wèn)題,根據(jù)錯(cuò)誤的提示去看文檔是最為高效的解決問(wèn)題的方案,因?yàn)楹芏鄷r(shí)候確實(shí)就是因?yàn)楹雎粤宋臋n的一些點(diǎn),導(dǎo)致了自己沒(méi)注意到問(wèn)題,當(dāng)然看文檔也是要有技巧的,從頭開(kāi)始看一遍并不是一個(gè)好的方法,而是根據(jù)自己具體使用了哪個(gè)模塊,哪個(gè)功能,哪個(gè)組件去看文檔,這樣就會(huì)比較的高效,同時(shí),在進(jìn)行一個(gè)項(xiàng)目開(kāi)發(fā)之前,應(yīng)該先把一個(gè)文檔整體的過(guò)一遍,這樣再進(jìn)行開(kāi)發(fā),就游刃有余了,有的內(nèi)容即使暫時(shí)看不懂也沒(méi)有關(guān)系,留個(gè)心眼,知道大概有這么一個(gè)東西就好了,這樣再回頭排查問(wèn)題的時(shí)候,至少就有路子可以走了,同時(shí)我們要善用網(wǎng)頁(yè)搜索,通過(guò)網(wǎng)頁(yè)搜索,我們可以快速的找到關(guān)鍵字,幫助自己定位問(wèn)題。
但是很多時(shí)候我們也判斷不出來(lái)自己的問(wèn)題在哪里,也就不知道應(yīng)該去哪里看文檔
那么這個(gè)時(shí)候我們就需要借助

搜索引擎

搜索引擎應(yīng)該是我們最經(jīng)常使用的解決問(wèn)題的方案了,不過(guò)我依舊把他放到了文檔的后面,因?yàn)楦鶕?jù)個(gè)人大部分的時(shí)候的經(jīng)驗(yàn)來(lái)看,對(duì)于某些關(guān)鍵點(diǎn)的問(wèn)題來(lái)看,搜索引擎其實(shí)并不比文檔更好,甚至很多時(shí)候都需要你去看文檔,但是對(duì)于某些很具體的問(wèn)題的時(shí)候,搜索引擎就要好用很多了。
這里需要注意的是

  1. 我們要選對(duì)搜索引擎,同樣的關(guān)鍵字,在不同的引擎下搜索出來(lái)的結(jié)果其實(shí)不一定是一樣的,換個(gè)搜索引擎,說(shuō)不定能看到不同的東西
  2. 注意關(guān)鍵字,注意去提煉關(guān)鍵字,盡量簡(jiǎn)潔讓人很容易就明白,不要用過(guò)多的業(yè)務(wù)的內(nèi)容
  3. 高級(jí)搜索,搜索引擎語(yǔ)法,是的,搜索引擎是有語(yǔ)法的,使用語(yǔ)法完成高級(jí)搜索,往往可以事半功倍
    而很多時(shí)候一些問(wèn)題也不是我們一搜就能夠搜索出來(lái)的
    這個(gè)時(shí)候我們就需要

issue以及官方社區(qū)

理論上來(lái)說(shuō)一個(gè)好的搜索引擎應(yīng)該能夠搜出issue跟官方社區(qū)的答案,然而~
大部分的第三方內(nèi)容都有自己的issue以及官方社區(qū),通過(guò)issue,你可以查到很多自己以為的很奇怪的問(wèn)題,相信我,大部分的問(wèn)題,你遇到了,別人也遇到了。假如你遇到了一個(gè)只有你遇到的問(wèn)題,那么恭喜你,獲得了一個(gè)參與開(kāi)源的機(jī)會(huì),你可以想內(nèi)容的作者直接提issue,被作者所回答,質(zhì)量自然也是最高的,而官方社區(qū)里面就更是如此了,比較有名的就是微信的官方社區(qū),基本上你能遇到的里面都有很多人遇到過(guò),不過(guò)個(gè)人覺(jué)得微信的官方社區(qū)有的時(shí)候?qū)τ谝恍﹩?wèn)題會(huì)處于掛起的狀態(tài),這個(gè)就稍微有點(diǎn)尷尬了。遇到這種問(wèn)題,其實(shí)發(fā)個(gè)郵件也不見(jiàn)得有多大的問(wèn)題
以上提到的解決思路,其實(shí)是建立在了一個(gè)基礎(chǔ)上的,那么就是你對(duì)自己的問(wèn)題有了一個(gè)初步的認(rèn)識(shí)與了解,你可以準(zhǔn)確的找到問(wèn)題,然后針對(duì)問(wèn)題進(jìn)行提問(wèn)等操作,這也是我們?cè)谔幚韱?wèn)題的時(shí)候經(jīng)常遇到的情況
不過(guò)以上都是建立在我們已經(jīng)基本定位了問(wèn)題的情況下可以做的事情,如果沒(méi)有定位好問(wèn)題,那么實(shí)際上就會(huì)出現(xiàn)很大的偏差
我們需要

逐步排查

其實(shí)在定位問(wèn)題的時(shí)候我們就已經(jīng)在進(jìn)行逐步的排查了,而這里的逐步排查我個(gè)人的看起是其實(shí)這個(gè)時(shí)間點(diǎn)我們不僅是在定位問(wèn)題,也是在實(shí)際的解決問(wèn)題,某些問(wèn)題可能復(fù)現(xiàn)出來(lái)很簡(jiǎn)單,但是我們就是找不到他的解決方案,只能自己去思考為什么,怎么解決
在這個(gè)階段,最常使用的東西就是console以及debugger了,通過(guò)觀察這個(gè)階段的console輸出,根據(jù)debuuger走流程
與定位的時(shí)候刪除業(yè)務(wù)代碼不同的是,在這個(gè)階段,我們可以完全將業(yè)務(wù)代碼抽離出來(lái),除非完全問(wèn)題就是因?yàn)闃I(yè)務(wù)代碼產(chǎn)生的
這個(gè)步驟我們可以先搭建一個(gè)開(kāi)發(fā)環(huán)境,然后里面重新還原我們出現(xiàn)問(wèn)題的情況,一步步做到,我們到底做了什么才出現(xiàn)的問(wèn)題
這個(gè)地方也是最麻煩的情況了
需要我們一步步排查,一步步的試錯(cuò),一步步的調(diào)整
甚至需要我們

深入源代碼

其實(shí)深入源代碼并不是很可怕,特別是很多的時(shí)候我們?nèi)タ吹脑创a大部分都是一些組件庫(kù)這種第三方的源代碼,他們的難度在于工程化相關(guān)的東西,而一些組件的實(shí)現(xiàn)其實(shí)不見(jiàn)得很難的,我們?nèi)ブ鸩降姆治鲈创a其實(shí)并不是一個(gè)很困難的事情
如果怎么都解決不了問(wèn)題
我們可以

向人求助

及時(shí)向領(lǐng)導(dǎo)反饋,向部門(mén)里面其他的高手請(qǐng)求幫助,不過(guò)這里要注意的是,很有可能你的問(wèn)題很難并且你已經(jīng)做過(guò)了很多的嘗試了,不要做伸手黨,你應(yīng)該清晰的描述自己的問(wèn)題,并且給出自己的嘗試過(guò)的方案,給出自己的看法,即使這個(gè)看法是錯(cuò)誤的,這樣也可以幫助幫助你的人即使填坑,當(dāng)然有的時(shí)候不幸的也會(huì)發(fā)生誤導(dǎo)的事情~
而假如找不到人或者沒(méi)有辦法解決
其實(shí)有的時(shí)候

繞過(guò)

也是一個(gè)方案~換一種方案去實(shí)現(xiàn)

總結(jié)與挖掘

最后,我們?cè)诮鉀Q了問(wèn)題以后,一定要去總結(jié)問(wèn)題產(chǎn)生的原因,有的時(shí)候因?yàn)楸容^著急,可能我們寫(xiě)的代碼比較的丑陋,這個(gè)時(shí)候我們可以慢慢調(diào)整,如果具有普遍的價(jià)值,應(yīng)該對(duì)齊進(jìn)行抽象,從解決一個(gè)問(wèn)題,變成解決一類問(wèn)題,假如具有挖掘的價(jià)值,我們應(yīng)該可以去挖掘它

持續(xù)學(xué)習(xí)

最后想說(shuō)的是,很多時(shí)候原本困擾我們的問(wèn)題,可能只是我們的接觸面太窄了,或者當(dāng)時(shí)的水平太渣了,現(xiàn)在回過(guò)頭去看以前的一些自己的文章以及寫(xiě)過(guò)的代碼,是不是會(huì)有一種怎么自己以前那么菜的疑惑,通過(guò)對(duì)問(wèn)題的總結(jié)整理形成經(jīng)驗(yàn),加上不斷的學(xué)習(xí),最終才可能更加的強(qiáng)大,能解決的問(wèn)題也會(huì)更加的多,才能處理更難的問(wèn)題,去開(kāi)闊自己的視野,可能很多問(wèn)題根本就不再是問(wèn)題了

最后

以上是一些自己最近回來(lái)反思自己在處理問(wèn)題的時(shí)候,是否會(huì)有一個(gè)思考回路的總結(jié),針對(duì)的是我們寫(xiě)代碼的時(shí)候出現(xiàn)報(bào)錯(cuò)或者未知的情況的時(shí)候,如何去進(jìn)行思考
雖然我寫(xiě)下來(lái)的時(shí)候是有先后之分,不過(guò)教條主義是一個(gè)害人的事情,實(shí)際情況下大部分還是根據(jù)經(jīng)驗(yàn)然后再去執(zhí)行步驟,并是一定要按照所有的步驟走下來(lái),你才能解決問(wèn)題,但是走一下這么的步驟,可以幫助你更好的吸收經(jīng)驗(yàn),步驟不是最重要的,解決問(wèn)題的思路才是。
希望這篇文章能夠幫助你解決問(wèn)題,也希望這篇文章可以幫助你建立自己的解決思路。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容