不管在哪個階段,在寫程式時總是會遇到大大小小的問題,不是程式不照著你的想法走,就是他連動都不想動。在今天我想要分享幾個辦法讓各位遇到臭蟲時要如何解決,以及要如何減少臭蟲出現的機會。
小時候我寫專題用的程式時,Debug 的時間總是比寫出來的時間長,因此我常常在爸爸回家的時候拿電腦去問他。很好笑的事,幾乎每次拿去問時,都是我講到一半就發現自己錯在哪裡,又自己一個人躲回房間,殊不知他完全沒有在聽 (不要打我)。而某天之後他半開玩笑的拿了一隻 Yahoo! 的紫色鴨鴨給我,和我說只要遇到問題可以講給他聽。之後就被我丟到浴室了
以上都是真人真事,但我那時候還不知道真的有人為這種除錯的方法命名,而且還真的叫做黃色小鴨除錯法。這不但是最簡潔有力,不需要任何工具,且可以在任何時候在腦袋思考的除錯法,也是個人認為效率最高的除錯法,多多做這種練習能夠讓程式組織能力加強許多。
當黃色小鴨法也沒有用,或是腦袋已經撐不住時可以嘗試直接把有疑慮的地方印出來,使用正確的測試資料,再這樣的方式一定會找到問題的根源。在眾多編輯器中也有偵錯器能夠一步一步印出程式運行的步驟,在各種 C++ 的 IDE (APCS 內裝的) 也都有支援,若有需要也可以學習怎麼使用偵錯器,但同時也不要因為過於方便而太依賴它,有時反而會沒辦法將問題聚焦導致更難找到問題。
變數有很多不同的功用,而在不同程式語言中也會有不同的修飾方法讓每個變數的定位更明顯。而在 C 語言中的 const 則是有防止傳遞的函數參數不被修改的功用。不僅是變數,函式也可以用 const 去不讓此函式有改到任何變數的可能性,如此一來一遇到變數上的問題,本應該從頭到尾看一遍的程式就會變得簡單很多。
排版就像是剛學寫字的小孩一樣,是在初學程式時很常遇到的問題之一。若是沒有良好的排版習慣,不僅別人在看程式時會耗費很多時間在本不需要浪費的時間上外,自己也很容易被自己潦草的程式搞得團團轉。雖然至今仍然有許多人對排版的最佳方法爭論至今,但寫出乾淨且易讀的程式前,學習利用排版增加可讀性是必要的。
在許多程式競賽中,題目就會將預設的變數取為 a, b, N, M, K 等單一字母,雖然這部分是題目定好的,但在自己創造變數時要注意不要變數無意義的取名。不僅影響可讀性(別人會看不出在做什麼)外,這些無厘頭的命名方式也會讓自己的腦袋中裝一些本來不需要裝的東西,導致思考速度下降。
在進階的程式設計中,還有很多技巧能夠讓錯誤出現的頻率降低,像是不要同時存在多個可修改的 pointer 指向同個位置或是 self explanation 和 function 不要寫太大等等 (感謝隊友 bogay, JacobLinCool 補充),都會在程式實戰中慢慢體會到並吸收,若是沒有嘗試過以上的方法,的不妨試試看適不適合自己喔。