1. 程式人生 > >《Linux/Unix設計思想》隨筆

《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的最新視窗管理器中的可用性觀念。

相關推薦

Linux/Unix設計思想隨筆

“佈道者”指的是那些堅定地信仰某一宗教,並且不遺餘力地向人們傳播此宗教的修道者。 Unix 哲學的幾條準則看似簡單。事實上,它們簡單到會容易使人們忽略其重要性。這就是它們頗具欺騙性的地方。其實,簡單的外表下掩蓋著一個事實:如果人們能夠始終如一地貫徹它們,這些準則

linux/unix設計思想》讀書筆記(回憶)

出現問題 組合 例如 讀書筆記 開發 性能 發生 ech window 1) 程序應該小而專一,程序應該盡量的小,且只專註於一件事上,不要開發那些看起來有用但是90%的情況都用不到的特性; 2) 程序不只要考慮性能, 程序的可移植性更重要,shell和perl,pyt

Linux/Unix設計思想 讀書筆記

也許我們應該提及,大眾汽車公司曾經圍繞著"小即是美"的概念開展了一次成功的汽車營銷活動,並藉此銷售了數以百萬計的汽車;或者想一想主流Unix供應商Sun公司的事例,它的商業戰略基於"集中所有資源推出最好的拳頭產品"這一思想,或者換句話說,也就是"只做好一件事"的理念。那麼,人們對於掌上電腦、無線網路訪問和手持

經典文摘:Linux/Unix設計思想

Mike Gancarz是一位技術佈道者。他是Linux/Unix最主要的倡導者之一,也是最早開發X Window System的先驅。他把一些在Unix/Linux社群裡口口相傳的哲學思想總結提煉,寫

讀書筆記-《Linux/Unix設計思想

本書主要講的是Unix程式設計思想,具體涉及到linux的內容不多。 整本書的一個基本出發點是開源。其中主要強調的觀點包括: 1.小即是美 作者持有的主要觀點是程式應該以小為美。小程式實現小功能,每個程式儘量保持單一職責,大的處理過程由多個小程式串聯組成,而不是建立一個大的程

LINUXUNIX 設計思想》讀後感,前六章

《LINUX 、UNIX 設計思想》 用UNIX思想來創造軟體,與設計軟體,LINUX思想也是UNIX思想的一種變稱,稱為第三種系統。 指本書中的第一種系統,第二種系統。 快速建立原型,發展第一種系統,快速達到第三種系統。從小的系統,以小為好建立。 不要只多一個方面看等第一

Unix設計思想——小而專注

內容來自 Mike Gancarz 的著作:《 Linux and Unix Philosophy》的總結 一 :小即是美 傳統程式設計師的心中經常懷有一個編寫出偉大軟體的隱祕渴望,

把握linux核心設計思想(六):核心時鐘中斷

(位於檔案kernel/time/tick-common.c)void __init tick_init(void) { clockevents_register_notifier(&tick_notifier); } tick_notifier定義如下:static struct notif

把握linux核心設計思想(七):核心定時器和定時執行

途】        前面章節說到了把工作推後到除現在以外的時間執行的機制是下半部機制,但是當你需要將工作推後到某個確定的時間段之後執行,使用定時器是很好的選擇。         上一節核心時間管理中講到核心在始終中斷髮生執行定時器,定時器作為軟中斷在下半部上下文中執行。時鐘中斷處理程式會執行update_p

linux/unix核心設計思想

 1) 程式應該小而專一,程式應該儘量的小,且只專注於一件事上,不要開發那些看起來有用但是90%的情況都用不到的特性;  2) 程式不只要考慮效能, 程式的可移植性更重要,shell和perl,python等指令碼相比c有更好的移植性; 3)一切皆檔案,儘量使用文字檔案

把握linux內核設計思想(十三):內存管理之進程地址空間

color 區域 left ons 文章 進程的地址空間 tmp ica interval 【版權聲明:尊重原創,轉載請保留出處:blog.csdn.net/shallnet。文章僅供學習交流,請勿用於商業用途】 進程地址空間由進程可尋址的虛擬內存組成

Unix/Linux程序設計之getopt函數淺談

getopt函數、命令行參數解析Linux中getopt函數用法: 1、函數作用: getop函數用於解析命令行參數的以'-'或者‘--'開頭的參數選項,除去'-'或者'--'選項元素 如果被重復調用,則它將會依次返回每

關於unix環境高級編程、Linux程序設計兩部書淺談

是我 界面 clas 代碼量 概念 圖形 都是 淺談 相關 unix環境高級編程的術語很多,概念內容,也很多,不過學習概念性質、標準規則類的東西,想必都是這樣吧——需要進行拓展的內容很多。 Linux程序設計,圖文並茂,代碼量夠足,看起來,感覺難度還可以。 linux程序設

學習Linux程序設計之路(1)UNIX程序設計哲學

文件 系統 領域 mil 自己 編程 代碼 復雜 容易 UNIX程序編程有自己特定的風格,我們在學習UNIX程序設計的時候,應該盡量遵從這種設計風格,它能夠最大限度地幫助我們避免一些問題。簡單化 許多有用並且好用的UNIX系統軟件都非常簡單,而且很小並易於理解。

60.Linux/Unix 系統程式設計手冊(下) -- SOCKET: 伺服器設計

1.迭代型和併發型伺服器 迭代型:伺服器每次只處理一個客戶端,只有當完全處理完一個客戶端的請求之後才去處理下一個客戶端 併發型:這種型別的伺服器被設計為能夠同時處理多個客戶端的請求 併發型伺服器的其他設計方案: 1.在伺服器上預先建立程序或執行緒,其核心理念如下:

Linux Unix shell 編程指南學習筆記(第四部分)

fcm 驗證 () only arguments line div 反饋 sed 第十六章 shell腳本介紹 此章節內容較為簡單,跳過。 第十七章 條件測試 test命令 expr命令 test 格式 test condition 或者 [

Java設計模式隨筆

posit 項目 open ger 單個 不依賴 訪問者 很好 問題 大家都知道Java23種設計模式,大神總結如下: 創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接

設計思想與模式之四靜態代理模式

test 創建 靜態代理 pan 代理 對象的訪問 override todo 父類 一 概述 1.什麽是代理模式? 為了隱藏與保護目標對象,為其他對象提供一個代理以控制對該目標對象的訪問。 2.什麽是靜態代理模式? 代理模式有兩種: 靜態代理:代理對象固定。 動態代理:

設計思想與模式之五觀察者模式

per -- 什麽 over out junit 測試類 rem second 一 概述 1.什麽是觀察者模式? 將一個對象視作被觀察者,當它發出某種行為或者發生某種變化時,通知所有依賴它的對象(觀察者),這種設計模式叫做觀察者設計模式。 2.觀察者設

FPGA設計思想(持續更新)

流水線 切割 下一個 logs 學習 altera uart lte 問題 一、 流水線設計   將原本一個時鐘周期完成的較大的組合邏輯通過合理的切割後分由多個時鐘周期完成。該部分邏輯運行的時鐘頻率會有明顯對的提升,提高系統的性能用面積換速度   一個流水線設計需要4個步驟