看了《Unix編程藝術》,這個裏面講的觀念對現有產品和項目的設計有不少借鑑意義,建議你們都能讀讀(不過中文版翻譯的有點爛,看的有點糾結)。這裏總結下幾種原則。編程
Unix哲學的原則:後端
--模塊原則:使用簡潔的接口拼接簡單的部件。架構
----「計算機編程的本質就是控制複雜度」,編制複雜軟件的方法就是下降總體複雜度,用清晰的接口把若干簡單的模塊組合成一個複雜軟件。工具
--清晰原則:清晰勝於機巧。學習
----複雜的代碼容易滋生BUG,註釋的重要性,代碼的可維護性優化
--組合原則:設計時考慮拼接組合。編碼
----軟件須要能相互通訊,否則就會陷入複雜度;輸入輸出的簡單、文本化、面向流、設備無關的格式;用簡單的命令流或者是應用協議串聯分散的各個組件。spa
--分離原則:策略同機制分離,接口同引擎分離。翻譯
----GUI環境中被普遍使用,感官是策略、光柵操做和組合是機制不變;Emacs用LISP來控制,C編寫編輯原語操做;經過套接字分離先後端。設計
--簡潔原則:設計要簡潔,複雜度能低就低。
----避免技術上的虛榮心,玩轉複雜的概念和抽象。設計能力超出實現和排錯能力,代價就是高昂的。「錯綜複雜的美妙事物」聽起來自相矛盾,要作到「簡潔而漂亮」(參考MAC的設計理念,簡單就是美);商業上優秀的設計被「特性清單」扼殺。避免龐大BUG陷阱的方法就是鼓勵「簡潔爲美」的軟件文化。
--吝嗇原則:除非卻無他法,不要編寫龐大的程序。
----「大」就是體積大,複雜度高。程序大了就難於維護。
--透明性原則:設計要可見,以便審查和調試。
----前期多作工做減小調試的工做量-設計充分考慮透明性和顯見性。透明性:一眼就能看出軟件是在作什麼以及怎樣作;顯見性:程序帶有監視和顯示內部狀態的功能。接口簡潔。
--健壯原則:健壯源於透明與簡潔。
----設計時考慮承受極大量的輸入。異常的處理。透明和簡潔。
--表示原則:把知識疊入數據以求邏輯質樸而健壯。
----數據要比編程邏輯更容易駕馭。在複雜數據和複雜代碼中寧願選擇複雜的數據。設計中將代碼的複雜度轉移到數據中。
--通俗原則:接口設計避免標新立異。
----「最少驚奇原則」最易用的程序就是用戶須要學習新東西最少的程序。關注目標受衆,最終用戶。
--緘默原則:若是一個程序沒有什麼好說的,就沉默。
----行爲良好的程序應該是默默工做,毫不礙手礙腳。
--補救原則:出現異常時,立刻退出並給出足夠多錯誤信息。
----考慮最壞的狀況。「寬容的收,謹慎的發」。要麼響亮的倒塌,要麼爲工做鏈的下一個程序提供嚴禁乾淨的數據。
--經濟原則:寧化機器一分,不花程序一秒
----典型作法就是使用更高級的語言Python、Java、Lisp等來進行開發,下降複雜度,將複雜度留給機器去處理。
--生成原則:避免手工hack,儘可能編寫程序去生成程序
----代碼生成器解決大量重複容易出錯的編碼。Parser/Lexer生成器,makefile生成器,GUI構建器等。
--優化原則:雕琢前要有原型,跑以前要學會走。
----「過早優化是萬惡之源」,先要有原型,不用等到100%了再去作。過早的局部優化會妨礙全局優化,總體設計要避免過早局部優化的干擾。「先製做原型,再精雕細琢。優化以前先確保能用」。「先求運行,在求正確,最後求快」。代碼最強大的優化工具就是delete操做。
--多樣原則:決不相信所謂「不二法門」的斷言。
----設計一個僵化、封閉、不肯與外界溝通的軟件,簡直就是一種病態的傲慢。Unix奉行普遍採用多語言、開發的可擴展系統和用戶定製機制。
--擴展原則:設計着眼將來,將來總比預想來得快。
----沒有所謂「不二法門」,老是在變的。要給代碼留下擴展的空間。協議和文件格式要能自描述性也便進行擴展。設計代碼要有很好的組織性,以便後來者能快速添加新功能,而無需拆毀整個架構。設計着眼於將來節省的就是本身的精力。
摘自:《Unix編程藝術》