三讀《UNIX編程藝術》——UNIX哲學

如果在我目前的職業生涯中要選出一本對我影響最大的書籍,我一定會選擇ESR的《UNIX編程藝術》。第一次讀此書時資歷尚淺,更多的是當做一本課外讀物來看,但是隨着職業中接觸了更多不同的操作系統,完成了更多項目產品的設計、架構、實現,對書中所講內容產生了更大的共鳴。在第三次讀此書之際,把書中很多有價值的思想提取出來給自己一個總結,希望也能給大家帶來一次分享。


本書關注的重點:不止於方法,更重乎理念。知識(方法)和專能(理念)差異巨大,憑藉知識可以推斷出該做什麼,而專能讓你甚至在無意之間,條件反射似的把事情做好。

  • 看看UNIX的生命力:今天,化生爲Linux、BSD、Solaris、MacOS X以及好幾個其它變種的Unix,使其前所未有的強大。UNIX這種穩定而且強大的生命力會讓你的知識投資更趨穩定。

  • UNIX的設計理念:最終用戶永遠比操作系統設計人員更清楚他們究竟需要什麼。它提供的是機制,而非策略。,雖然這種自由放縱主義風格會讓它失去很多非技術型用戶。但從長遠來看,這是個優勢,因爲策略相對短壽,而機制纔會長存

  • 對windows的批評:在這樣的操作系統中,完成操作系統預見的任務很容易,但是完成其沒有預料到的任務,用戶不是無計可施就是痛苦不堪。但UNIX卻具有非常徹底的靈活性。

  • UNIX的hack之趣:對於程序員和開發人員來說,如果完成某項任務所需付出的努力對他們是個挑戰卻又恰好又在力所能及的範圍內,他們就會覺得很有樂趣。因此,趣味性是一個峯值效率的標誌。充滿痛苦的開發環境只會浪費勞動力和創造力;只會在無形中耗費大量時間、資金、機會。

UNIX哲學

Unix哲學是自下而上的,而不是自上而下的。Unix哲學注重實效,立足於豐富的經驗。你不會在正規方法學和標準中找到它,它更接近於隱形的半本能的知識,即UNIX文化所傳播的專業經驗。

  1. 模塊原則:使用簡潔的接口拼合簡單的部件

    • 計算機編程的本質就是控制複雜度。

    • 用清晰的接口把若干簡單的模塊組合成一個複雜軟件。如此一來,多數問題只會侷限於某個局部,那麼就還有希望對局部進行改進而不至牽動全身。

  2. 清晰原則:清晰勝於機巧

    • 維護如此重要而成本如此高昂;在寫程序時,要想到你不是寫給執行代碼的計算機看的,而是給人——將來閱讀維護源碼的人,包括你自己——看的。

  3. 組合原則:設計時考慮拼接組合

    • 在輸入輸出方面,Unix傳統極力提倡採用簡單化、文本化、面向流、設備無關的格式。

  4. 分離原則:策略同機制分離,接口同引擎分離

  5. 簡潔原則:設計要簡潔,複雜度能低則低

    • 來自多方面的壓力常常會使程序變得複雜,其中一種就是來自技術上的虛榮心理。

    • 過度的複雜性往往來自項目的要求,而這些要求常常基於當月的推銷熱點,而不是給予顧客的需求和軟件實際能提供的功能。

    • 要避免這些陷阱,唯一的辦法就是鼓勵另一種軟件文化,以簡潔爲美,人人對龐大複雜的東西羣起而攻之——這是一個非常看重簡單解決方案的工程傳統,總是設法將程序系統分解爲幾個能夠協作的小部分,並本能的抵制任何用過多噱頭來粉飾程序的企圖。

  6. 吝嗇原則:除非別無他法,不要編寫龐大的程序

  7. 透明性原則:設計要可見,以便審查和調試

    • 因爲調試通常會佔用四分之三甚至更多的開發時間,所以一開始就多做點工作以減少日後調試的工作量會很划算。一個特別有效的減少調試工作量的方法就是設計時充分考慮透明性和顯見性。

  8. 健壯性:健壯源於透明和簡潔

  9. 表示原則:把知識疊入數據以求邏輯質樸而健壯

    • 數據要比編程邏輯更容易駕馭。所以接下來,如果要在複雜數據和複雜代碼中選擇一個,寧願選擇前者。更進一步:在設計中,你應該主動將代碼的複雜度轉移到數據之中去。

  10. 通俗原則:接口設計避免標新立異

    • 最易用的程序就是用戶需要學習新東西最少的程序——或者,換句話說,最易用的程序就是最切合用戶已有知識的程序。

  11. 緘默原則:如果一個程序沒有什麼好說的,就保持沉默

  12. 補救原則:出現異常時,馬上退出並給出足量錯誤信息

    • 軟件要儘可能從容的應付各種錯誤輸入和自身的運行錯誤。但是,如果做不到這一點,就讓程序儘可能以一種容易診斷錯誤的方式終止。

  13. 經濟原則:寧花機器一分,不花程序員一秒

  14. 生成原則:避免手工hack,儘量編寫程序去生成程序

  15. 優化原則:雕琢前先得有原型,跑之前先學會走

    • 90%的功能現在能實現,比100%的功能永遠實現不了強。做好原型設計可以幫助你避免爲蠅頭小利而投入過多的時間。

    • 先製作原型,再精雕細琢。優化之前先確保能用。

    • 先給你的設計做個未優化的、運行緩慢、很耗內存但是正確的實現,然後進行系統地調整,尋找那些可以通過犧牲最小局部簡潔性而獲得較大性能提升的地方。

  16. 多樣原則:決不相信所謂的“不二法門”的斷言

  17. 擴展原則:設計着眼未來,未來總比預想快

    • 要爲數據格式和代碼留下擴展的空間。

    • 設計協議或者文件格式時,應使其具有充分的自描述性以便可以擴展。

所有的Unix哲學濃縮爲一條鐵律

KISS——Keep It Simple,Stupid!

發佈了120 篇原創文章 · 獲贊 9 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章