Debug 中最大的 Bug 是自己,關於自學的模仿、記憶、理解與創造
這幾天在玩縮短網址專案,縮短網址看似簡單,網路上也有很多 YouTube 教學可以參考,Build a Custom URL Shortener Service,How To Build A URL Shortener With Node.js, Express, and MongoDB,所以沒有很直覺地想出要怎麼做專案,我沒有很灰心,畢竟入行沒有很久,大概知道專案邏輯,剩下的就是try and error,但要怎麼 Try 怎麼找到解決 Error 的方法,就是寫 code 有挑戰性的地方。
主要會分成四個『必須』來說明這次怎麼解決專案的問題
Try and Error
必須動手 -> 模仿
網路上有很多資源,就像要開始 URL Shortener 之前,我只有簡單的想幾個步驟:
- 讓使用者自行輸入網址
- 讀取使用者輸入網址的內容
- 製作短網址
- 將短網址導回輸入網址的網頁
中間跳過許多執行細節,例如要怎麼檢驗,使用者輸入的內容?輸入的內容有沒有重複?要怎麼製作亂數的短網址?……
這些時候,我會看看別人怎麼做,有沒有哪些功能也可以另外再加上去,或是我沒有注意到的,模仿對我來說可以降低一些挫折的壓力。
模仿似乎變成一種負面的詞彙,『怎麼沒有原創性』,『抄襲仔』的負面印象
但那是因為自己心態不夠健全,模仿不是百分之百一模一樣,而是各取所需,模仿可以讓專案更好的地方。
必須不怕麻煩 -> 記憶
動手不是打架,是正式開始 coding,通常最難,因為需要整理整個專案大概邏輯,畫面要怎麼呈現,還有 set up 專案環境步驟很多。我只是凡人,腦容量不夠,丟三落四變得很正常,像這次專案 set up 需要:
- Express -> 建立 localhost
- express-handelbars -> 建立 view engine
- mongoose 與 MongoDB ->串接資料庫連線
- express.Routes -> 將 routes 獨立出來
…
細微的步驟就只能一再的練習,確認自己知道每一段程式碼是什麼,以我在實作的過程,會畫出 MVC 的架構,把需要串接的工具對應上去,就比較會知道自己在哪裡,做了些什麼事。
必須動手:這是一個無限循環,忘記就再看一次流程,再實作幾次,沒有捷徑。
必須瞭解來龍去脈 -> 理解
原理讓我很想睡,因為原理對我而言很抽象,但因為『原理』是整個電腦在運作的邏輯,也必須瞭解,假如沒有認知到,那 debug 會 de 到想哭。
就像 handelbars 需要透過 controller 帶進需要的資料內容,資料內容沒有對應清楚,畫面永遠跑不出來。透過 mongoose 向 MongoDB 要資料,沒用對的方法拿,當然那些一長串的 error 就會跑滿整個 terminal。
寫程式就是會有很多踩雷的過程,每次踩雷都以為要天崩地裂了,但冷靜下來,原來只是自己觀念不清楚
所以對我而言知道每一段程式碼為什麼存在滿重要的,不然會迷失在錯誤堆中,往不對的方向找答案,只會越來越挫敗。
必須不滿足 -> 創造
是不是可以優化程式碼?是不是可以增加哪些功能?都是可以被額外增加到專案中,有種自己給自己找事做的感覺,這個過程對我而言是一種挑戰專業的機會,是一個很有趣的體驗,完全沈醉在創作。
stay calm
最後,也是滿值得記錄一下關於自學的心態建立,先 debug 自己,再 debug 。每當有 error 都想說,怎麼會我都寫對啊,但不斷地找出問題,不斷的釐清邏輯經過數小時後,就會發現,阿呀原來是觀念不熟悉,或是打錯字等等低級錯誤。
冷靜,重新檢視程式碼為什麼會出現錯誤,可能錯誤是出現在哪些地方,是因為語法錯誤嗎?還是有沒有拼錯字,看看別人怎麼做,尋找看看有沒有其他人發生過一樣的問題,一定可以迎刃而解。
debug 只是需要時間跟冷靜地找到問題的方法而已