1. 程式人生 > >Unix/Linux設計準則

Unix/Linux設計準則

Unix/Linux設計準則

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

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

  1. 小即是美。相對於同類龐然大物,小巧的事物有著其無可比擬的巨大優勢。其中一點就是它們能夠以獨特有效的方式結合其他小事務,而且這種方式往往是最初的設計者沒能預見的。

  2. 讓每一個程式只做好一件事情。通過集中精力應對單一任務,程式可以減少冗餘程式碼,從而避免過高的開銷、不必要的複雜性和缺乏靈活性。

  3. 儘快建立原型。大多數人認同“建立原型是任何專案的一個重要組成部分。在其他方法論中,建立原型只是設計中一個不太重要的組成部分,然而,在Unix環境下它卻是達成完美設計的主要工具。

  4. 舍高效率而取可移植性。當Unix作為第一個可移植系統而開創先河時,它曾經掀起過軒然大波。今天,可移植性早被視作現代軟體設計中一個理所當然的特性,這更加充分說明這條Unix準則早就在Unix之外的系統中獲得了廣泛認可。

  5. 使用純文字檔案來儲存資料。舍高效率而取可移植性強調了可移植程式碼的重要性。其實可移植性資料的重要性絕不亞於可移植程式碼。在關於可移植性的準則中,人們往往容易忽視可移植性資料。

  6. 充分利用軟體的槓桿效應。很多程式設計師對可重用程式碼模組的重要性只有一些膚淺認識。程式碼重用能幫助人們充分利用軟體的槓桿效應。一些Unix的開發人員正是遵循這個強大的理念,在相對較短的時間內編寫出了大量應用程式。

  7. 使用shell指令碼來提高槓杆效應和可移植性。shell指令碼在軟體設計中可謂是一把雙刃劍,它可以加強軟體的可重用性和可移植性。無論什麼時候,只要有可能,編寫shell指令碼來替代C語言程式都不失為一個良好的選擇。

  8. 避免強制性的使用者介面。Unix開發人員非常瞭解,有一些命令使用者介面為什麼會被稱為是“強制性的"使用者介面。這些命令在執行的時候會阻止使用者去執行其他命令,這樣使用者就會成為這些系統的囚徒。在圖形使用者介面中,這樣的介面被稱為”模態“。

  9. 讓每一個程式都成為過濾器。所有軟體程式共有的最基本特性就是,它們只是修改而從不創造資料。因此,基於軟體的過濾器本質,人們就應該把它們編寫成執行過濾器任務的程式。

以上列出Unix開發人員所奉行的信條。這些都是大家公認的Unix基本理念。如果你也採用這些標準,那麼人們就會認為你是一個”Unix人“。

下面還列出了10條次要準則,這些準則正在漸漸發展成Unix世界信奉體系的一個組成部分。並非每個與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的層次化思考已擴充套件到其他領域,如網路服務命名器、視窗管理、面向物件開發。