Unix哲學

Unix哲學起源於Ken Thompson早期關於如何設計一個服務接口簡潔、小巧精幹的操作系統的思考,隨着Unix文化在學習如何儘可能發掘Thompson設計思想的過程中不斷成長,同時一路上還從其它許多地方博採衆長。

 1  Unix哲學說來不算是一種正規設計方法。它並不打算從計算機科學的理論高度來產生理論上完美的軟件。那些毫無動力、鬆鬆垮垮而且薪水微薄的程序員們,能在短短期限內,如同神靈附體般造出穩定而新穎的軟件——這只不過是經理人永遠的夢囈罷了。 

  Unix哲學(同其它工程領域的民間傳統一樣)是自下而上的,而不是自上而下的。Unix哲學注重實效,立足於豐富的經驗。你不會在正規方法學和標準中找到它,它更接近於隱性的半本能的知識,即Unix文化所傳播的專業經驗。它鼓勵那種分清輕重緩急的感覺,以及懷疑一切的態度,並鼓勵你以幽默達觀的態度對待這些。  

 Unix管道的發明人、Unix傳統的奠基人之一Doug McIlroy在[McIlroy78]中曾經說過: 

  (i)讓每個程序就做好一件事。如果有新任務,就重新開始,不要往原程序中加入新功能而搞得複雜。   

(ii)假定每個程序的輸出都會成爲另一個程序的輸入,哪怕那個程序還是未知的。輸出中不要有無關的信息干擾。避免使用嚴格的分欄格式和二進制格式輸入。不要堅持使用交互式輸入。   

(ⅲ)儘可能早地將設計和編譯的軟件投入試用, 哪怕是操作系統也不例外,理想情況下, 應該是在幾星期內。對拙劣的代碼別猶豫,扔掉重寫。   

(iv)優先使用工具而不是拙劣的幫助來減輕編程任務的負擔。工欲善其事,必先利其器。   後來他這樣總結道(引自《Unix的四分之一世紀》(A Quarter Century of Unix [Salus])): 

  Unix哲學是這樣的:一個程序只做一件事,並做好。程序要能協作。程序要能處理文本流,因爲這是最通用的接口。 

  Rob Pike, 最偉大的C語言大師之一, 在《Notes on C Programming》中從另一個稍微不同的角度表述了Unix的哲學[Pike]:  

 原則1:你無法斷定程序會在什麼地方耗費運行時間。瓶頸經常出現在想不到的地方,所以別急於胡亂找個地方改代碼,除非你已經證實那兒就是瓶頸所在。 

  原則2:估量。在你沒對代碼進行估量,特別是沒找到最耗時的那部分之前,別去優化速度。 

  原則3:花哨的算法在n很小時通常很慢,而n通常很小。花哨算法的常數複雜度很大。除非你確定n總是很大,否則不要用花哨算法(即使n很大,也優先考慮原則2)。 

  原則4:花哨的算法比簡單算法更容易出bug、更難實現。儘量使用簡單的算法配合簡單的 數據結構。 

  原則5:數據壓倒一切。如果已經選擇了正確的數據結構並且把一切都組織得井井有條,正確的算法也就不言自明。編程的核心是數據結構,而不是算法。  

   Ken Thompson——Unix最初版本的設計者和實現者,禪宗偈語般地對Pike的原則4作了強調:   拿不準就窮舉。   Unix哲學中更多的內容不是這些先哲們口頭表述出來的,而是由他們所作的一切和Unix本身所作出的榜樣體現出來的。從整體上來說,可以概括爲以下幾點:

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

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

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

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

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

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

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

 8. 健壯原則:健壯源於透明與簡潔。

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

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

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

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

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

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

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

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

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

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