Unix的歷史教訓
下面的文字出自《The Art of Unix Programming》(Unix編程藝術)。令今天咱們全部人所反思。 html
在Unix歷史中,最大的規律就是: (看看《誰寫了Linux》你就會知道這一規律) 程序員
距開源越近就越繁榮。任何將Unix專有化的企圖,只能陷入停滯和衰敗。 shell
回顧過去,咱們早該認識到這一點。1984年至今,咱們浪費了十年時間才學到這個教訓。若是咱們往後不思悔改,可能還得大吃苦頭。 編程
雖然咱們在軟件設計這個重要但狹窄的領域比其餘人聰明,但這不能使咱們擺脫對技術與經濟相互做用影響的茫然,而這些就發生在咱們的眼皮底下。即便Unix社區中最具洞察力、最具遠見卓識的思想家,他們的眼光終究有限。對從此的教訓就是:過分依賴任何一種技術或者商業模式都是錯誤的——相反,保持軟件及其設計傳統的的靈活性纔是長存之道。 服務器
另外一個教訓是:別和低價而靈活的方案較勁。或者,換句話說,低檔的硬件只要數量足夠,就能爬上性能曲線而最終獲 勝。經濟學家Clayton Christensen稱之爲「破壞性技術」,他在《創新者窘境》(The Innovator’s Dilemma)[Christensen]一書中以磁盤驅動器、蒸汽挖土機和摩托車爲例闡明瞭這種現象的發生。當小型機取代大型機、工做站和服務器取代 小型機以及日用Intel機器又取代工做站和服務器時,咱們也看到了這種現象。開源運動得到成功正是因爲軟件的大衆化。Unix要繁榮,就必須繼續採用吸 納低價而靈活的方案的訣竅,而不是去反對它們。 網絡
最後,舊學派的Unix社區因採用了傳統的公司組織、財務和市場等命令機制而最終未能實現「職業化」。只有癡迷的「黑客」和具備創造力的怪人結成的 反叛聯盟才能把咱們從愚蠢中拯救出來——他們接着教導咱們,真正的專業和奉獻精神,正是咱們在屈服於世俗觀念的「合理商業作法」以前的所做所爲。 性能
Unix的特色
如今的文獻中提到Unix基本上是說,由Ken Thompson和Dennis Ritchie共同開發的。而經過歷史咱們也能發現,Unix的主要是由Ken Thompson寫下的。但在學術界,Dennis Ritchie的名字每每被排在了Ken Thompson前面的。這就是由於,Dennis Ritchie不但發明了C語言,並且當時他設計Unix操做系統的設計思想,影響了整個世界,直到今天。 ui
當時,他們開發UNIX,沒有正式立項,是Ken Thompson和Dennis Ritchie等少數幾我的偷偷乾的,若是一切都要從頭重新設計,那幾乎是不可能的。因此,Unix吸收與借鑑了Multics的經驗,如內核,進程,層 次式目錄,面向流的I/O,把設備看成文件,……等等。可是Unix在繼承中又有創新,好比Unix採用一種無格式的文件結構,文件由字節串加\0組成。 這帶來兩大好處:一是在說明文件時沒必要加進許多無關的「填充物」,二是任何程序的輸出可直接用做其餘任何程序的輸入,沒必要通過轉換。後面這一點叫作「管 道」(piping),這就是Unix獨創的。此外,像把設備看成文件,從而簡化了設備管理這一操做系統設計中的難題,雖然不是UNIX的發明,可是實現 上它採用了一些新方法,比Multics更高明一些。 spa
下面是Unix的特色:(30多年過去了,這些東西早已變成經典) 操作系統
- Everything (including hardware) is a file
全部的事物(甚至硬件自己)都是一個的文件。
- Configuration data stored in text
以文本形式儲存配置數據。
- Small, single-purpose program
程序儘可能朝向小而單一的目標設計
- Avoid captive user interfaces
儘可能避免使人困惑的用戶接口
- Ability to chain program together to perform complex tasks
將幾個程序連結起來,處理大而複雜的工做。
Unix的影響和哲學
Unix是第三次工業革命中計算機軟件領域最具表明性的產物。在這近40年中,由Unix形成的影響是最有深遠意義的。就我看來,Unix爲軟件領域帶來了至少如下有積極的東西,由這些東西所引起的直接或間接的事物更是舉不勝數。
- 軟件開發的若干哲學和思想。
- 全民參與推進軟件,代碼共享的模式。
- 開啓了黑客文化和開源項目。
- 免費和商業的完美結合的Linux。
- C語言,然後發展的C++,Java等等類C的語言和腳本。(參看《C語言的演變史》)
- TCP/IP,其的Socket編程已成爲今天通用的網絡編程主流。(參看《處處都是Unix的胎記》)
不能不說,AT&T雖然發展了Unix,但今天Unix的混亂的局面也和AT&T 有着直接緣由。但反過來講,若是沒有 AT&T的反面教材,今天的GNU/Linux頗有可能也不會出現。AT&T到底是限制了Unix的發展,仍是以反面示例促進了Unix 社區,已很差評說。今天,軟件是商業化好仍是開源好的爭論還在繼續,縱觀這幾十年來Unix的歷史,Linux的劃時代地出現。相信你會得出本身的結論。 無論怎麼樣,Unix的經歷對計算機領域貢獻的不僅僅是技術,他給咱們提供了豐富而生動的教材。特別是Unix引起的哲學,讓今天的咱們依然受益匪淺。
說到Unix爲咱們所帶來的軟件開發的哲學,我必須要說一說。Unix遵循的原則是KISS(Keep it simple, stupid)。在http://en.wikipedia.org/wiki/Unix_philosophy 上有不少的基本上大同小異的Unix哲學,都是很經典的。
Doug McIlroy 是認爲UNIX的哲學是這樣的:三條哲學,簡明扼要,就是這三條哲學貫穿着整個Unix世界。尤爲是第一條「do one thing and do it well」真是至關精彩!
- Write programs that do one thing and do it well.
- Write programs to work together.
- Write programs to handle text streams, because that is a universal interface.
只要是Unix的程序員,他們會比別的程序員在任什麼時候候都會不停地強調着這三條哲學。
而《The Art of Unix Programming》總結了下面這些哲學,都是至理名言啊。
- Rule of Modularity: Write simple parts connected by clean interfaces.
- Rule of Clarity: Clarity is better than cleverness.
- Rule of Composition: Design programs to be connected to other programs.
- Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
- Rule of Simplicity: Design for simplicity; add complexity only where you must.
- Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
- Rule of Transparency: Design for visibility to make inspection and debugging easier.
- Rule of Robustness: Robustness is the child of transparency and simplicity.
- Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.
- Rule of Least Surprise: In interface design, always do the least surprising thing.
- Rule of Silence: When a program has nothing surprising to say, it should say nothing.
- Rule of Repair: When you must fail, fail noisily and as soon as possible.
- Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
- Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
- Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
- Rule of Diversity: Distrust all claims for 「one true way」.
- Rule of Extensibility: Design for the future, because it will be here sooner than you think.
X Windows 的設計者 Mike Gancarz 給出了下面九條哲學思想
- Small is beautiful.
- Make each program do one thing well.
- Build a prototype as soon as possible.
- Choose portability over efficiency.
- Store data in flat text files.
- Use software leverage to your advantage.
- Use shell scripts to increase leverage and portability.
- Avoid captive user interfaces.
- Make every program a filter.
在今天,這種思想依然被傳承着,在影響着世界上各個角落的每個程序員。