程序員如何做到「編程速度又快,Bug 數量又少」?
關于一個給自己埋地雷的故事
最近看到一個Quora中的回答,答到心坎上。譯文引用自伯樂在線:
三個程序員被要求穿過一片田地,到達另一側的房子。
菜鳥程序員目測了一下之間很短的距離,說:“不遠!我只要十分鐘。”
資深程序員看了一眼田地,想了一會,說:“我應該能在一天內過去。”菜鳥程序員很驚訝。
大神程序員看了一眼田地,說:“看起來要十分鐘,但我覺得十五分鐘應該夠了。” 資深程序員冷笑了一聲。
菜鳥程序員出發了,但只過了一會,地雷爆炸了,炸出了巨大的洞。這下他必須偏移預定的路線,原路返回,反復嘗試穿過田地。最后他花了兩天到達目的地,到的時候顫顫發抖,還受了傷。
資深程序員一出發就匍匐前進,仔細地拍打地面,尋找地雷,只有在安全的時候才前進。他在一天的時間內小心謹慎地緩慢爬過了這片地,只觸發了幾個地雷。
大神程序員出發之后徑直穿過了田地,十分果斷。他只用了十分鐘就到了另一邊。
“你是怎么做到的?”另外兩個人問道,“那些地雷怎么沒有傷到你?”
“很簡單,”他回答道,“我最初就沒有埋地雷。”
地雷從何而來?
與大神一起工作的時候就是這種感覺,也是我的第一印象「代碼整潔而且沒有地雷」。可是反過來想,為什么有的人就是習慣于埋雷呢?難道看不到后果嗎? 再深一層來講,沒人愿意給自己埋地雷,主要還是沒有對習慣引起重視。培養起好的編程習慣是非常重要的。編程中的壞習慣,是很多程序員上升的天花板,十年原 地踏步的原因。想要寫出好代碼,一定要常常問自己「我還能做的更好嗎?」(好吧,這是算法課的口號)。只有想不斷提升的人,才會注意去扣各種各樣的細節, 使得自己做得比前一次好。下面總結一下,常見的「地雷」有哪些:
沒有提前構建
- 沒有規劃完整系統的生命周期,內存泄露到處都是。
- 系統沒有設計好,存在不少重復功能的類。
- 系統的行為沒有定義好,接口設計不完整,寫了創建不寫刪除。
沒有重視代碼的可讀性
- 代碼沒有經過提煉,到處都是重復代碼,改一個功能常常要改很多處代碼。
- 缺少抽象,將具體實現暴露得到處都是。比如一個狀態機在外部設置它的狀態切換。
- 代碼沒有緊貼語義。
沒有重視開發效率
- 到處都是繁雜重復的配置項,通過約定可以省去很多配置。
- 很多中間代碼,比如解析xml、解析協議等等的工作,通過元編程可以將這些中間工作自動化。
沒有重視數據
- 數據沒有處理好,敏感數據要保護好,比如角色的屬性,到處都是直接賦值的話,很容易出錯,要把直接改變限制在少數的某幾個函數里。
- 某些系統知道得太多,比如數據層就不應該知道顯示層的東西,顯示和數據摻雜在一起。
- 數據依賴于代碼,比如寫在C++的模板里面,沒有為數據設計序列化文件。
更深層的原因
“我不是什么偉大的程序員,我只是一個有著很多好習慣的程序員”—-Kent Beck
在《程序員修煉之道》里,第一條就是「關心你的技藝」。如果你不在乎能否漂亮地開發出軟件,你又如何要耗費生命去開發軟件呢?
轉載標明原文鏈接:jjyy.guru/how-fewer-bugs