2012年6月4日 星期一

windows和unix的文化的本質的區別


看過很多關於Unix/LinuxWindow之爭的文章。即使是我這麼偏愛Unix/Linux的人,都會覺得那些文章中的絕大多數太過偏激,要麼把Windows貶得一無是處,要麼把Windows美化得白璧無瑕。 
  我的工作不是windows程式設計,我也很不喜歡Windows程式設計,可我的日常工作生活仍然離不開Windows。即使像我這樣的程式師,讓我在Linux/Unix下配置一台印表機,或者安裝一個音效卡,也是讓我頭疼的事情。Windows之所以如此流行,決不是偶然,有它內在的深刻原因。Unix/Linux的設計很優美,實現也很優秀,但是為什麼在某些領域(尤其是桌面系統)幹不過WindowsUnix/Linux社區的人對自己的技術水準一向非常自負,為什麼十多年過去了還沒能取Windows而代之?這些問題我回答不了,但我的直覺和唯物辯證法都告訴我,任何一個事物都有對立統一的兩個方面,Windows也有它的優點,Unix/Linux也有它不盡人意的地方。 
  最近看《Joel on Software》專欄,發現這個專欄作者發佈在2003年年底的一篇文,把這個問題講得一清二楚,態度公允,分析深入,值得一讀,對系統設計來說也很有指導意義。為了給自己加深印象,節選其中一部分翻譯,做筆記。 
  UnixWindows從功能上看越來越相似,剩下的不同僅僅是文化差異。舉個例子:我們都要吃東西。大洋彼岸的人們用筷子,吃生魚片就米飯;但我們用手拿著麵包,就著牛肉吃。文化差異並不意味著美國人消化不了生魚片,或者日本人消化不了麥當勞的漢堡;實際上美國很多人吃生魚片,日本也有很多人吃漢堡包。但文化差異確實意味著,一個美國人第一次踏上東京的土地時,總會覺得這地方怪裡怪氣。儘管哲學上講,所有的人本質相同,都會戀愛工作唱歌死亡,美國人和日本人仍然很難適應對方國家的廁所佈局。 
  UnixWindows程式師的文化差異是什麼呢?我們暫且不細說這裡面的細枝末節,最重要的一點差異是:Unix文化重視那些對程式師有用的代碼,Windows文化重視那些對非程式師有用的代碼。這麼說有點簡化,但最大的區別的確就是這一點:我們是為其他程式師設計程式,還是為最終使用者設計程式?此外的任何問題都是對這個問題的注腳。 
  20世紀60年代末,Unix剛剛誕生,Unix社區的核心文化正在形成,當時的電腦沒有最終使用者。那時的電腦,以及電腦的CPU時間,都很昂貴,都僅僅用在很專業的學術領域。學習電腦就意味著學習程式設計,而不是像現在這樣,學習使用應用軟體也是學習電腦的一種方式。作為現代的最終用戶,你可能根本不會程式設計,而仍然能用電腦做許多事情。但上世紀60年代末,尤其對Unix社區來說,用電腦就是程式設計Windows被製作出來的時候,唯一的目標是出售盡可能多的拷貝,以贏得更多利潤。每家的每張桌子上都有一台安裝了Windows的電腦Windows開發小組的理想,這一理想為windows設定了核心價值觀:對最終用戶來說更容易使用,但顯然,絕大多數最終用戶不是程式師。Windows開發過程並沒有把方便其他程式師作為目標。 
  例如,Unix的一個重要原則就是清晰區分策略和機制。該原則源於X系統的設計。(虎注:XUnix系統上的圖形化使用者介面的基礎設施,其設計者明確提出,X實現的是機制,不是策略”——X是一個通用圖形引擎,使用者介面風格的選擇,應該是toolkit以及系統中另外一些級別上的決策。策略和機制都會有演進,但是他們變化的速度不同:策略的變化一般比較快,基本機制的變化則比較慢。圖形化使用者介面的風格經常變動,但是用於顯示使用者介面的基本光柵操作——比如在螢幕上畫點/畫線——則沒有太多變動餘地。)清晰區分策略和機制這一Unix文化中的基本原則導致了Unix上圖形化使用者介面風格的多樣性。Unix世界裡從未就使用者介面工作方式的全部細節達成一致,並且他們認為這沒什麼不對的,Unix文化並且還尊重這種多樣性。但是對一般的最終用戶來說,在兩個應用程式中,應該能用相同的操作(點擊相同的按鈕或者功能表/快速鍵)達到相同的目的,這樣的系統上的應用程式才是易學易用的。也正是由於上述區別,雖然Unix開發者為給Unix做一個漂亮的使用者介面已經努力了二十年,我們還是看到最大的Linux廠商的CEO告訴大家:家庭用戶還是用windows好了 
  Linux沒准永遠都不會成為一個好的桌面作業系統,因為Unix文化所看重的那些東西本身,就妨礙了Linux成為一個面向最終使用者的桌面系統。OS/X就是一個例證:Apple終於創造出了面向最終用戶的Unix,唯一的原因是,Apple的工程師和領導者都堅定地以最終用戶為核心,而完全放棄了Unix文化中最基本的以程式師為核心的理念。他們甚至把Unix的核心目錄改名了——“bin””lib”變成了對一般用戶來說更通俗易懂的”application””library”

沒有留言: