转载一篇王垠的博客——与之前《完全用Linux工作》态度的转变

这段时间受到很多人的来信。他们看了我很早以前写的推崇 Linux 的文章,想知道如何“抛弃 Windows,学习 Linux”。天知道他们在哪里找到那么老的文章,真是好事不出门…… 我觉得我有责任消除我以前的文章对人的误导,洗清我这个“Linux 狂热分子”的恶名。我觉得我已经写过一些澄清的文章了,可是怎么还是有人来信问 Linux 的问题。也许因为感觉到“舆论压力”,我把文章都删了。

简言之,我想对那些觉得 Linux 永远也学不会的“菜鸟”们说:

  1. Linux 和 Unix 里面包含了一些非常糟糕的设计。不要被 Unix 的教条主义者吓倒。学不会有些东西很多时候不是你的错,而是 Linux 的错,是“Unix 思想” 的错。不要浪费时间去学习太多工具的用法,钻研稀奇古怪的命令行。那些貌似难的,复杂的东西,特别要小心分析。

  2. Windows 避免了 Unix,Linux 和 Mac OS X 的很多问题。微软是值得尊敬的公司,是真正在乎程序开发工具的公司。我收回曾经对微软的鄙视态度。请菜鸟们吸收 Windows 设计里面好的东西。另外 Visual Studio 是非常好的工具,会带来编程效率的大幅度提升。请不要歧视 IDE。要正视 Emacs,VIM 等文本编辑器的局限性。当然,这些正面评价不等于说你应该为微软工作。就像我喜欢 iPhone,但是却不一定想给 Apple 工作一样。

  3. 学习操作系统最好的办法是学会(真正的)程序设计思想,而不是去“学习”各种古怪的工具。所有操作系统,数据库,Internet,以至于 WEB 的设计思想(和缺陷),几乎都能用程序语言的思想简单的解释。

先说说我现在对 Linux 和相关工具(比如 TeX)的看法吧。我每天上班都用 Linux,可是回家才不想用它呢。上班的时候,我基本上只是尽我所能的改善它,让它不要给我惹麻烦。Unix 有许许多多的设计错误,却被当成了教条,传给了一代又一代的程序员,恶性循环。Unix 的 shell,命令,配置方式,图形界面,都是相当糟糕的。每一个新版本的 Ubuntu 都会在图形界面的设计上出现新的错误,让你感觉历史怎么会倒退。其实这只是表面现象。Linux 所用的图形界面(X Window)在本质上几乎是没救的。我不想在这里细说 Unix 的缺点,在它出现的早期,已经有人写了一本书,名叫 Unix Hater’s Handbook,里面专门有一章叫做 The X-Windows Disaster。它分析后指出,X Window 貌似高明的 client-server 设计,其实并不像说的那么好。

这本书汇集了 Unix 出现的年代,很多人对它的咒骂。有趣的是,这本书有一个“反序言”,是 Unix 的创造者之一 Dennis Ritchie 写的。我曾经以为这些骂 Unix 的人都是一些菜鸟。他们肯定是智商太低,或者被 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 靠着自己的“廉价”,“宗教”和“哲学”,战胜了别的系统在设计上的先进,统治了程序员的世界。

如果你想知道这些“失败的”操作系统里面有哪些我们现在都还没有的先进技术,可以参考这篇文章:Oberon - The Overlooked Jewel。它介绍的是 Niklaus Wirth(也就是 Pascal 语言的设计者)的 Oberon 操作系统。

胜者为王,可是 Unix 其实是一个暴君,它不允许你批评它的错误。它利用其它程序员的舆论压力,让每一个系统设计上的错误,都被说成是用户自己的失误。你不敢说一个工具设计有毛病,因为如果别人听到了,就会以为你自己不够聪明,说你“人笨怪刀钝”。这就像是“皇帝的新装”里的人们,明明知道皇帝没穿衣服,还要说“这衣服这漂亮”!总而言之,“对用户友好”这个概念,在 Unix 的世界里是被歧视,被曲解的。Unix 的狂热分子很多都带有一种变态的“精英主义”。他们以用难用的工具为豪,鄙视那些使用“对用户友好”的工具的人。

我曾经强烈的推崇 FVWM,TeX 等工具,可是现在擦亮眼睛看来,它们给用户的界面,其实也是非常糟糕的设计,跟 Unix 一脉相承。他们把程序设计的许多没必要的细节和自己的设计失误,无情的暴露给用户。让用户感觉有那么多东西要记,仿佛永远也没法掌握它。实话说吧,当年我把 TeXbook 看了两遍,做完了所有的习题(包括最难的“double bend”习题)。几个月之后,几乎全部忘记干净。为什么呢?因为 TeX 的语言是非常糟糕的设计,它没有遵循程序语言设计的基本原则。

这里有一个鲜为人知的小故事。TeX 之所以有一个“扩展语言”,是 Scheme 的发明者 Guy Steele 的建议。那年夏天,Steele 在 Stanford 实习。他听说 Knuth 在设计一个排版系统,就强烈建议他使用一种扩展语言。后来 Knuth 采纳了他的建议。不幸的是 Steele 几个月后就离开了,没能帮助 Knuth 完成语言的设计。Knuth 老爹显然有我所说的那种“精英主义”,他咋总是设计一些难用的东西,写一些难懂的书? 谈 Linux,Windows 和 Mac

一个好的工具,应该只有少数几条需要记忆的规则,就像象棋一样。而这些源于 Unix 的工具却像是“魔鬼棋”或者“三国杀”,有太多的,无聊的,人造的规则。有些人鄙视图形界面,鄙视 IDE,鄙视含有垃圾回收的语言(比如 Java),鄙视一切“容易”的东西。他们却不知道,把自己沉浸在别人设计的繁复的规则中,是始终无法成为大师的。就像一个人,他有能力学会各种“魔鬼棋”的规则,却始终无法达到象棋大师的高度。所以,容易的东西不一定是坏的,而困难的东西也不一定是好的。学习计算机(或者任何其它工具),应该“只选对的,不选难的”。记忆一堆的命令,乌七八糟的工具用法,最后脑子里什么也不会留下。学习“原理性”的东西,才是永远不会过时的。

Windows 技术设计上的很多细节,也许在早期是同样糟糕的。但是它却向着更加结构化,更加简单的方向发展。Windows 的技术从 OLE,COM,发展到 .NET,再加上 Visual Studio 这样高效的编程工具,这些带来了程序员和用户效率的大幅度提高,避免了 Unix 和 C 语言的很多不必存在的问题。Windows 程序从很早的时候就能比较方便的交换数据。比如,OLE 让你可以把 Excel 表格嵌入到 Word 文档里面。不得不指出,这些是非常好的想法,是超越“Unix 哲学”的。相反,由于受到“Unix 哲学”的误导,Unix 的程序间交换数据一直以来都是用字符串,而且格式得不到统一,以至于很多程序连拷贝粘贴都没法正确进行。Windows 的“配置”,全都记录在一个中央数据库(注册表)里面,这样程序的配置得到大大的简化。虽然在 Win95 的年代,注册表貌似老是惹麻烦,但现在基本上没有什么问题了。相反,Unix 的配置,全都记录在各种稀奇古怪的配置文件里面,分布在系统的各个地方。你搞不清楚哪个配置文件记录了你想要的信息。每个配置文件连语法都不一样!这就是为什么用 Unix 的公司总是需要一个“系统管理员”,因为软件工程师们才懒得记这些麻烦的东西。

再来比较一下 Windows 和 Mac 吧。我认识一个 Adobe 的高级设计师。他告诉我说,当年他们把 Photoshop 移植到 Intel 构架的 Mac,花了两年时间。只不过换了个处理器,移植个应用程序就花了两年时间,为什么呢?因为 Xcode 比起 Visual Studio 真是差太多了。而 Mac OS X 的一些设计原因,让他们的移植很痛苦。不过他很自豪的说,当年很多人等了两年也没有买 Intel 构架的 Mac,就是因为他们在等待 Photoshop。最后他直言不讳的说,微软其实才是真正在乎程序员工具的公司。相比之下,Apple 虽然对用户显得友好,但是对程序员的界面却差很多。Apple 尚且如此,Linux 对程序员就更差了。可是有啥办法呢,有些人就是受虐狂。自己痛过之后,还想让别人也痛苦。就像当年的我。

我当然不是人云亦云。微软在程序语言上的造诣和投入,我看得很清楚。我只是通过别人的经历,来验证我已经早已存在的看法。所以一再宣扬别的系统都是向自己学习的 Apple 受到这样的评价,我也一点不惊讶。Mac OS X 毕竟是从 Unix 改造而来的,还没有到脱胎换骨的地步。我有一个 Macbook Air,一个 iPhone 5,和一个退役的,装着 Windows 7 的 T60。我不得不承认,虽然我很喜欢 Macbook 和 iPhone 的硬件,但我发现 Windows 在软件上的很多设计其实更加合理。

我为什么当年会鄙视微软?这很简单。我就是跟着一群人瞎起哄而已!他们说 Linux 能拯救我们,给我们自由。他们说微软是邪恶的公司…… 到现在我身边还有人无缘无故的鄙视微软,却不知道理由。可是 Unix 是谁制造的呢?是 AT&T。微软和 AT&T 哪个更邪恶呢?我不知道。但是你应该了解一下 Unix 的历史。AT&T 当年发现 Unix 有利可图,找多少人打了多少年官司?说微软搞垄断,其实 AT&T 早就搞过垄断了,还被拆散成了好几个公司。想想世界上还有哪一家公司,独立自主的设计出这从底至上全套家什:程序语言,编译器,IDE,操作系统,数据库,办公软件,游戏机,手机…… 我不得不承认,微软是值得尊敬的公司。

公司还不都一样,都是以利益为本的。我们程序员就不要被他们利用,作为利益斗争的炮眼啦。见到什么好就用什么,就学什么。自己学到的东西,又不属于那些垄断企业。我们都有自由的头脑。

当然我不是在这里打击 Linux 和 Mac 而鼓吹 Windows。这些系统的纷争基本上已经不关我什么事。我只是想告诉新人们,去除头脑里的宗教,偏激,仇恨和鄙视。每次仇恨一个东西,你就失去了向它学习的机会。

后记:“对用户友好”是一个值得研究,却又研究得非常不够的东西。很多 UI 的设计者,把东西设计的很漂亮,但是却不方便,不顺手。如果你想了解我认为怎样的设计才是“对用户友好的”,可以参考这篇博客

其实没必要一会儿吹捧这个,一会儿又抨击这个,任何事物,存在即合理,没有谁好谁坏,最起码让我们多了一个选择,选择用windows还是linux,这个完全由你自己决定,我们要用超越操作系统的眼光去审视windows和linux,不能带有情绪和偏见地站在一边然后去对比评价这两个操作系统,就像作者王垠一样,之前是站在linux的一边去对比评价这两个操作系统,现在又站在windows这一边去对比和评价这两者,必然有失偏颇,站在那一边,就觉得那个系统是好的,另一个就是不好的,这是一种简单的逻辑,显然王垠还没有超越到一个高度,还没有达到一个境界,只不过是一个跳梁小丑在那里不分是非地满腹骚言,却误导了一批又一批的不分是非的人罢了……

严重同意,走自己的路。

走自己的路 是最好的

严重同意,一个工具用了N年之后还要查manual,不得不说是真失败,windows我从来没有看过一页help照样用得很好。
Linux之所以流行是因为开源,微软之所以被称为邪恶是因为他赚钱。话说作为一个公司,谷歌还是值得称道的,有社会责任感的公司。

:3_43:LZ帖子的字体颜色看着太难受了 只好链接到原文看。。

直接从博客复制过来的,不知道为什么,全部带有黑色背景,所以只有改颜色了,不然看不清楚

:3_52:粘贴的时候选择粘贴纯文本也不行么?

额 ,是我的错。没试过

我们在这讨论linux,不代表windows很差。

:3_52:如果我的办法可行的话 LZ可以把颜色改改 方便以后的阅读!O(∩_∩)O~

从国内的用户体验(包括生态环境)来讲,Windows远胜于Linux,这是不争的事实。我们目前还是在追赶,至于超越,尚需时日。

他爱怎么想怎么想,不要以为自己宗教别人就也宗教,太把自己当盘菜了。
我用Linux,主要就是觉得Linux稳定,不用老折腾,很多使用习惯能够长期保留所以才用的,就是觉得这些特点适合我。不可否认Linux的入门门槛确实远高于Windows,但对于入门之后带来的回报也是巨大的。你玩Windows也能玩出什么花,街边的大妈大婶用Windows都可能比专业的你熟。
我觉得实际上Linux和Windows各自的优缺点正好决定了它们分别适用于不同的用户群:Linux比较适用于专业用户,不太适合普通用户,Linux系统今后确实应该在用户友好方面加强。Windows比较适合普通用户,没什么门槛,上手就能用,但稳定性确实差,经常需要重装系统。
看看每年的top 500,有多少Unix/Linux的系统,有多少Windows的系统,这也说明目前它们适用于不同的领域。Windows用户友好是事实,但象超算这种需要高性能的领域不需要或不那么迫切地需要用户友好,否则极有可能牺牲性能。大妈们就是炒个股,玩个牌,对性能没有很高的要求,好用才是关键。
其实两个系统也是在互相学习的:Windows为什么后来开发Power shell,这是跟谁学的?这几年,各种Linux发行版在桌面上的改进实际上是很大的,尽管和Windows有一定差距。

其实,虽然我觉的他有点像跳梁小丑,一会站在linux、一会儿又跑到windows,不过他说的有些话真的说出了我的心声,为什么有些工具、命令行搞得如此庞杂,难道就不可以把常见问题弄的简单一点,让小白用户也过来瞧瞧?把问题抛向用户,让用户去无休止的折腾去让它可以用,真的不是一个好的设计方式

“Unix 的设计几乎完全没有一致性和原则。”
图灵奖怎么得的

个人感觉如果希望普及linux,就必须要改善易用性。

:lol人长大了成熟了。就不会像原来那样的偏激了。现在的主流操作系统都有自身的优点与缺点也有相应的用户群。只要自身的生态还在那么都会越发展越好的。

看到这文章,忍不住回复。
我以前在这论坛说过,windows只要求用户认识字和会用鼠标。
就连学校的计算机课程也只是教开关机、键盘键位分布、鼠标使用、打开关闭文件、双击安装软件等等。其它计算机课程都是在教专业软件的使用,比如办公软件和photoshop。
我在windows下删除文件的时候,习惯只按delete键,因为怕误操作,设置一个确认界面,然后只要回车就可以删掉了。但是在ubuntukylin找不到设置的方法,上来提问,回答的人要我改变习惯,要么shift+delete,要么只能先删除到回收站,再清空回收站。首选项里的“启用绕过回收站的‘删除’命令”不管用。很多人都说linux定制性很强,当我再固执的问,我怎么才能保持我的习惯呢?没人回答了,可能高手不屑于回答这种“类似”“什么是拖动鼠标”的问题。但是没人回答给我的感觉是–高手也不会!
可能有人说用KDE定制性很强,可是在安装软件等方面也存在问题。并不是所有的软件都是双击就可以的,有一些需要敲命令、编译,然而不同的软件需要的命令也不完全一样。
我说要提高ubuntukylin的市场占有率,让普通的用户也用ubuntukylin,需要弱化命令行的地位,甚至要模仿windows的界面。有人告诉我,还是有很多服务器用linux的,可是我认为维护服务器的人员必须要受过培训,不可能随便找一个人过去就能胜任。正因为受过培训,他才会使用linux。而且不敢保证家庭电脑在运行的时候不突然断电,想必各位专业人士都明白突然断电对linux的影响吧。还有人说(不只在这个论坛),如果界面跟windows的一样,ubuntu和windows还有什么区别?我倒想反问一句,难道ubuntu和windows的差别仅仅在界面上吗?这显然不是。
很多XP用户甚至不愿意用跟XP界面相似、按钮位置一样的win 7。不管是谁的问题导致这种现象,至少说明一点,操作系统需要在一定程度上迁就用户的习惯。
退一步来说,就算所有的中国用户都使用ubuntukylin,那么谁能保证所有的用户,尤其是数量众多的只用电脑看新闻、看电影电视剧、游戏、听歌、聊天、偷菜的人,去花时间学习命令来安装自己想要的软件呢?更何况,安装软件后不一定能正常使用,甚至有时候还会导致不能开机。
前几天我刚装ubuntukylin 14.04后,按照在这个论坛找的安装显卡驱动的方法,敲完命令重启,显示过tty1和用户名后一直黑屏,按键也没反应。重启进入GRUB修复,也不行。只能重新安装系统,使用附加驱动安装显卡驱动。可是我以前用windows安装显卡驱动的时候,如果中途出错,安装程序会自动把驱动退回到以前的状态,也不用重启系统。
不过linux确实有很多有点,比如电脑开很长时间也不会显得运行速度变慢,这也是我最喜欢的一点。

作者的观点先后发生变化,不是说作者倒戈或者没有主见。而这个过程正是我们需要学习的,作者最后得出的结论也是我们需要借鉴的。
每个人都会说好听的:学习别人的优点,改掉自己的缺点。
可是真正做起来,难!

有一个系统可以和WINDOWS竞争才是好的。