Pages

Thursday, February 6, 2014

從Programming看性格 - Defensive Programming

什麼是防禦性程式設計

我們總是無法預期使用者會輸入什麼樣的資料進入系統,但是錯誤的資料可能會導致整個系統損毀,於是程式設計師便會在資料輸入的地方加上一些檢查的保護措施,也就是說當你不信任輸入的時候,你就必須去檢查它。

然而過度的防禦性措施是一種資源的浪費,不僅降低了系統運作效率,也增加了程式碼的維護成本。Daniel Roop更是將Defensive Programming視為垃圾 Why Defensive Programming is Rubbish(雖然他承認有點不恰當),他把Defensive策略叫做Hide the Problem Programming,我十分同意這個想法。

一位工作多年,擁有豐富經驗的同仁,從他的程式碼可以看出他將Defensive發揮得淋漓盡致,每個地方都守的密不通風,因為如此 他的程式碼很少會Crash,所以每當系統產生問題時,他總是可以大聲的說「對我來說,我負責的這部分沒有問題」。事實上,為什麼傳入的資料有問題呢?這是我們要去追蹤的,但是因為問題被掩蓋了,以至於我們沒有辦法“Fail Fast”,長久下來系統中便會累積一些潛藏的問題。

這是信任的問題

真正的問題不在於程式有沒有Crash, 而是團隊之間溝通與信任的問題,會存在這種Defensive Coding Style的團隊,一定是溝通不良,在設計前未充分溝通,便自顧自的開始Coding,不願麻煩別人或怕別人來麻煩,所以處處提防著。

這種自我防衛的意識雖然是用來保護自己,但是每每在問題產生時撇清責任的方式,卻也造成團隊成員間的疏離。

Coding Style反映性格

前面提到的同仁他的行事作風上就是充滿的防衛性,從不正面回應執行面上時程或是資源的問題,只回答技術面上是否可行。共同執行一個專案時,會要你把要處理的項目切割好再分給他,然後他會在計劃時間內完成,可是專案從來沒準時過,為什麼呢?因為軟體開發不是在堆積木,只要把已經建立的各個模組組合就行了,當然就物件導向來說,程式碼不就是要組合嗎?ㄜ ⋯那指的是程式內部的設計方式,我想說的是團隊成員之間如何互相整合各自的東西 ,團隊合作是建立在信任的基礎上。

當然羅馬不是一天造成的,長久以來的工作經驗,整個華人的工作氛圍造就了這樣的一個人格特質,也反映在Coding Style上,有趣的是你可以從程式碼了解一個人的工作態度。

No comments:

Post a Comment