Unix編程藝術讀書筆記



一,所謂藝術,不立文字,直指人心,見性成佛。 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
版本控制工具:SCCSCVS



17 重用



 
17.1
不要從新發明輪子。



 
17.2
利用開源軟件。





18.可移植性



  18.1 C語言讓Unix具備前所未有的移植性。





19  文檔



 
19.1
簡潔的文檔,若是真的要複雜,作成手冊。發佈到網站。





20  開發源碼



20.1 儘早發佈,常常發佈。



20.2 freshmeat上發佈通告。



21 將來: 危機與機遇



 
21.1
預測將來最好的辦法就是創造將來。



 完畢

相關文章
相關標籤/搜索