我們在開發(fā)中,經(jīng)常遇到這樣那樣的問題,很多的問題,而解決問題的過程通常是痛苦的,特別是對于一些剛剛?cè)腴T的新人來說,一些很簡單的問題卡一天也是常有的事情,一部分的原因固然是因為可能這個問題比較的難,經(jīng)驗不足,但是對于新人來說,更多的情況是缺少解決問題的思路,才會導致解決問題的時候,一直卡殼,下面我會跟大家分享一下自己入行以后總結(jié)出來的問題解決思路,一是對自己對思路的總結(jié),二是希望能夠幫助到大家。不要說自己沒有經(jīng)驗,假如你有自己的方法,那么經(jīng)驗是可以很快的積累起來的
當我們遇到一個問題的時候,應該從哪里開始入手呢
經(jīng)驗法
是不是萬萬沒有想到呢???不是說好的講解決思路嗎?怎么一上來就是經(jīng)驗法呢?記得是哪個網(wǎng)站的調(diào)查,世界上最多的js錯誤好像是undefined.xx 這個類型的錯誤,可以說,很多時候,某些問題只是單純的手誤罷了,說白了屬于那種你一看就知道自己錯在哪里的問題,所以出了問題以后,第一個先看看報錯,再看看哪里出了問題,回想一下以前是不是也有類似的錯誤,很有可能就是因為寫這行代碼的時候心情不太好,導致出現(xiàn)了欠考慮的地方,或者忘記了一些東西導致的,可以說是最快的解決方案了。但是所謂的經(jīng)驗,依舊是需要使用問題解決思路慢慢積累起來有的人的經(jīng)驗計算方法是加法,只是一個問題的經(jīng)驗,而有的人的經(jīng)驗是乘法,是一類問題的經(jīng)驗,而這個不同,也就決定了你是不是能一眼就看出問題所在的關(guān)鍵。
但是實際上很多時候,我們的經(jīng)驗法也不夠管用(ps:當然是因為你寫這段代碼的時候就已經(jīng)知道可能遇到什么問題所以提前預防了)
這個時候我們就需要逐步的定位、分析、解決問題了
我們需要
定位復現(xiàn)問題
如何定位與復現(xiàn)問題其實是一個很困難的事情,我們可以說得很直白,當你能夠百分之百復現(xiàn)問題的時候,問題就已經(jīng)解決了70%了,而當你能夠找到問題出現(xiàn)的原因的時候,問題已經(jīng)解決90%了。
所以如何定位問題是重中之重
如何定位呢?
- 閱讀錯誤信息,很多時候錯誤信息以及很明顯的告訴了你,你那里錯了!讀完了以后也就大概率知道要修改那里了,或者可以用來走下一步
- 觀察,重復自己的操作,判斷在什么情況下會出現(xiàn)這個問題,假如能夠進行準確的復現(xiàn),則可以進行下一步
- 假如無法準確的復現(xiàn),比如這個bug出現(xiàn)在線上,可以借助一些工具,比如fundebug來獲取錯誤日志,
- 假如能夠復現(xiàn),但是你依舊無法判斷問題出現(xiàn)在那里,可能是范圍太廣了,這個時候我們可以逐步進行一些排查,比如先從網(wǎng)絡看起,判斷問題是前端還是后端
- 確定是前端得話問題,我們可以回想一下這個問題沒有出現(xiàn)的情況是什么時候,我們可以去慢慢的刪除一些業(yè)務內(nèi)容,找到一個點,這個點是處于有問題已經(jīng)沒有問題的交界處,當我們找到這個點的時候,就可以進行下一步了,假如這個點不是很好找,我們就要去逐步的分析問題了
假如我們現(xiàn)在已經(jīng)可以很好的定位到問題了那么我們就可以使用以下的手段去進行解決
文檔
很多時候我們遇到的問題都是第三方的組件之類引發(fā)的問題,或者是框架的問題,即使是原生的JS寫出問題了,我們也有對應的MDN等文檔可以看,出了問題,根據(jù)錯誤的提示去看文檔是最為高效的解決問題的方案,因為很多時候確實就是因為忽略了文檔的一些點,導致了自己沒注意到問題,當然看文檔也是要有技巧的,從頭開始看一遍并不是一個好的方法,而是根據(jù)自己具體使用了哪個模塊,哪個功能,哪個組件去看文檔,這樣就會比較的高效,同時,在進行一個項目開發(fā)之前,應該先把一個文檔整體的過一遍,這樣再進行開發(fā),就游刃有余了,有的內(nèi)容即使暫時看不懂也沒有關(guān)系,留個心眼,知道大概有這么一個東西就好了,這樣再回頭排查問題的時候,至少就有路子可以走了,同時我們要善用網(wǎng)頁搜索,通過網(wǎng)頁搜索,我們可以快速的找到關(guān)鍵字,幫助自己定位問題。
但是很多時候我們也判斷不出來自己的問題在哪里,也就不知道應該去哪里看文檔
那么這個時候我們就需要借助
搜索引擎
搜索引擎應該是我們最經(jīng)常使用的解決問題的方案了,不過我依舊把他放到了文檔的后面,因為根據(jù)個人大部分的時候的經(jīng)驗來看,對于某些關(guān)鍵點的問題來看,搜索引擎其實并不比文檔更好,甚至很多時候都需要你去看文檔,但是對于某些很具體的問題的時候,搜索引擎就要好用很多了。
這里需要注意的是
- 我們要選對搜索引擎,同樣的關(guān)鍵字,在不同的引擎下搜索出來的結(jié)果其實不一定是一樣的,換個搜索引擎,說不定能看到不同的東西
- 注意關(guān)鍵字,注意去提煉關(guān)鍵字,盡量簡潔讓人很容易就明白,不要用過多的業(yè)務的內(nèi)容
-
高級搜索,搜索引擎語法,是的,搜索引擎是有語法的,使用語法完成高級搜索,往往可以事半功倍
而很多時候一些問題也不是我們一搜就能夠搜索出來的
這個時候我們就需要
issue以及官方社區(qū)
理論上來說一個好的搜索引擎應該能夠搜出issue跟官方社區(qū)的答案,然而~
大部分的第三方內(nèi)容都有自己的issue以及官方社區(qū),通過issue,你可以查到很多自己以為的很奇怪的問題,相信我,大部分的問題,你遇到了,別人也遇到了。假如你遇到了一個只有你遇到的問題,那么恭喜你,獲得了一個參與開源的機會,你可以想內(nèi)容的作者直接提issue,被作者所回答,質(zhì)量自然也是最高的,而官方社區(qū)里面就更是如此了,比較有名的就是微信的官方社區(qū),基本上你能遇到的里面都有很多人遇到過,不過個人覺得微信的官方社區(qū)有的時候?qū)τ谝恍﹩栴}會處于掛起的狀態(tài),這個就稍微有點尷尬了。遇到這種問題,其實發(fā)個郵件也不見得有多大的問題
以上提到的解決思路,其實是建立在了一個基礎上的,那么就是你對自己的問題有了一個初步的認識與了解,你可以準確的找到問題,然后針對問題進行提問等操作,這也是我們在處理問題的時候經(jīng)常遇到的情況
不過以上都是建立在我們已經(jīng)基本定位了問題的情況下可以做的事情,如果沒有定位好問題,那么實際上就會出現(xiàn)很大的偏差
我們需要
逐步排查
其實在定位問題的時候我們就已經(jīng)在進行逐步的排查了,而這里的逐步排查我個人的看起是其實這個時間點我們不僅是在定位問題,也是在實際的解決問題,某些問題可能復現(xiàn)出來很簡單,但是我們就是找不到他的解決方案,只能自己去思考為什么,怎么解決
在這個階段,最常使用的東西就是console以及debugger了,通過觀察這個階段的console輸出,根據(jù)debuuger走流程
與定位的時候刪除業(yè)務代碼不同的是,在這個階段,我們可以完全將業(yè)務代碼抽離出來,除非完全問題就是因為業(yè)務代碼產(chǎn)生的
這個步驟我們可以先搭建一個開發(fā)環(huán)境,然后里面重新還原我們出現(xiàn)問題的情況,一步步做到,我們到底做了什么才出現(xiàn)的問題
這個地方也是最麻煩的情況了
需要我們一步步排查,一步步的試錯,一步步的調(diào)整
甚至需要我們
深入源代碼
其實深入源代碼并不是很可怕,特別是很多的時候我們?nèi)タ吹脑创a大部分都是一些組件庫這種第三方的源代碼,他們的難度在于工程化相關(guān)的東西,而一些組件的實現(xiàn)其實不見得很難的,我們?nèi)ブ鸩降姆治鲈创a其實并不是一個很困難的事情
如果怎么都解決不了問題
我們可以
向人求助
及時向領導反饋,向部門里面其他的高手請求幫助,不過這里要注意的是,很有可能你的問題很難并且你已經(jīng)做過了很多的嘗試了,不要做伸手黨,你應該清晰的描述自己的問題,并且給出自己的嘗試過的方案,給出自己的看法,即使這個看法是錯誤的,這樣也可以幫助幫助你的人即使填坑,當然有的時候不幸的也會發(fā)生誤導的事情~
而假如找不到人或者沒有辦法解決
其實有的時候
繞過
也是一個方案~換一種方案去實現(xiàn)
總結(jié)與挖掘
最后,我們在解決了問題以后,一定要去總結(jié)問題產(chǎn)生的原因,有的時候因為比較著急,可能我們寫的代碼比較的丑陋,這個時候我們可以慢慢調(diào)整,如果具有普遍的價值,應該對齊進行抽象,從解決一個問題,變成解決一類問題,假如具有挖掘的價值,我們應該可以去挖掘它
持續(xù)學習
最后想說的是,很多時候原本困擾我們的問題,可能只是我們的接觸面太窄了,或者當時的水平太渣了,現(xiàn)在回過頭去看以前的一些自己的文章以及寫過的代碼,是不是會有一種怎么自己以前那么菜的疑惑,通過對問題的總結(jié)整理形成經(jīng)驗,加上不斷的學習,最終才可能更加的強大,能解決的問題也會更加的多,才能處理更難的問題,去開闊自己的視野,可能很多問題根本就不再是問題了
最后
以上是一些自己最近回來反思自己在處理問題的時候,是否會有一個思考回路的總結(jié),針對的是我們寫代碼的時候出現(xiàn)報錯或者未知的情況的時候,如何去進行思考
雖然我寫下來的時候是有先后之分,不過教條主義是一個害人的事情,實際情況下大部分還是根據(jù)經(jīng)驗然后再去執(zhí)行步驟,并是一定要按照所有的步驟走下來,你才能解決問題,但是走一下這么的步驟,可以幫助你更好的吸收經(jīng)驗,步驟不是最重要的,解決問題的思路才是。
希望這篇文章能夠幫助你解決問題,也希望這篇文章可以幫助你建立自己的解決思路。