程序員
做爲一個初學者,個人程序常常會出現或多或少的編譯和運行上的錯誤,這本書關於處理不可避免的錯誤——代碼中的錯誤情形給出了很詳細的討論。我很喜歡書上引用羅伯特 · 奧本海默的一句話「避免錯誤的惟一辦法就是找出錯誤,而找出錯誤的惟一辦法就是要有本身提出問題的權利。」編程
書中指出,錯誤能夠歸爲用戶錯誤、程序員錯誤和意外狀況三類。用戶錯誤主要體如今錯誤乃至荒謬的輸入和操做。程序員錯誤主要體如今代碼的bug,代碼中一個地方的bug經常會致使更多的錯誤在代碼中其餘地方出現,因此要培養防護性編程的意識。而意外狀況譬如網絡鏈接失敗,硬盤空間不足等雖然不常見,但也要歸入到咱們編程的考慮範圍以內。網絡
要處理錯誤就要有一個錯誤報告機制。我有時候以爲一個函數比較簡單甚至就直接定義爲void類型,不判斷它運行的正常與否,這種習慣是很很差的。當我判斷函數是否正常運行時,我經常使用的方法是錯誤返回-1,正確返回1。但當個人函數要返回數據時,這種方法就不方便了。書中對於這種狀況給出了三種方法:其一是返回一個複合數據類型(比較笨拙且不經常使用)。其二是經過一個函數參數返回錯誤代碼(容易實現,但不美觀也不直觀)。最後是預留一些返回值表示故障(如要返回正數的數據,可用負數來表示出現的各類錯誤類型)。函數
而處理錯誤則須要搞清楚一些關鍵的問題,其中一些問題是之前我編程的時候常常忽略掉的。spa
其一,處理錯誤須要明白出現錯誤的問題的本質,發生錯誤時操做完成了多少對於搞清楚爲何出錯是很是有用的。編譯器
其二,判斷錯誤的嚴重性是有必要的。有一些嚴重錯誤是沒法繞過的,須要優先處理,對錯誤分級處理能夠有條理的解決問題,也不至於由於沒有先解決嚴重錯誤而使程序屢次崩潰而打擊本身的積極性。最後,除了耐心讀本身的代碼,經過已有的其餘信息來推斷錯誤來源是十分有用的,能夠經過編譯器自帶的窗口看一下出錯時各個變量的值是否出錯。這樣可使處理錯誤更加高效和準確。編譯
最後,咱們須要管理本身的錯誤,即要對故障的處理創建一個通常性的原則,一致的策略。在過去的編程中,我編程的目的就是爲了解決做業中的問題—— 每每只能對於正確的輸入給出正確結果,而對於錯誤輸入的處理很是簡單。我從此須要養成管理錯誤的意識。首先作到不拖延,及時編寫錯誤處理代碼。其次,要儘量多的覆蓋錯誤可能性。還要對功能相似的函數的錯誤處理方法有一個統一的總結,這樣總結之後一段時間之後,寫函數的時候就能夠對容易出錯的地方看的更加清晰,考慮錯誤情形能夠更加全面,使個人代碼能慢慢變得強健起來。class