Unix哲學基礎

2021-04-25 03:18:45 字數 2244 閱讀 5601

--摘自《unix程式設計藝術》

unix哲學起源於ken thompson早期關於如何設計乙個服務介面簡潔、小巧精幹的作業系統的思考,隨著unix文化在學習如何盡可能發掘thompson設計思想的過程中不斷成長,同時一路上還從其它許多地方博採眾長。

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:資料壓倒一切。如果已經選擇了正確的資料結構並且把一切都組織得井井有條,正確的演算法也就不言自明。程式設計的核心是資料結構,而不是演算法[7]。

原則6:沒有原則6。

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. 擴充套件原則:設計著眼未來,未來總比預想來得快。

如果剛開始接觸unix,這些原則值得好好體味一番。談軟體工程的文章常常會推薦大部分的這些原則,但是大多數其它作業系統缺乏恰當的工具和傳統將這些準則付諸實踐,所以,多數的程式設計師還不能自始至終地貫徹這些原則。蹩腳的工具、糟糕的設計、過度的勞作和臃腫的**對他們已經是家常便飯了;他們奇怪,unix的玩家有什麼好煩的呢。

關於Unix哲學

先講兩個很老的小故事。第乙個故事。有一家日本最大的化妝品公司,收到了使用者的投訴。使用者抱怨買來的肥皂盒是空的。這家公司為了防止再發生這樣的事故,很辛苦地發明了一台x光檢查器,能夠透視每乙個出貨的肥皂盒。同樣的事故,發生在一家小公司。他們的解決方法是買一台強力的工業電扇,對著肥皂盒猛吹,被吹走的就是...

關於Unix哲學

這幾天,我在看unix,發現很多人在談 unix哲學 也就是開發unix系統的指導思想。wikipedia上列出了好幾個版本,不同的人有不同的總結。發明管道命令的doug mcilroy總結了三條,而eric s.raymond則在the art of unix programming一書中,一口氣...

Unix設計的哲學

1 小既是美 相對於同類的龐然大物,小巧的事物有著無可比擬的巨大優勢。2 每個程式之作好一件事情 通過集中精力應對單一任務,程式可以減少很多冗餘的 從而避免過高的資源開銷 不必要的複雜性和缺乏靈活性。3 盡快建立原型 短時間內建立設計原型,有助於提高效率。4 舍高效率而取可移植性 unix作為第乙個...