读书笔记《Unix编程艺术》一
Unix 設計的統一思想:一切皆文件。
Linux是一個采取了Unix的設計思想,初始行為表現與Unix相同的操作系統,但Linux中的源碼并未有任何出自Unix。Linux符合一切皆文件的思想,其中讀寫操作都是處理文件描述符,無論是文件描述符后的是真正打開的文件,還是進程間通信的套接字,對于用戶而言都是操作文件描述符,用同樣的API進行操作,這種思想對寫IPC等比較方便,容易上手。
開源之于Unix:
Unix之所以生存到現在,并且在穩定性完全性都很好的原因,就是在于開源,將所有源代碼都公開在geek的眼前,大家一起審核,確保了Unix的安全性,同時由于開源輕松的特性,使得Unix上好用的工具也很多,awk, sed 等工具。
Unix與Linux:
兩者在基本設計思想上相同,但是Unix更傾向于命令行模式,Linux則希望在此基礎上提供基本的GUI,面向非技術的使用人員,兩者均是開源輕量級的操作系統,Linux設計上源于Unix,但又不完全同于原有的Unix
Unix編程藝術:
1. 封裝與模塊化:良好的模塊不會向外透露自身細節,不會胡亂共享全局數據,模塊之間通過定義良好的API來進行通信。
模塊分的越小,API的重要性越高,bug的出現率也會降低,但當模塊過小時,代碼復雜度轉移到接口,Bug率也會反增。Hatton認為最佳范圍以代碼行數計算應在“400-800”行之間
2. 緊湊型:掌握一個設計需要記憶的內容越少,則設計的緊湊型越高。即“一個設計是否能裝進人腦中的特性”
緊湊型不等于“容易學習”,對一些緊湊設計而言(如Lisp),在掌握內在基礎概念模型之前,理解該設計相對較難,但是一旦掌握了基礎概念,則就不需要記憶太多。如C,Python等是半緊湊的,Java等不是緊湊的(掌握Java需要一定的記憶),而C++則是反緊湊的(沒有人能完全理解C++,作者原話)。-_-
3. 正交性:每一個動作只做一件事(有時還會做無別的副作用的事),一個屬性只會被一個方法改變。
老生常談,每一本好書都在強調這個問題,千萬要記住
4.SPOT原則(Single Point of Truth):即Don't Repeat yourself。
設計中不應該出現重復的代碼,與代碼知識重復的文檔,太通用的數據結構(既表示返回值也表示錯誤狀態等),模糊不清的數據結構
5. 緊湊型與強單一中心:設計應當圍繞“解決一個定義明確的問題”的強核心算法進行組織設計。這樣在使用該設計時就能不過多的考慮設計使用的算法
設計使用的算法是強大且被證明為正確的算法(稱為形式法),與形式法對應的是嘗試法(如垃圾過濾算法等就是嘗試性算法,不能確保過濾結果絕對正確)
6.自頂向下與自底向上的缺點:
自頂向下是從抽象到具體,在實現過程中發現應用邏輯所需要的域原語與真正能實現的域原語無法匹配。理想與現實的差距 -_-
自底向上是從具體到抽象,很可能發現自己做了很多與應用邏輯無關的工作——像造房子,花了大部分時間設計了一堆磚塊
通常采用的方法是兩者的綜合產物,同時兼有兩者的代碼,當頂層邏輯和底層原語沖突時,就要采用膠合邏輯層來融合沖突。
7. 膠合層:中和頂層邏輯層與底層原語層之間的沖突。
C語言就是一個薄膠合層的例子,融合頂層邏輯設計并與底層計算機交互。個人認為在操作系統中編寫高層應用程序中,對調用系統API的操作而言,系統API就是在應用程序與操作系統之間的膠合層,屏蔽下方的丑陋接口,提供統一且不依賴與硬件的接口。
總結
以上是生活随笔為你收集整理的读书笔记《Unix编程艺术》一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UEditor编辑器保存数据到数据库
- 下一篇: JDK6和JDK7中String的sub