1. 程式人生 > >程式設計價值觀、原則、模式

程式設計價值觀、原則、模式

讀自《實現模式》


模式,即是針對特定問題的通用解決方案。
每個模式都承載這一點點理論,但實際程式設計中存在著一些更加深遠的影響力,遠不是孤立的模式所能概括的。

價值觀是程式設計過程的統一支配性主題,影響在程式設計中所作的每一個決策。
價值觀有普遍的意義,但往往難以直接應用;模式雖然可以直接應用,卻針對的是特定情境;原則在價值觀和模式之間搭建了橋樑。

價值觀 -> 原則 -> 模式
模式描述了要做什麼,價值觀提供了動機,原則則把動機轉化成了實際行動。

在為用哪種方式做事而爭論的同時,如果在價值觀、原則上存在根本層次分歧,那麼首先要從價值觀、原則上達成共識,不然就是在浪費時間。

價值觀

1. 可讀性(溝通)

編寫出計算機能執行的程式碼很簡單,編寫出讓人能很好理解的程式碼沒那麼容易。

在程式設計時,我們很容易從計算機的角度進行思考。但只有一面程式設計一面思考其他人的感受,才能寫出更好的程式碼。

從經濟學來說,軟體的絕大部分成本都是在第一次部署以後才產生的。從經驗來看,花費在閱讀既有程式碼上的時間要比編寫全新的程式碼長得多。
因此,為了減少閱讀程式碼所帶來的開銷,就應該讓它容易讀懂。

2. 簡單

程式碼中的複雜有兩種:有些複雜性是內在的,他們準確反映了所要解決的問題的複雜性;另一些複雜性的產生則是因為我們忙著讓程式執行起來,未認真考慮,從而造出了多餘的複雜。

多餘的複雜性降低了軟體的價值:一是讓軟體正確執行的可能性降低,再是將來也很難進行正確的改動。

追求簡單推動了軟體的進化。
程式設計過程中如果發現某種簡化會使程式難以理解,這時優先考慮可讀性。

3. 靈活

同樣,因為程式的絕大部分開銷都是在第一次部署以後才產生的,所以程式必須容易改動。

靈活是衡量那些低效編碼與設計實踐的一把標尺。
但同時想象中明天或許會用得上的靈活性,可能與真正修改程式碼所需要的靈活性不是一回事。
這時候,保持簡單性和大規模測試所帶來的靈活性比專門設計出來的靈活性更為有效。

靈活性的提高可能以複雜性的提高為代價,因此在設計的度上需要有個權衡。

原則

原則是另一個的通用思想,比價值觀更貼近與程式設計實際,同時又是模式的基礎。
原則可以解釋模式背後的動機。

1. 區域性化影響

減少變化所引起的代價,因此在組織程式碼結構時,要保證變化只會產生區域性化影響,避免連鎖反應或者被擴散。

2. 最小化重複

這裡的重複,僅先限制在真正意義上的副本性重複 —— 編碼中從對應的領域到實現。
重複的來源之一,是複製。複製的越多,變化的代價、需要改動的代價就越大。
最小化重複也有助於區域性化影響。

3. 將邏輯與資料繫結

可以理解為,將資料於行為繫結。比如類的封裝。

4. 對稱性

識別出程式碼的對稱性,把它清晰地表達出來,程式碼將更容易閱讀。
一旦閱讀者理解了對稱性涵蓋地某一半,就能很快理解另一半。

5. 宣告式表達

如,能寫成一個語義清晰、功能相同的annotation,就絕不將其放在一個通用的工具類或方法中。

6. 變化率

變化率具有時間上的對稱性。
把相同變化率的邏輯、資料放在一起,把不同變化率的邏輯和資料分離。