简言之,我想对那些觉得 Linux 永远也学不会的“菜鸟”们说:
1. Linux 和 Unix 里面包含了一些非常糟糕的设计。学不会有些东西不是你的错,是 Linux 的错,是“Unix 思想” 的错。不要浪费时间去学习它们的太多东西。那些貌似难的,复杂的东西,特别要小心分析。
2. Windows 避免了 Unix,Linux 和 Mac OS X 的很多问题。微软是值得尊敬的公司,是真正在乎程序开发工具的公司。我收回曾经对微软的鄙视态度。请菜鸟们吸收 Windows 设计里面好的东西。
3. 学习操作系统最好的办法是学会(真正的)程序设计,而不是去“学习”各种稀奇古怪的工具。所有操作系统,数据库,Internet,以至于 WEB 的设计思想(和缺陷),几乎都能用程序语言的设计思想简单的解释。
先说说我现在对 Linux 和相关工具(比如 TeX)的看法吧。我每天上班都用 Linux,可是回家才不想用它呢。上班的时候,我基本上只是“忍受”着它,尽我所能的改善它。Unix 有许多的设计错误,却被当成了圣经,传给了一代又一代的程序员。Unix 的 shell,命令,配置方式,图形界面,都是相当糟糕的。每一个新版本的 Ubuntu 都会在图形界面的设计上出现新的错误,让你感觉历史怎么会倒退。但是这只是表面现象。Linux 的图形界面(X window)在本质上几乎是不可治愈的恶疾。我不想在这里细说 Unix 的缺点,在它出现的早期,已经有人写了一本书,名叫 Unix Hater’s Handbook,里面专门有一章叫做 The X-Windows Disaster。
当年我执着于 Linux 的时候就有人向我推荐这本书。他汇集了 Unix 出现的年代,很多人对它的唾骂,他们专门设立了一个 mailing-list 叫 “unix-haters”。我还以为这是一些菜鸟,他们肯定是智商太低,或者被 Windows 洗脑了,不能理解 Unix 的高明设计才在那里骂街。现在理解了程序语言的设计原理之后,我才发现,他们说的那些话里面居然大部分是实话!而这里面有些人其实是是世界顶尖的编程高 手,自己写过操作系统,功底不亚于 Unix 的创造者。在当年他们就已经使用过设计更加合理的系统,比如 Multics,Lisp Machine 等。可惜的是,在现在的操作系统书籍里面,Multics 往往只是被用来衬托 Unix 的“简单”和伟大。Unix 的书籍喜欢在第一章讲述这样的历史:“Multics 由于设计过于复杂,试图包罗万象,而且价格昂贵,最后失败了。” 可是 Multics 失败了吗?不。Multics,Oberon,IBM System/38, Lisp Machine,…… 在几十年前就拥有了 Linux 现在都还没有的好东西。Unix 里面的东西,什么虚拟内存,文件系统,…… 基本上都是从 Multics 学来的。Multics 的机器,一直到 2000 年都还在运行。Unix 不但“窜改”了历史教科书,而且似乎永远不吸取教训,到现在还没有实现那些早期系统早就有的好东西。最后 Unix 依靠自己的“宗教”和“哲学”,战胜了别的系统在设计上的先进,统治了程序员的世界。胜者为王,可是 Unix 其实是一个暴君,它倒行逆施,不允许你批评它的错误。它利用其它程序员的舆论压力,让每一个系统设计上的错误,都被说成是用户自己的失误。
我曾经强烈的推崇 FVWM,TeX 等工具,可是现在擦亮眼睛看来,它们给用户的界面,其实也是非常糟糕的,跟 Unix 一脉相承。他们把程序设计的许许多多的细节,无情的暴露给用户。让用户感觉有那么多东西要记,仿佛永远也没法完全操纵它。实话说吧,当年我把 TeXbook 看了两遍,做完了所有的习题(包括最难的“double bend”习题)。几个月之后,几乎全部忘记干净。为什么呢?因为 TeX 的语言其实是非常糟糕的设计。它的设计者几乎完全不明白程序语言设计的基本原则,不明白什么叫做“抽象”。
一个好的工具,应该只有少数几条需要记忆的规则,就像象棋一样。而这些源于 Unix 的工具却像是“魔鬼棋”或者“三国杀”,有太多的,无聊的,人造的“规则”和“特殊技”。有些人鄙视图形界面,鄙视 IDE,鄙视垃圾回收的语言(比如 Java),鄙视一切“容易”的东西。他们却不知道,把自己沉浸在别人设计的繁复的规则中,是始终无法成为大师的。就像一个人有能力学会各种“魔鬼棋”的 规则,却始终无法达到象棋大师的思维高度,因为魔鬼棋本身就是低劣的设计,低级趣味。所以,容易的东西不一定是坏的,而困难的东西也不一定是好的。学习计 算机或者任何其它工具,应该“只选对的,不选难的”。记忆一堆的命令,乌七八糟的工具用法,配置方法,最后脑子里什么也不会留下。学习“原理性”的东西, 才是永远不会过时的。
我并不是说 Windows 好很多。技术设计上的很多细节,也许它在早期是同样糟糕的。但是它却向着更加结构化,更加简单的方向发展。我认识一个 Adobe 的高级设计师。他告诉我,当年他们把 Photoshop 移植到 Intel 构架的 Mac,花了两年时间。只不过系统换了个处理器,移植个程序居然花了两年时间。为什么呢?因为 Xcode 比起 Visual Studio 实在差太多了。而 Mac OS X 的很多设计,让他们的移植痛苦不堪。不过他很自豪的说,当年很多人等了两年才买 Intel 构架的 Mac,就是因为他们在等待 Photoshop。最后他直言不讳的说(他明知我有个 Mac,很可能是个 Apple 粉丝),微软其实才是真正在乎程序员的公司。相比之下,Apple 虽然对用户显得友好,但是对程序员的界面却差很多。Apple 尚且如此,Linux 对程序员就更差了。可是有啥办法呢,有些人就是受虐狂。自己痛过之后,还想让别人也痛苦。就像当年的我,别的系统里好的东西不学,仅推崇一些难用,难配置 的工具。
我当然不是人云亦云。微软在程序语言上的造诣,我看得很清楚。我只是通过别人的经历,来验证自己早已存在的看法。实际上是我主动问了他这个问题: “你如何比较在 Windows 和 Mac 下的 Photoshop 开发”。所以一再宣扬别的系统都是向自己学习的 Apple 受到这样的评价,我也一点不惊讶。Mac OS X 毕竟是从 Unix 改造而来的。我有一个 Macbook Air,一个 iPhone 5,和一个退役的,装着 Windows 7 的 T60。我不得不承认,虽然我很喜欢 Macbook 和 iPhone 的硬件(当然很多是别人帮它造的),但我发现 Windows 在软件上的很多设计其实更加合理。
说实话,我真的搞不懂为什么我当年会鄙视微软。我只是跟着一些人瞎起哄而已。现在我身边还有一些人鄙视微软。甚至在 Indiana 的时候,有很多教授制造一种“使用 Unix 的学生高人一等”的气氛。微软到底犯着谁了啊?中国人民到底有几个用 Windows 付了钱的呢 漫谈
当然我不是在这里打击 Linux 和 Mac 而鼓吹 Windows。这些系统的纷争基本上已经不关我什么事。我只是想告诉新人们,去除头脑里的宗教,偏激,仇恨和鄙视。东西就是东西,是低人一等的。人完全没必要去崇拜或者鄙视一个东西。