一,所謂藝術,不立文字,直指人心,見性成佛。 python
二,Unix之失:安全模型不夠完善。 程序員
三,Unix的十七大原則。 算法
3.1 模塊原則:簡潔的接口拼接簡單的部件,構件複雜的系統,下降編程複雜度。 編程
3.2 清晰原則:讓代碼變得清晰,易於理解,而不是爲了讓程序高效,破壞清晰原則。 緩存
3.3 組合原則:設計時考慮拼接組合。 安全
3.4 分離原則:策略與機制分離,接口與引擎分離。 數據結構
3.5 簡潔原則:設計要簡潔,複雜度能低就低。 模塊化
3.6 吝嗇原則:除非別無他法,不要編寫龐大的程序。 函數
3.7
透明性原則:設計要可見,以便複查和調試。 工具
3.8 健壯性原則:健壯源於透明與簡潔。
3.9 表示原則: 把知識疊於數據,以求邏輯樸實而健壯。讓數據複雜,而不是代碼。
3.10 通俗原則:接口設計避免標新立異。
3.11 緘默原則:若是一個程序沒什麼好說的,就保持沉默。
3.12 補救原則:出現異常,立刻退出,給出足夠的信息。
3.13 經濟原則:寧花極其一分,不花程序員一秒。如:Java的垃圾收集機制。
3.14 生成原則:避免手工去hack,讓程序生成程序是最好的方式。
3.15 優化原則:先讓程序運行起來,而後優化。
3.16 多樣原則:毫不相信所謂的「不二法門」。
3.17 擴展原則:設計着眼於將來。
四,Unix哲學一言以蔽之:KISS原則。(keep it simple , stupid)
五,設計
5.1
模塊化大小:過大或者太小的模塊或函數都會致使bug的急劇增長。知足U型曲線。
5.2正交性:可使複雜的設計變得緊湊。也就是不產生反作用的代碼。重構的原則性目的就是提升正交性。
5.3
SPOT原則(Single Point
Of Truth)真理的單點性。
5.4
分離的價值:不要依賴他人,從零開始,從禪的初心開始。
六,分層。
6.1 自頂向下仍是自底向上。主要是要看狀況。若是可以精確預知的任務,在實現過程當中,程序的規格不會有重大變化,在底層有充分自由選擇實現方式,那麼就適合採用自頂向下,逐步求精。
自底向上更是Unix程序的天性。
6.2 膠合層:要薄膠合層。
6.3 對OO語言的批判:面嚮對象語言每每讓程序員不知道程序在作什麼,會隱藏晦澀的bug。
7. 文本化
7.1 文本化配置文件增長透明性,方便修改和調試。
7.2 好的文本格式能夠節約空間。
8. 透明性
8.1 清新的設計,清晰的文檔,用簡單的算法和數據結構貼近基面。
8.2 爲可維護性而設計。
8.3 拿不許,用窮舉。
9. 分離進程爲獨立的功能。
9.1 線程是一場噩夢。
9.2 美是抵禦負責度的最後武器。
10 生成 :提高規格說明層次
10.1 數據比較程序的邏輯更容易理解。
10.2 數據驅動編程。
10.3 專用的代碼生成工具。
11. 配置:
11.1 簡化配置,下降負責度,讓用戶感受舒服。
11.2 不要區分潛在的空格符號。
11.3 環境變量:到其餘操做系統的可移植性。
11.4 命令行選項:
12 接口
12.1 全部的知識都來自咱們本身的感知—達芬奇。
12.2 最小標新立異。接口應該儘可能通俗化。
12.3標準:簡潔,易用,表現力,透明,易於評估。
12.4 過濾器:Postle原則:寬進嚴出。
12.5 沉默是金:不要產生過多的垃圾信息,妨礙用戶體驗。
13. 優化
13.1 過早優化是萬惡之源。
13.2 先估量,後優化。
13.3 最有效的優化方法:保持代碼短小簡單,讓核心數據結構在緩存中。
14. 複雜度
14.1 儘量簡單,可是不能簡單過頭了。
15. 語言
15.1 學習C語言是爲了幫助咱們站在硬件的角度考慮問題。
15.2 自動化內存管理的語言纔是王道。
15.3 python語言可以快速構造原型。
15.4 Java開發的項目:freenet有意思。
15.5 日本人開發的雜交體語言:Runy
16. 工具
16.1 vi
16.2 emacs
16.3 版本控制工具:SCCS,CVS
17 重用
17.1 不要從新發明輪子。
17.2 利用開源軟件。
18.可移植性
18.1 C語言讓Unix具備前所未有的移植性。
19 文檔
19.1 簡潔的文檔,若是真的要複雜,作成手冊。發佈到網站。
20 開發源碼
20.1 儘早發佈,常常發佈。
20.2 在freshmeat上發佈通告。
21 將來: 危機與機遇
21.1 預測將來最好的辦法就是創造將來。
完畢