這段時間受到很多人的來信吵瞻。他們看了我很早以前寫的推崇 Linux 的文章,想知道如何“拋棄 Windows甘磨,學(xué)習(xí) Linux”橡羞。天知道他們在哪里找到那么老的文章,真是好事不出門…… 我覺得我有責(zé)任消除我以前的文章對人的誤導(dǎo)济舆,洗清我這個“Linux 狂熱分子”的惡名卿泽。我覺得我已經(jīng)寫過一些澄清的文章了,可是怎么還是有人來信問 Linux 的問題滋觉。也許因?yàn)楦杏X到“輿論壓力”签夭,我把文章都刪了。
簡言之椎侠,我想對那些覺得 Linux 永遠(yuǎn)也學(xué)不會的“菜鳥”們說:
Linux 和 Unix 里面包含了一些非常糟糕的設(shè)計(jì)第租。不要被 Unix 的教條主義者嚇倒。學(xué)不會有些東西很多時候不是你的錯我纪,而是 Linux 的錯慎宾,是“Unix 思想” 的錯。不要浪費(fèi)時間去學(xué)習(xí)太多工具的用法宣羊,鉆研稀奇古怪的命令行璧诵。那些貌似難的,復(fù)雜的東西仇冯,特別要小心分析之宿。
Windows 避免了 Unix,Linux 和 Mac OS X 的很多問題苛坚。微軟是值得尊敬的公司比被,是真正在乎程序開發(fā)工具的公司色难。我收回曾經(jīng)對微軟的鄙視態(tài)度。請菜鳥們吸收 Windows 設(shè)計(jì)里面好的東西等缀。另外 Visual Studio 是非常好的工具枷莉,會帶來編程效率的大幅度提升。請不要歧視 IDE尺迂。要正視 Emacs笤妙,VIM 等文本編輯器的局限性。當(dāng)然噪裕,這些正面評價不等于說你應(yīng)該為微軟工作蹲盘。就像我喜歡 iPhone,但是卻不一定想給 Apple 工作一樣膳音。
學(xué)習(xí)操作系統(tǒng)最好的辦法是學(xué)會(真正的)程序設(shè)計(jì)思想召衔,而不是去“學(xué)習(xí)”各種古怪的工具。所有操作系統(tǒng)祭陷,數(shù)據(jù)庫苍凛,Internet,以至于 WEB 的設(shè)計(jì)思想(和缺陷)兵志,幾乎都能用程序語言的思想簡單的解釋醇蝴。
先說說我現(xiàn)在對 Linux 和相關(guān)工具(比如 TeX)的看法吧。我每天上班都用 Linux毒姨,可是回家才不想用它呢哑蔫。上班的時候,我基本上只是盡我所能的改善它弧呐,讓它不要給我惹麻煩闸迷。Unix 有許許多多的設(shè)計(jì)錯誤,卻被當(dāng)成了教條俘枫,傳給了一代又一代的程序員腥沽,惡性循環(huán)。Unix 的 shell鸠蚪,命令今阳,配置方式,圖形界面茅信,都是相當(dāng)糟糕的盾舌。每一個新版本的 Ubuntu 都會在圖形界面的設(shè)計(jì)上出現(xiàn)新的錯誤,讓你感覺歷史怎么會倒退蘸鲸。其實(shí)這只是表面現(xiàn)象妖谴。Linux 所用的圖形界面(X Window)在本質(zhì)上幾乎是沒救的。我不想在這里細(xì)說 Unix 的缺點(diǎn),在它出現(xiàn)的早期膝舅,已經(jīng)有人寫了一本書嗡载,名叫 Unix Hater's Handbook,里面專門有一章叫做 The X-Windows Disaster仍稀。它分析后指出洼滚,X Window 貌似高明的 client-server 設(shè)計(jì),其實(shí)并不像說的那么好技潘。
這本書匯集了 Unix 出現(xiàn)的年代遥巴,很多人對它的咒罵。有趣的是崭篡,這本書有一個“反序言”挪哄,是 Unix 的創(chuàng)造者之一 Dennis Ritchie 寫的吧秕。我曾經(jīng)以為這些罵 Unix 的人都是一些菜鳥琉闪。他們肯定是智商太低,或者被 Windows 洗腦了砸彬,不能理解 Unix 的高明設(shè)計(jì)才在那里罵街〉弑校現(xiàn)在理解了程序語言的設(shè)計(jì)原理之后,才發(fā)現(xiàn)他們說的那些話里面居然大部分是實(shí)話砂碉!其實(shí)他們里面有些人在當(dāng)年就是世界頂尖的編程高手蛀蜜,自己寫過操作系統(tǒng)和編譯器,功底不亞于 Unix 的創(chuàng)造者增蹭。在當(dāng)年他們就已經(jīng)使用過設(shè)計(jì)更加合理的系統(tǒng)滴某,比如 Multics,Lisp Machine 等滋迈。
可惜的是霎奢,在現(xiàn)在的操作系統(tǒng)書籍里面,Multics 往往只是被用來襯托 Unix 的“簡單”和偉大饼灿。Unix 的書籍喜歡在第一章講述這樣的歷史:“Multics 由于設(shè)計(jì)過于復(fù)雜幕侠,試圖包羅萬象,而且價格昂貴碍彭,最后失敗了晤硕。” 可是 Multics 失敗了嗎庇忌?Multics舞箍,Oberon,IBM System/38皆疹, Lisp Machine疏橄,…… 在幾十年前就擁有了 Linux 現(xiàn)在都還沒有的好東西。Unix 里面的東西墙基,什么虛擬內(nèi)存软族,文件系統(tǒng)刷喜,…… 基本上都是從 Multics 學(xué)來的。Multics 的機(jī)器立砸,一直到 2000 年都還在運(yùn)行掖疮。Unix 不但“竄改”了歷史教科書,而且似乎永遠(yuǎn)不吸取教訓(xùn)颗祝,到現(xiàn)在還沒有實(shí)現(xiàn)那些早期系統(tǒng)早就有的好東西浊闪。Unix 的設(shè)計(jì)幾乎完全沒有一致性和原則。各種工具程序功能重復(fù)螺戳,冗余搁宾,沒法有效地交換數(shù)據(jù)【笥祝可是最后 Unix 靠著自己的“廉價”盖腿,“宗教”和“哲學(xué)”,戰(zhàn)勝了別的系統(tǒng)在設(shè)計(jì)上的先進(jìn)损同,統(tǒng)治了程序員的世界翩腐。
如果你想知道這些“失敗的”操作系統(tǒng)里面有哪些我們現(xiàn)在都還沒有的先進(jìn)技術(shù),可以參考這篇文章:Oberon - The Overlooked Jewel膏燃。它介紹的是 Niklaus Wirth(也就是 Pascal 語言的設(shè)計(jì)者)的 Oberon 操作系統(tǒng)茂卦。
勝者為王,可是 Unix 其實(shí)是一個暴君组哩,它不允許你批評它的錯誤等龙。它利用其它程序員的輿論壓力,讓每一個系統(tǒng)設(shè)計(jì)上的錯誤伶贰,都被說成是用戶自己的失誤蛛砰。你不敢說一個工具設(shè)計(jì)有毛病,因?yàn)槿绻麆e人聽到了幕袱,就會以為你自己不夠聰明暴备,說你“人笨怪刀鈍”。這就像是“皇帝的新裝”里的人們们豌,明明知道皇帝沒穿衣服涯捻,還要說“這衣服這漂亮”!總而言之望迎,“對用戶友好”這個概念障癌,在 Unix 的世界里是被歧視,被曲解的辩尊。Unix 的狂熱分子很多都帶有一種變態(tài)的“精英主義”涛浙。他們以用難用的工具為豪,鄙視那些使用“對用戶友好”的工具的人。
我曾經(jīng)強(qiáng)烈的推崇 FVWM轿亮,TeX 等工具疮薇,可是現(xiàn)在擦亮眼睛看來,它們給用戶的界面我注,其實(shí)也是非常糟糕的設(shè)計(jì)按咒,跟 Unix 一脈相承。他們把程序設(shè)計(jì)的許多沒必要的細(xì)節(jié)和自己的設(shè)計(jì)失誤但骨,無情的暴露給用戶励七。讓用戶感覺有那么多東西要記,仿佛永遠(yuǎn)也沒法掌握它奔缠。實(shí)話說吧掠抬,當(dāng)年我把 TeXbook 看了兩遍,做完了所有的習(xí)題(包括最難的“double bend”習(xí)題)校哎。幾個月之后两波,幾乎全部忘記干凈。為什么呢贬蛙?因?yàn)?TeX 的語言是非常糟糕的設(shè)計(jì)雨女,它沒有遵循程序語言設(shè)計(jì)的基本原則。
這里有一個鮮為人知的小故事阳准。TeX 之所以有一個“擴(kuò)展語言”,是 Scheme 的發(fā)明者 Guy Steele 的建議馏臭。那年夏天野蝇,Steele 在 Stanford 實(shí)習(xí)。他聽說 Knuth 在設(shè)計(jì)一個排版系統(tǒng)括儒,就強(qiáng)烈建議他使用一種擴(kuò)展語言绕沈。后來 Knuth 采納了他的建議。不幸的是 Steele 幾個月后就離開了帮寻,沒能幫助 Knuth 完成語言的設(shè)計(jì)乍狐。Knuth 老爹顯然有我所說的那種“精英主義”,他咋總是設(shè)計(jì)一些難用的東西固逗,寫一些難懂的書浅蚪?
一個好的工具,應(yīng)該只有少數(shù)幾條需要記憶的規(guī)則烫罩,就像象棋一樣惜傲。而這些源于 Unix 的工具卻像是“魔鬼棋”或者“三國殺”,有太多的贝攒,無聊的盗誊,人造的規(guī)則。有些人鄙視圖形界面,鄙視 IDE哈踱,鄙視含有垃圾回收的語言(比如 Java)荒适,鄙視一切“容易”的東西。他們卻不知道开镣,把自己沉浸在別人設(shè)計(jì)的繁復(fù)的規(guī)則中吻贿,是始終無法成為大師的。就像一個人哑子,他有能力學(xué)會各種“魔鬼棋”的規(guī)則舅列,卻始終無法達(dá)到象棋大師的高度。所以卧蜓,容易的東西不一定是壞的帐要,而困難的東西也不一定是好的。學(xué)習(xí)計(jì)算機(jī)(或者任何其它工具)弥奸,應(yīng)該“只選對的榨惠,不選難的”。記憶一堆的命令盛霎,烏七八糟的工具用法赠橙,最后腦子里什么也不會留下。學(xué)習(xí)“原理性”的東西愤炸,才是永遠(yuǎn)不會過時的期揪。
Windows 技術(shù)設(shè)計(jì)上的很多細(xì)節(jié),也許在早期是同樣糟糕的规个。但是它卻向著更加結(jié)構(gòu)化凤薛,更加簡單的方向發(fā)展。Windows 的技術(shù)從 OLE诞仓,COM缤苫,發(fā)展到 .NET,再加上 Visual Studio 這樣高效的編程工具墅拭,這些帶來了程序員和用戶效率的大幅度提高活玲,避免了 Unix 和 C 語言的很多不必存在的問題。Windows 程序從很早的時候就能比較方便的交換數(shù)據(jù)谍婉。比如舒憾,OLE 讓你可以把 Excel 表格嵌入到 Word 文檔里面。不得不指出屡萤,這些是非常好的想法珍剑,是超越“Unix 哲學(xué)”的。相反死陆,由于受到“Unix 哲學(xué)”的誤導(dǎo)招拙,Unix 的程序間交換數(shù)據(jù)一直以來都是用字符串唧瘾,而且格式得不到統(tǒng)一,以至于很多程序連拷貝粘貼都沒法正確進(jìn)行别凤。Windows 的“配置”饰序,全都記錄在一個中央數(shù)據(jù)庫(注冊表)里面,這樣程序的配置得到大大的簡化规哪。雖然在 Win95 的年代求豫,注冊表貌似老是惹麻煩,但現(xiàn)在基本上沒有什么問題了诉稍。相反蝠嘉,Unix 的配置,全都記錄在各種稀奇古怪的配置文件里面杯巨,分布在系統(tǒng)的各個地方蚤告。你搞不清楚哪個配置文件記錄了你想要的信息。每個配置文件連語法都不一樣服爷!這就是為什么用 Unix 的公司總是需要一個“系統(tǒng)管理員”杜恰,因?yàn)檐浖こ處焸儾艖械糜涍@些麻煩的東西。
再來比較一下 Windows 和 Mac 吧仍源。我認(rèn)識一個 Adobe 的高級設(shè)計(jì)師心褐。他告訴我說,當(dāng)年他們把 Photoshop 移植到 Intel 構(gòu)架的 Mac笼踩,花了兩年時間逗爹。只不過換了個處理器,移植個應(yīng)用程序就花了兩年時間戳表,為什么呢桶至?因?yàn)?Xcode 比起 Visual Studio 真是差太多了。而 Mac OS X 的一些設(shè)計(jì)原因匾旭,讓他們的移植很痛苦。不過他很自豪的說圃郊,當(dāng)年很多人等了兩年也沒有買 Intel 構(gòu)架的 Mac价涝,就是因?yàn)樗麄冊诘却?Photoshop。最后他直言不諱的說持舆,微軟其實(shí)才是真正在乎程序員工具的公司色瘩。相比之下,Apple 雖然對用戶顯得友好逸寓,但是對程序員的界面卻差很多居兆。Apple 尚且如此,Linux 對程序員就更差了竹伸∧嗥埽可是有啥辦法呢簇宽,有些人就是受虐狂。自己痛過之后吧享,還想讓別人也痛苦魏割。就像當(dāng)年的我。
我當(dāng)然不是人云亦云钢颂。微軟在程序語言上的造詣和投入钞它,我看得很清楚。我只是通過別人的經(jīng)歷殊鞭,來驗(yàn)證我已經(jīng)早已存在的看法遭垛。所以一再宣揚(yáng)別的系統(tǒng)都是向自己學(xué)習(xí)的 Apple 受到這樣的評價,我也一點(diǎn)不驚訝操灿。Mac OS X 畢竟是從 Unix 改造而來的锯仪,還沒有到脫胎換骨的地步。我有一個 Macbook Air牲尺,一個 iPhone 5卵酪,和一個退役的,裝著 Windows 7 的 T60谤碳。我不得不承認(rèn)溃卡,雖然我很喜歡 Macbook 和 iPhone 的硬件,但我發(fā)現(xiàn) Windows 在軟件上的很多設(shè)計(jì)其實(shí)更加合理蜒简。
我為什么當(dāng)年會鄙視微軟瘸羡?這很簡單。我就是跟著一群人瞎起哄而已搓茬!他們說 Linux 能拯救我們犹赖,給我們自由。他們說微軟是邪惡的公司…… 到現(xiàn)在我身邊還有人無緣無故的鄙視微軟卷仑,卻不知道理由峻村。可是 Unix 是誰制造的呢锡凝?是 AT&T粘昨。微軟和 AT&T 哪個更邪惡呢?我不知道窜锯。但是你應(yīng)該了解一下 Unix 的歷史张肾。AT&T 當(dāng)年發(fā)現(xiàn) Unix 有利可圖,找多少人打了多少年官司锚扎?說微軟搞壟斷吞瞪,其實(shí) AT&T 早就搞過壟斷了,還被拆散成了好幾個公司驾孔。想想世界上還有哪一家公司芍秆,獨(dú)立自主的設(shè)計(jì)出這從底至上全套家什:程序語言惯疙,編譯器,IDE浪听,操作系統(tǒng)螟碎,數(shù)據(jù)庫,辦公軟件迹栓,游戲機(jī)掉分,手機(jī)…… 我不得不承認(rèn),微軟是值得尊敬的公司克伊。
公司還不都一樣酥郭,都是以利益為本的。我們程序員就不要被他們利用愿吹,作為利益斗爭的炮灰啦不从。見到什么好就用什么,就學(xué)什么犁跪。自己學(xué)到的東西椿息,又不屬于那些壟斷企業(yè)。我們都有自由的頭腦坷衍。
當(dāng)然我不是在這里打擊 Linux 和 Mac 而鼓吹 Windows寝优。這些系統(tǒng)的紛爭基本上已經(jīng)不關(guān)我什么事。我只是想告訴新人們枫耳,去除頭腦里的宗教乏矾,偏激,仇恨和鄙視迁杨。每次仇恨一個東西钻心,你就失去了向它學(xué)習(xí)的機(jī)會。
后記:“對用戶友好”是一個值得研究铅协,卻又研究得非常不夠的東西捷沸。很多 UI 的設(shè)計(jì)者,把東西設(shè)計(jì)的很漂亮狐史,但是卻不方便亿胸,不順手。如果你想了解我認(rèn)為怎樣的設(shè)計(jì)才是“對用戶友好的”预皇,可以參考這篇博客《什么是“對用戶友好”》