開發除錯時遇到問題該怎麼做?

這篇算是工作近期的一篇心情抒發,最近很常被 A 同事打斷工作問問題,導致思考到一半的思緒被打斷 n 次,工作效率非常差,我知道任何人都會遇到所謂鬼打牆的狀況(真的想不到解法,卡了很久的那種)但我比較不能接受的是僅僅只是不知道為什麼程式沒 work(有報錯但也沒看),或是一些 case 已經寫過幾次但還是犯一樣的錯,而且很明顯的,如果這個問題透過別人的解答輕而易舉的解決了,沒有經過自己思考一遍,很高的機率下次遇到依然不會,實質上對於開發能力沒有任何的幫助。

我剛入職場沒多久之後,同事們都離職了,沒有人可以問怎麼辦?就是靠自己,那段時間說真的很痛苦,把工作帶回家做,想盡各種辦法解決我不會的問題,google 到三更半夜。現在的我很感謝那時候的自己,培養了獨立思考和解決問題的能力,下面是我分享的一些除錯的方法和心法。

  1. 打開 chrome 開發者工具看有沒有報錯,遇到從來沒看過的錯誤訊息就可以 google,雖然不一定找得到完全相符的例子,但大概也可以知道問題出在哪裡,像是很常見的 Uncaught TypeError: Cannot read property ‘length’ of undefined,就可以知道你要取長度的那個值已經變成 undefined 了。
  2. 遇到自己不會的問題,成功解決後會做個小小筆記記錄一下,也不用寫的 太複雜,我都用 trello 稍微記個大概然後分類,因為我記性沒有很好,但有寫筆記就會稍微有點印象,下次遇到相同問題就可以比較快解決。
  3. debugger 和 console.log 是你的好朋友,在任何你覺得可能有問題的地方下中斷點,去追蹤問題的來源,很多時候都是自己思考的地方有盲點,才會導致沒預期的錯誤,你的程式碼其實根本沒照著你的預期運作。
  4. 真的不會寫怎麼辦?可以從模仿開始,先求有再求好,你可以看其他同事是怎麼寫的,講好聽一點是參考,實際上是複製貼上,但絕對不是無腦的複製貼上,一定要去思考為什麼他會這樣寫,思考的脈絡很重要,最後才會吸收變成自己的養分。
  5. 「事出必有因」可以做為解 bug 的金玉良言,我知道很多狀況看到問題時當下一定會覺得怎麼可能!但有可能是 a+b+c 或是 e + d,各種排列組合的原因造成的,所以除錯時要冷靜下來想想有哪些可能性。
  6. 毫無頭緒的時候就用排除法吧!先推測大概可能是哪幾個地方會造成這樣的問題 ,然後交叉測試,註解掉部分程式碼先排除某些可能,雖然這個方法比較耗時間,但大部分都可以抓到一個脈絡。
  7. 持續的學習,保持一顆好奇心,任何一位工程師都有機會是你的老師,無論資歷深淺,有時候你可以在別人身上學到一些自己不知道的開發技巧或者一些觀念,把握每個學習的機會,都是讓自己進步的契機。

如果不能解決問題,就會被問題解決