“When everybody actually is out to get you, paranoia is just good thinking.”

— Woody Allen

Tip 36 - You Can’t Write Perfect Software(你寫不出完美的軟體)

核心觀念#

你寫不出完美的軟體。這不應該傷害你的自尊——把它當作人生的公理。接受它、擁抱它、慶祝它。因為完美的軟體不存在,在電腦短暫的歷史中,從來沒有人寫出過一段完美的軟體。你不太可能成為第一個。除非你接受這個事實,否則你會浪費時間和精力去追逐一個不可能的夢。

每個人都覺得自己是世界上唯一的好駕駛。所以我們防禦性駕駛——在麻煩發生之前就留意、預期意外、絕不讓自己陷入無法脫身的境地。寫程式也是如此:我們不斷與別人的程式碼互動,處理可能無效的輸入。我們被教導要防禦性編程。

但務實的程式設計師更進一步:他們連自己都不信任。 知道沒有人(包括自己)寫得出完美的程式碼,務實的程式設計師會對自己的錯誤建立防禦。

本章概覽#

Topic說明
Topic 23 - 合約式設計客戶和供應商必須就權利和責任達成一致,透過前置條件、後置條件和類別不變量來確保程式的正確性
Topic 24 - 死程式不說謊在排除 bug 的過程中,確保我們不會造成損害——經常檢查,發現問題就讓程式終止
Topic 25 - Assertion 式程式設計用 assertion 主動驗證你的假設,不要練習自我欺騙——如果「不可能發生」,就用 assertion 來檢查
Topic 26 - 如何平衡資源管理記憶體、交易、執行緒、檔案等資源時,分配資源的人也要負責釋放資源
Topic 27 - 不要跑得比車頭燈還快保持小步前進,檢查回饋後再調整,不要預測太遠的未來

核心觀點: 在一個不完美的系統、荒謬的時程、可笑的工具和不可能的需求的世界中,讓我們安全地前進。務實的偏執不是悲觀,而是務實地面對現實。