《Linux/Unix設計思想》隨筆

“佈道者”指的是那些堅定地信仰某一宗教,並且不遺餘力地向人們傳播此宗教的修道者。

Unix 哲學的幾條準則看似簡單。事實上,它們簡單到會容易使人們忽略其重要性。這就是它們頗具欺騙性的地方。其實,簡單的外表下掩蓋着一個事實:如果人們能夠始終如一地貫徹它們,這些準則可是非常行之有效的。

以下這份清單會讓你對 Unix 哲學的準則有初步的認識。

  1. 小即是美。相對於同類龐然大物,小巧的事物有着無可比擬的巨大優勢。其中一點就是它們能夠以獨特有效的方式結合其他小事物,而且這種方式往往是最初的設計者沒能預見到的。
  2. 讓每一個程序只做好一件事情。通過集中精力應對單一任務,程序可以減少很多冗餘代碼,從而避免過高的資源開銷、不必要的複雜性和缺乏靈活性。
  3. 儘快建立原型。大多數人都認同“建立原型”(prototyping)是任何項目的一個重要組成部分。在其他方法論中,建立原型只是設計階段中一個不太重要的組成部分,然而,在 Unix 環境下它卻是達成完美設計的主要工具。
  4. 舍高效率而取可移植性。當 Unix 作爲第一個可移植系統而開創先河時,它曾經掀起過軒然大波。今天,可移植性早被視作現代軟件設計中一個理所當然的特性,這更加充分說明這條 Unix 準則早就在 Unix 之外的系統中獲得了廣泛認可。
  5. 使用純文本文件來存儲數據。舍高效率而取可移植性強調了可移植代碼的重要性。其實可移植性數據的重要性絕不亞於可移植代碼。在關於可移植性的準則中,人們往往容易忽視可移植性數據。
  6. 充分利用軟件的槓桿效應。很多程序員對可重用代碼模塊的重要性只有一些膚淺的認識。代碼重用能幫助人們充分利用軟件的槓桿效應。一些 Unix的開發人員正是遵循這個強大的理念,在相對較短的時間內編寫出了大量應用程序。
  7. 使用 shell 腳本來提高槓杆效應和可移植性。shell 腳本在軟件設計中可謂是一把雙刃劍,它可以加強軟件的可重用性和可移植性。無論什麼時候,只要有可能,編寫 shell 腳本來替代 C 語言程序都不失爲一個良好的選擇。
  8. 避免強制性的用戶界面。Unix 開發人員非常瞭解,有一些命令用戶界面爲什麼會被稱爲是“強制性的”(captive)用戶界面。這些命令在運行的時候會阻止用戶去運行其他命令,這樣用戶就會成爲這些系統的囚徒。在圖形用戶界面中,這樣的界面被稱爲“模態”(modal)。
  9. 讓每一個程序都成爲過濾器。所有軟件程序共有的最基本特性就是,它們只修改而從不創造數據。因此,基於軟件的過濾器本質,人們就應該把它們編寫成執行過濾器任務的程序。

以上列出了 Unix 開發人員所奉行的信條。在其他一些 Unix 書籍中你也會找到類似清單,因爲這些都是大家公認的 Unix 基本理念。如果你也採用這些準則,那麼人們就會認爲你是一個“Unix 人”。

下面還列出了 10 條次要準則,這些準則正在漸漸發展成 Unix 世界信仰體系的一個組成部分6。並非每個與 Unix 打交道的人都會將它們奉爲信條,而且在嚴格意義上其中一些並不能算作是 Unix 的特性。不過,它們看起來依然是Unix 文化(當然也包括 Linux 文化)不可或缺的一部分。

  1. 允許用戶定製環境。Unix 用戶喜歡掌控系統環境,並且是整個環境。很多 Unix 應用程序絕對不會一刀切地使用交互風格,而是將選擇的權利留給用戶。它的基本思想就是,程序應該只提供解決問題的機制,而不是爲解決問題的方法限定標準。讓用戶去探索屬於自己的通往計算機的佳境之路吧。
  2. 儘量使操作系統內核小而輕巧。儘管對新功能的追求永無止境,Unix 開發人員還是喜歡讓操作系統最核心部分保持最小的規模。當然,他們並不總是能做到這一點,但這是他們的目標。
  3. 使用小寫字母,並儘量保持簡短。使用小寫字母是 Unix 環境中的傳統,儘管這麼做的理由已不復存在,但人們還是保留了這個傳統。今天,許多 Unix用戶之所以要使用小寫的命令和神祕的名字,不再是因爲有其限制條件,而是他們就喜歡這麼做。
  4. 保護樹木。Unix 用戶普遍不太贊成使用紙質文檔。而是在線存儲所有文字檔案。此外,使用功能強大的在線工具來處理文件是非常環保的做法。
  5. 沉默是金。在需要提供出錯信息的時候,Unix 命令是出了名地喜歡保持沉默。雖然很多經驗豐富的 Unix 用戶認爲這是可取的做法,可其他操作系統的用戶卻並不認同此觀點。
  6. 並行思考。大多數任務都能分解成更小的子任務。這些子任務可以並行運行,因而,在完成一項大任務的時間內,可以完成更多子任務。今天已涌現出大量對稱多處理(symmetric multiprocessing ,SMP)設計,這說明計算機行業正在朝着並行處理的方向發展。
  7. 各部分之和大於整體。小程序集合而成的大型應用程序比單個的大程序更靈活,也更爲實用,本條準則正是源於此想法。兩種解決方案可能具備同樣的功能,可集合小程序的方法更具有前瞻性。
  8. 尋找 90%的解決方案。百分百地完成任何事情都是很困難的。完成 90%的目標會更有效率,並且更節省成本。 Unix 開發人員總是在尋找能夠滿足目標用戶 90%要求的解決方案,剩下的 10%則任由其自生自滅。
  9. 更壞就是更好。Unix 愛好者認爲具有“最小公分母”的系統是最容易存活的系統。比起高品質而昂貴的系統,那些便宜但有效的系統更容易得到普及。於是,PC 兼容機的世界從 Unix 世界借鑑了此想法,並取得巨大成功。這其中的關鍵字是包容。如果某一事物的包容性強到足以涵蓋幾乎所有事物,那它就比那些“獨家”系統要好很多。
  10. 層次化思考。Unix 用戶和開發人員都喜歡分層次來組織事物。例如,Unix 目錄結構是最早將樹結構應用於文件系統的架構之一。Unix 的層次思考已擴展到其他領域,如網絡服務命名器、窗口管理、面向對象開發。

以上內容摘自《Linux/Unix設計思想》

作者Mike Gancarz是美國佐治亞州亞特蘭大市的一名編程及應用顧問。他的團隊使用Linux、Unix和Java工具,爲金融服務行業開發出多個獲獎的解決方案。作爲Unix應用程序設計專家,他不遺餘力的推廣Unix已達二十多年。作爲開發出X Window System的團隊成員,Mike Gancarz還始創了一些至今仍應用在Linux的最新窗口管理器中的可用性觀念。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章