Linux从来就不是一个玩具,它是天才UNIX的后代。UNIX是自晶体管发明以来最伟大的发明,它从诞生那一天开始就比Windows的设计出色。
你要体会什么叫做”设计”,一个糟糕的设计并不是到后来缝缝补补就可以变好的,而一个出色的设计,不但可以以不变应万变,而且可以影响到后来者。一 个出色的设计配上一个出色的实现,那就是非常出色的发明。Linux就是这样的一个出色的发明。Linux并不需要追赶Windows,也不需要打垮微软。它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。
Unix是简单的,你不需要成为一个天才也能理解这种简单。
UNIX的设计者Dennis Ritchie说:”Unix is simple. It just takes a genius to understand its simplicity.” 但是我不这么认为,因为我不是一个天才,但是我却勇敢的把Windows完全删除掉,遇到不明白的事情的时候努力用UNIX的方式去解决,而不是寻求Windows的帮助。现在我体会到了UNIX的思想和好处,我可以用比Windows高效几倍的效率工作。因为我相信这样的信念:”Windows能办到的事Linux一定能办到,而且办的更好。”
这小节开头的话应该改成:”Unix是简单的,你不需要成为一个天才或是计算机专家。但是在这个冲斥着Windows错误观念的世界,你需要信念和勇气才能理解它的简单。” 我下面就告诉你一些我理解到的东西。首先,你要知道的是微软在国际科学领域是根本没有地位的。
微软的地位
微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我认识的MIT,Stanford的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商业宣传和垄断 经营的小公司。这个”小”并不是说它人少,钱少,而是说它先进技术少。
我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了VC+MFC作为平台。我在分析算法时还得到Fortune很热情的鼓励,寄给我一份资料,还多次回信耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给Fortune,他回信说:”对不起。我机器上没有MFC。” 话说的很客气,但是我已经感觉到了他对Windows的不屑。然后我把MFC静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起我,而是确实有难处。
你能感觉到这位科学家对微软和Windows是什么态度了吧?不是反感,而是他心里根本没有Windows这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系呢。 我送他们软件,我捐钱盖大楼,我出钱找图灵奖获得者来演讲,让他们觉得我们都是科学家!
好了,现在全国的大学包括清华,几乎所有人机器必装盗版Win2000,Office XP,学校的选课系统是非IE不能正确浏览,论文用Word编辑,演示用ppt做,email的通知附件是doc文件,你不用Word打不开,连863项目都用VC写程序了。我很久以前就看到一份报纸说,”微软为什么不严厉打击盗版?” 这篇文章说,微软非但不打击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,”以后我要你们加倍的来还我!” 确实如此,它的目的快实现了。
Windows笼罩下的中国计算机教育
说句丢脸的话,比尔盖茨很久以前是我的偶像…… //blush
在中国,比尔盖茨被很多人奉为神圣,”少年电脑天才”,甚至有的人提到他的名字就做出”抱拳对天”的姿势。很多人谈到微软的”新技术”,”高科技” 都是眉飞色舞。各种”VC编程圣经”,”深入了解Visual C++”之类的书,在开头几页都会出现非常肉麻的字眼,”在那团团的混沌中,一个开天辟地的精灵,Windows 1.0,诞生了……”
微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培训班,教的都是一些DOS命令,打字,Windows基本操作,Word文档处理,PowerPoint,高级班可能有Excel,Access…… 参加各种微软认证考试,MCSE,MSDE的人络绎不绝。考试辅导班都贴出了”280元,考过为止”之类的字样。考试参考资料更是昂贵,有些电脑书店整整两书架都是”Microsoft Press”的东西。我有个同学参加认证考试,每门考试都要200多元。而且你一次考不过可以再考,又要交钱。他后来还津津乐道跟我说,看我,花了XXXX(一个四位数)元考过了微软认证,得到一张比尔盖茨亲笔签名的证书和价值6000元的Windows XP内部发行版。
“电脑要从娃娃抓起”,我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑之后,他们首先就会装一个盗版的Windows,然后买来盗版的游戏开始玩。如果哪个孩子会用Delphi编程序,那可不得了。报社记者,电视台争相报导,说,某某学校的初中生某某,在别人都还在玩电脑游戏这种”初级阶段”的时候就已经用Delphi写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!
我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过”中华学习机”。看到新入学的同学们各个谈论的都是 “Windows 95”,”VC”…… 我简直觉得我落后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的同学问了一下:”你们天天谈论的瘟95是什么啊?”答: “win95就是一个操作系统,跟DOS是一类。””朵死是什么?” “你连DOS都不知道是什么?别在计算机系混了。” 学校上课当然不讲VC编程之类的东西,但是上Pascal的老师有一次就说:”嗨,我们学校真是落后。现在别人都用C, C++,甚至VC了,我们还在讲Pascal。不知道什么时候才能有VC课啊。你们出去也是要用VC的,只好自学了。” 于是,有些同学很多时候上课都捧着一本很重的”Windows编程大全”之类的书,根本没有听课。吃饭时就念念有词的跟我说,”代码的优化是无止境的”,”匈牙利命名法真是伟大的发明” …… 这就是中国很多大学计算机系的情况。
感觉到无知了?这不是偶然的,而是微软长久以来埋下的伏笔。它要让无知的大家都把它奉为神圣,它要让支持UNIX,Xwindow的人一旦说UNIX好,Xwindow好的时候,都被一群人围着说教:”这个Windows也能做到”,”你对Windows有偏见”,”微软才是主流啊”,”你敢瞧不起win2k?”,”.NET就是世界潮流”,”微软的毕竟是新技术”,”有钱就是有技术”…… 甚至在一番论战比较后败下来还是要说:”Windows性能差点,但是易用性强”,”Windows是老百姓用的,要求别那么?quot;,”微软那么有钱,以后想超过UNIX还不容易吗?”……
发达国家的计算机教育
我前段时间在USENET发文问有关Scheme语言的问题时,认识了一位丹麦人。他解决了我所有的问题,并且建议我阅读一些很”深奥”的有关程序语言语法,文法的书,他告诉我很多网站可以学习LISP,Scheme,人工智能,算法。他叫我看Jonathan Rees的论文 “Syntactic Closures”。他还打包给我寄过来一份MIT的 “How to Design Programs”。他说他在自己的PC机上装的是Linux,他用Emacs编辑,运行Scheme程序。他对Emacs的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个Scheme解释器。这对于我来说是望尘末及了。
他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他的情况。原来,他是丹麦一所普通高中的计算机老师。
他说他在高中里讲授程序设计和算法,计算机语言文法。他说用Scheme,他的学生不用再为内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。
天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计算机教育如果继续这样下去,只会沿着弯路越走越远!
微软和它的朋友们的如意算盘
下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是100多美元,每次升级又是几乎同样的价钱。Windows NT还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。
花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上Windows之后一般第一件事就是去下载一个WinZip吧,”只要29美元”。Windows会中病毒啊,马上花70美元买一个Norton AntiVirus吧。还有黑客呢?再买一个Norton Internet Security好了,100美元。系统需要优化,磁盘需要整理,买一个Norton System Works是你最佳的解决方案,100美元。
可是你现在还是不能干正事啊!你想要一个Word, PowerPoint?那就买一套Office XP吧,一起买便宜些,$459.90。
那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看”帮助”也学不会。买本书看看吧,我推荐”Special Edition Using Microsoft Office XP”,不贵,$27.99。这本书里面大部分是屏幕抓图,还是买一本旧的比较划算,$17.85。
你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为Windows程序员。首先买一个Visual Studio.NET吧,要不然怎么编译程序。$494.95。
为了紧跟微软动向,世界潮流,不能不注册个MSDN什么的吧?这个贵一点,不过物有所值啊,$2,799。
嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样”自由”的,”安全”的生活了。
为什么要反对使用Windows
很多人都说不应该完全否定Window,Windows也有它的长处。不应该骂微软。
对。Windows容易操作,适合普通用户。如果微软把它自己定位在P&G,Philips那样的地位,能够给我们的百姓提供周到的,完善的,价廉物美的服务。那我肯定是很喜欢它的。但是从上面的种种情况说明,微软是一个野心极大的国际垄断组 织!它的产品没有一个是不出问题的:Windows不稳定,容易中病毒,而微软不为大家免费提供杀毒软件。我就是要让你们花钱买我的朋友Symantec的杀毒软件,谁叫你们已经上了我的贼船?这叫什么售后服务啊!
你买来微软的程序,安装的时候一般都有一个协议,说:”由于微软的程序造成你的数据损坏或丢失,微软概不负责。” 我想很多人肯定觉得这个不合理,不想按那个 “I accept”。但是你的软件买都买来了,钱都花了,现在一按 “I decline”,安装程序马上就会退出。你只好被迫点击了 “I accept”!这不是不平等条约吗?
我已经目睹了好几个朋友的文档被Microsoft Word损坏,有的是编辑了十多天的30多页的论文,有的是费了很大工夫做出来的个人简历,那个朋友为此失去了到自己向往的P&G工作的机会。就在他要投简历的前一个晚上,就在那一瞬间…… 不知道他痛哭的时候有没有想起要投诉微软,可是谁叫我们用的都是盗版呢,况且你还点击了 “I accept”。
微软仗势已经占有大部分PC市场,制定不符合国际标准的”微软的标准”,以不合理的方式压制其它公司的软件,这个问题已经在美国司法部闹了很久了。 他甚至在Windows系列操作系统中放置能够通过网络泄漏用户信息的代码,以至于Windows刚进入澳大利亚时被澳大利亚政府禁止使用。
有些人说:”微软毕竟开创了一个历史,造就了今天的IT行业。” 但是,如果没有微软,我们今天早就用上非常稳定,非常可靠,非常方便,非常”傻瓜”的软件了!微软是阻挡信息技术发展的罪魁祸首。
微软的程序的工作方式(注意,我只是说操作方式,病毒的事情另外算)确实适合于一般家庭,上上网,发发邮件,打打游戏都不错。可是微软却要把自己包 装成什么”高科技”企业,要在世界各地设置”研究院”,在大学计算机系赠送不适合用于科研的Windows产品,甚至出钱请图灵奖得主来中国畅谈”二十一世纪的计算”,还在大会上宣传自己的 .NET技术。非要把别人认为自己是科学的,自己是领导世界高科技的。但是呢?它什么高科技也没有。欧洲,美国,哪一个关键部门在用微软的东西?NASA? DOE? CERN?你仔细想一想,微软的程序对人类到底有什么重大作用?
什么是Windows能干而Linux干不了的事情?---
”Windows能干而Linux干不了的事情,那就是不需要干的事情。”
有个朋友看我半年没有用Windows,有时就会问我:”你只用Linux,有没有发现有些Windows能处理的事情Linux干不了?”---
我回答说:”Windows能干而Linux干不了的事情,那就是不需要干的事情。”
Windows能做的有益的事情Linux都能做
Windows下的某些功能确实是我们需要的,那么Linux的开发者们和用户也需要这种功能,他们就会去实现这种功能,而且比Windows的方式好得多。由于大多数科学家,工程师用的都是Linux或者某种商业UNIX, 所以几乎所有商业的科学工程程序,比如Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先有UNIX的版本(包括Linux),然后再考虑移植给Windows,甚至根本不移植给Windows,因为Windows的机器一般没有足够的能力运行这样的程序。你不要以为只有Windows才有PSpice, UNIX的HSpice要好得多,而且可以运行在大型主机上。当然它们不是免费的,但是它们值那个价钱。
但是Windows下有些东西在Linux下没有很相似的,或者你找到很多类似的,但是它们每一个比起Windows的那个程序都要差很多,那么原因有两种可能性:
有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。而其它程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于Gtk, Qt的诞生,Linux下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。当然 也有一流的程序用Gtk和Qt,比如GVIM就可以用Gtk作为图形界面,我还知道Synopsys一些程序用了Qt。
我曾经也犯过这样的错误,从外表区分一切。结果优秀的FVWM, lftp, Mutt, wget都被我忽略过。当我找回它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 我第一次看到FVWM觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学看到FVWM都说:”哇!真漂亮。”
有另一种完全不同的方式可以达到相同的目的,甚至更好。
很多人很关心Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个Linux程序能够完全兼容的打开一个复杂的doc文档。但是你永远也不可能有那一天。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文档格式。它一定会不断变化doc文档的内部结构,隐藏一些秘密,让其它公司的程序打开doc文档时总是有某种问题,从而你必需购买Microsoft Office和Windows。
你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是Linux或者其它类型的UNIX,他们没有Word可用,怎么处理文档呢?这么多年没有一个像Open Office的程序出现,难道大家没有办法写文档吗?
显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的幻灯片,它们是什么做的?原来UNIX用户早就有非常方便的troff, LaTeX, SGML等东西可以处理文档,而且它们比起Word都要高明的多。Word显然被这些大拿忽略了,以至于很久以来没有人想在Linux下开发一个类似Word的程序,除非某些公司想抢微软的饭碗。
很多人留着Windows在硬盘上的原因无非是为了用Word和PowerPoint。我见过一个教授,他的Windows笔记本电脑上除了PowerPoint什么都没有。有一天演示的时候,他指着堆乱字符说:”对不起,这是一个公式……怎么每次都是这样……” 其实有比PowerPoint好几百倍的东西可以制造幻灯片,你可以用最简单的方法制造世界一流效果的论文和幻灯片。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离开Windows。
Windows能做的那些没用的事情Linux永远做不好
电脑游戏
有些人说Linux下不能玩Windows下所能得到的所有游戏。的确,Linux下虽然也有少量的游戏,比如Quake。但是它没有Counter Strike, 没有Star Craft, ……
并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。
你可以在CS里杀人,你可以在Tomb Raider里探险,你甚至可以在Tony Hawk’s Pro Skaters里滑板…… 但是It’s not real!你虽然有很高的”反恐技巧”,但是遇到歹徒的时候,你是那么的怯懦;你虽然控制Laura伸手敏捷,但是你打篮球的时候怎么总是被人断球?你虽然可以轻易的在THPS里作出一个 “360 kickflip to hangten grind to fakie”,但是你踩在自己的滑板上的时候还不会ollie!
说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比Windows + PC更好的游戏方式。Sony的PlayStation2, SEGA的DreamCast, Nintendo的N64,Namco的街机……每一个都比Windows游戏精彩,每一个都有如此高的3D性能,以至于Pentium4, Itanium + GForce4都无法与它们比美!
Linux的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。 要玩游戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么Linux几乎没有游戏了吧?
“整理硬盘,优化系统”
这是一个非常有意思的话题,仅次于有关”病毒”的话题。相信很多Windows用户都有整理硬盘的经历。在很多Windows用户眼里,”硬盘用久了,会出现碎片,速度会减慢,需要一个程序来整理,整理硬盘的时候不要做其它工作”,这好像是天经地义的事情。
我也曾经津津有味的看着Norton Defrag一点一点的把我的硬盘排序,调整,用图形的方式显示出来,然后报告“100% 没有碎片。你的硬盘现在已经达到最佳状态。” 我现在才发觉我那时是多么的幼稚。
Linux和UNIX用户似乎从来没有”整理硬盘”这种说法呢?你觉得很奇怪吗?如果你觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,UNIX的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期都要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通 的!
Linux机器根本不用整理硬盘,这就是为什么没有看到过Linux用户整理硬盘。Linux的文件系统是比Windows的FAT, FAT32, NTFS高明得多的文件系统,它们不但可以对文件设置权限,实施完全的保护,而且可以”越用越整齐”,”越用碎片越少”!你应该把文件大部分放在Linux的分区,而不是Windows分区,因为它比Windows分区可靠得多。
还有更滑稽的事情就是有很多”Norton System Doctor”,”Windows优化大师”,”超级兔仔注册表魔法” 之类的程序存在,而且价格昂贵。似乎一个操作系统本来应该有很多问题,需要别的厂商做程序来”优化”它,而且为了得到优化,你需要付钱!这些问题Linux根本就没有,所以不需要什么优化。Linux内核本身就是高度优化的。
IDE
有些人在抱怨为什么Linux没有一个良好的IDE开发环境。Linux现在已经有一些IDE了,但是总是有很多问题。你是不是正在寻找,正在期望Linux某一天可以有一个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要用IDE?你说:”IDE开发迅速,调试方便,适合大型程序……” 那说明微软的程序在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。
高明的UNIX程序员不用IDE,IDE从来就是给初级Windows程序员用的。
你看看大型的UNIX程序,包括Linux内核,各种网络服务程序,Xwindow程序在内,哪一个是IDE搞出来的?我们实验室的EDA程序也没有一个是IDE弄的,我还知道Candence, Synopsys,Mentor的高性能的图形界面EDA程序也都不是IDE写的。你信不信,微软的人在写Windows本身的时候也根本不用IDE。微软内部程序员最喜欢的编辑器其实是VIM,用VIM的微软程序员上次向乌干达的可怜儿童捐助了1000多美元,这是值得称赞的。
有一次某杂志采访一些出名的Linux内核程序员,包括Linus在内,没有一个人用IDE,有的人用VIM,有的用Emacs,只有Linus说”GNU Emacs is evil”,但是其实他用的是一种跟Emacs有同样键绑定功能的MicroEmacs。大家都是用编辑器编辑了程序文件,然后用make这样的自动工具调用gcc编译器完成编译工作的。甚至高级的Windows程序员也不用IDE,他们可以从命令行调用cl,nmake来编译自己的程序。虽然这样的Windows程序员很少,但是他们却是最了解Windows,最高明的Windows程序员。
为什么UNIX程序员不用IDE?明白了这个道理你就能体会到UNIX的设计思想了。首先,一个IDE集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上VIM或Emacs,编译器比不上GCC,汇编器比不上as,调试器比不上gdb,ddd, 跟踪器比不上strace, ltrace, truss。你得到的是一套整合的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套IDE,但是这套IDE的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不能保持原来的某些东西。
而在UNIX下就不一样了。你可以用你最喜欢的VIM编辑程序,你在VIM里可以调用GNU make,make可以调用gcc, ld, ... make的出错信息可以被VIM捕获,VIM能帮你在源程序里定位。你如果喜欢icc, 你可以让make用icc而不是gcc。你如果觉得gdb跟踪变量时比较麻烦,你可以用ddd来显示各种数据结构之间的关系。你还可以在Emacs里调用gdb,那样就可以同步显示源代码了。而且VIM和Emacs还可以编辑很多其它东西,比如信件,LaTeX文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如Mutt, tin都可以在内部使用VIM,这样就更方便了。实际上make在其它方面还能帮你很多忙,我的每一个比较大型的LaTeX文档都是用make维护的。
Linux能干的高精尖的事情Windows都干不了
当然有很多事情是Linux/UNIX的专利了。因为Windows只能装在PC机上,好像以前也有Alpha可以使用Windows NT,但是就是没见到有人用。PC机的能力是很低的,像我们编程序处理NP-Hard问题的人,用Windows的机器显然速度不够,而且有时一个问题算上几天甚至几个星期,Windows机器是以”死机”着称的,我们怎么能放心?所以几乎所有科学计算程序,EDA程序,高性能图像处理程序都不是Windows的。他们有时也会移植一些给Windows,但是常常降低那些程序的能力。你比较过Windows版本的Mathematica和Linux的有什么区别吗?
IBM制造的最大的并行计算机有8000多个处理器,Windows不可能有能力管理这么多处理器,它用的是什么操作系统?答案是Linux。
《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。那也是Linux机器做的。
民航总局用来训练地情人员的虚拟现实训练设备,Windows当然无能为力。那都是商业的IRIX机器。
UNIX是最早支持TCP/IP网络协议的系统。它上面有很多可以互相协作的网络服务程序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖茨还在扬 言:”Internet是没有前途的。” 微软的这个”远见卓识”大家应该都已见识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识了的。
其实你知道了,Windows没有一样有用的事情能比UNIX干的更好。
Linux干不了的有用的事情Windows照样干不了
当然Linux不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是Linux干不了的事情,Windows肯定也干不了。这些事情就是我们需要探索,需要努力的事情了。在你探索的过程中,Linux必定是你的好伙伴。
不要把Linux和Xwindow掩盖起来!
不要把我们的用户当成傻瓜。
什么?你早就知道Windows是垃圾?噢!你怎么不早说呢!害我废话这么多。嘿嘿。
“好了。你知道Windows是垃圾,你现在用什么?”
“Linux + Xwindow”
“那我问你,Xwindow是什么样的?”
“不就是跟Windows差不多吗?只不过 ‘Start’ 按钮比较方,而且上面不是一个Windows标志,而是一个脚丫子。点击一下居然还有很漂亮的中文菜单。我喜欢!”
“你知道什么是’根窗口’吗?”
“不知道。从来没听说过呢?”
“根窗口就是遮盖整个屏幕的那个最大的窗口。”
“哪儿有什么窗口啊!我没有看到呢?”
你发现了问题吗?这些Linux用户说是在用Linux和Xwindow,但是他们对Linux和Xwindow几乎完全不了解。很多人用了那么久Xwindow都不知道根窗口是什么东西,不知道其实按钮也是窗口,不知道窗口管理器和其它程序有什么关系,大家都以为窗口上面的按钮是程序自己放上去的,不知道窗口? quot;class name”,”resource name”是什么东西。他们也不知道 .Xdefaults是用来干什么的。特别是他们很多人都不知道Xwindow的字体是如何命名的,什么是fontset,有了一个新的字体也不知道怎么安装。
他们被遮在Linux之上的一层一层的包装迷惑了,他们等待有图形界面的工具来帮助完成一切事情,他们认为Linux跟Windows一样,只是麻烦一点。他们知道Linux内核很好,但是他们感觉不到Linux和Xwindow在操作层面的天生的先进性,随后不久就把Linux完全删除掉了。你发现没有,要用户理解UNIX和Xwindow的操作层面的先进性,才是留住用户的最好办法。如果用户体会不到操作时的方便和高效,内核再好他们也不会理会。
但是用摹仿Windows的作法来吸引用户,永远会失败的。因为Linux如果摹仿Windows那一套低效率的方式,那么Linux的这套”低效率方式”永远比不上Windows的那一套”低效率方式”。那么用户就会说:”这个Linux,没有一样比的上Windows。”
Linux天生就是继承了UNIX的高效的工作方式,为什么我们要把它掩盖起来?我们为什么只告诉用户KDE的菜单怎么用?我们为什么不能像早期的Xwindow书籍那样第一节就告诉用户什么是X server, 什么是X client,什么是Window Manager, 什么是根窗口。第二章就告诉用户窗口有哪些属性,什么是classname, resource name, hint,怎样使用 .Xdefaults, xrdb ……
在这里我又不得不说一下那些Linux的发行公司和写书的人,他们把Linux和Xwindow包装起来,却没有从基本上告诉用户Xwindow的工作原理。很多书籍讲授的层次就是在Gnome, KDE的菜单操作的层次,靠大量抓图来占篇幅,”繁荣”Linux书籍市场。
现在很多人已经把能够利用别人的库写出一个好看的程序作为自己编程水平的象征。在这?quot;图形化”,”可视化” 的年代,你如果还在用troff, LaTeX写文档,你还在用VIM自己编辑HTML,用Mutt处理邮件,你还在用文本模式的gdb调试程序,你还在用Xlib写程序, 你还在用tin上USENET,你还在自己写Makefile,写机器代码,你还在玩Clossal Cave这样的字符模式冒险游戏,那你就是老古董。
其实这种思想是错误的。虽然你是一个坚决的Linux支持者,但是你的思想是Windows的思想。你认为图形界面,菜单,按钮就可以解决一切问题,就可以给你高效方便。你还是没能摆脱微软给你的潜移默化的东西。你其实离不开Windows那样的环境,你迟早会删掉自己的Linux。
GUI vs. CLI
做一个坚定不移的”两面派”
大家看到这个标题是不是热血沸腾?两派大虾都可以围攻我了:
GUI派用户:”哇!我一看你这小子就是CLI的。要不然自己写什么Makefile?用什么Mutt?”
CLI派用户:”切~ 你还用X!高手都不用X。你是GUI那边的。”
可怜的我:”555~~ 你们都不要我~~ GUI和CLI就那么水火不容吗?”
计算机界这样的门派之分还很多。很有特点的就是CLI和GUI了。CLI (Command LIne)的狂热份子声称永远不用X。我上次在实验室看到一个同学用一个SecureCRT登录到Sun机器,然后用一个vanilla vi编辑程序,我建议他启动一个GVIM过来显示在Exceed上可以有语法加亮。但是他坚决反对,说:”高手不用X。你想想,要是我在一个很慢的网络连接怎么用X?而且好多服务器没有装X程序。”
但是我们实验室的网速可够快,Windows机器都有Exceed啊,而且Sun机器有全套X客户程序包括GVIM。他说他是CLI的坚决拥护者,但是他却在用Windows,他后来打开了好几个SecureCRT,每次从文本框输入地址,用户名和密码,从下拉菜单选择”SSH2”,然后点击”Connnect”。他还不断的夸SecureCRT是”网络管理员投票选出的最受欢迎的登录方式”。老天,SecureCRT本身就是个GUI啊,他其实没有明白Xwindow的好处。
你说我是GUI的?我虽然很少在console下工作。但是我对bash, VIM很熟悉,我可以让bash按照我的键绑定方式来工作。我可以在rxvt里使用Mutt来收发email。我的每个桌面上都常常堆放着一打不同大小的rxvt。我用VIM编辑LaTeX。我自己写Makefile来维护LaTeX文档。我有时用mpg321来放mp3。我上BBS用的我自己写的expect脚本。 好了,CLI派的朋友可以收我做盟友了
你说我是CLI的老古董?我的FVWM被我配置为可以”手写操作”,我只要画一个”r”就可以启动rxvt,我只要画一个 “U” 就可以启动GVIM,…… 我用GVIM语法加亮模式编辑程序,我用Mozilla浏览网页,…… GUI派的现在好像认我做朋友了
好了。CLI派的朋友,虽然我很喜欢命令行,但是我有时在屏幕上左右画一下就可以执行:
Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn “-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*”
你是不是现在又想把我逐出师门?
GUI派的朋友,虽然我很喜欢窗口。但是我可以在FvwmConsole里输入:
All (rxvt) MoveToDesk
把我所有的rxvt移动到我现在工作的桌面。”这家伙,怎么这么快就叛变了!”
其实何必分什么GUI和CLI,UNIX和Xwindow都是工业标准,它们从设计那天开始就有非常灵活的用法,各个程序,不管是GUI还是命令行的都可以互相协作。UNIX和X是一家,何必搞的那么偏激,非此即彼?你从我上面的行为可以看出GUI和CLI的模糊界线吗?我就是坚定不移的”两面派”。
UNIX是简单的
”我相信简单就是最好,如果太复杂,我是不能理解的。” -Seymour Cray
很多第一次用Linux的人会惊奇的发现,Linux的程序居然不?quot;安装”就可以运行,程序拷贝到随便那个目录都可以用,而不是一定要占用你第一个分区的空间。程序的设置只是一些简简单单的文本文 件。你根本不需要什么”注册表修改器” 就可以改变系统的设置。这就叫做简单,但是简单就是美。虽然这只是UNIX简单性的一个肤浅的认识,你已经体会到了某些东西。
但是简单并不意味着功能弱,并不意味着落后。相反,简单意味着强大,意味着生命力。
我不会再继续阐述我理解到的”UNIX的简单”,因为这个需要自己去体会。
UNIX是永恒的
有人说:”Plan9会取代UNIX,Mach会取代Linux内核。”
但是你如果是一个深入体会了UNIX的人,你就会知道:UNIX的思想是永恒的,不管时过境迁,Plan9是否代替UNIX,UNIX的灵魂都会在Plan9身上现形!
我为同一个设备写过Linux内核和Windows VxD驱动程序。写Linux驱动程序时,我对UNIX设计的完美的一致性,远见性所折服。UNIX用同样界面的read(), write()系统调用就可以对不同的对象:普通文件,设备文件,管道,管道文件,socket,……进行统一的读写操作。我跟本不需要写一个测试用的应 用程序就可以对我的设备驱动进行测试,因为cat, cp, dd, 它们也使用了同样的read(), write(),设备和普通文件在应用程序眼里没有区别。在那个还没有Smalltalk, 没有C++ 的年代,UNIX的设计者已经使用了所谓的 “面向对象方法”。对,C语言也可以实现面向对象。
UNIX的系统调用几十年都没有很大变化,这非但不是顽固,不进步的象征,反而是UNIX的远见卓识的体现!这就跟TeX程序几十年都不变的情况差不多。这些才是真正的永恒的master piece! 你应该改变所有软件都必需从0.1, 1.0, 1.1, 1.2, 2.0,..., 3.0, 3.1, 95, 98, 2000, XP, ... 不断升级的想法。
Windows就不同了,它在最开头只是一个DOS之上的图形包装而已。后来为了兼容以前的糟糕设计,不得不加上很多累赘。我写VxD驱动程序的时候就深有体会,Windows 95程序对设备的操作只有用DeviceIoControl,我不得不写了两个应用程序来对设备驱动进行测试。Windows内核的不一致性和隐密性使我非常恼火。不过Windows WDM驱动程序现在也有了ReadFile, WriteFile,…… 那说明什么?那说明Windows在向UNIX学习,或者有可能是某个UNIX设计人员在微软打了几天临工,顺手加了几个UNIX的东西进去。这样做是没有用的,Windows从一开始就是非常糟糕的设计,它的历史的包袱太沉重了,缝缝补补有什么用?它只能永远的被UNIX甩在身后!
UNIX是强大的
让聪明人干任何他们想干的事情。
UNIX的一个特点就是非常高的灵活性,Xwindow也具有这种灵活性。这种灵活性体现在哪里呢?
UNIX的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它们的行为很多都可以用配置文件来改变。比如GNU bash, 通常缺省的命令行输入方式是Emacs方式,但是只要我编辑一个 .inputrc文件,就可以把它变成vi的输入方式,而且我还可以自己绑定键序列到某些操作。我可以用shopt来设置它的很多特点,比如是否进行通配符扩展,是否可以把一个变量当作一个目录来cd,是否可以自动纠正某些明显的目录名打字错误 ……
UNIX程序设计的思想是提供给用户”机制”,而不限制用户制定”政策”。这是一个重要的尊重用户的作法。
我们再来看看Xwindow。Xwindow是一个出色的设计,它把显示服务器和客户程序分开。一个显示上既可以显示本机上的程序,也可以显示别的机器上的X程序,而它们都遵守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件 …… 比如有时我的XFree86上会出现四个不同机器上的XTerm,两个不同机器上的GVIM,…… 它们统一受本机上的FVWM指挥。
Xwindow程序都具有很多很多命令行参数和resource参数。你可以随意的在命令行或者 .Xdefaults文件设置所有的颜色,字体,尺寸…… 而且如果你用xrdb把 .Xdefaults导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上的时候也会遵守同样的外观规定。
Xwindow的窗口具有Property, 也就是一些可以自己定义的共享数据(原子)。正是因为这些Property的存在,使得Xwindow具有无比强大的生命力。X的窗口管理器和其它客户程序之间并没有统一的协议,但是后来出现了ICCCM(客户程序间通信规范),这个规范就是通过property定义的。现在又有人定义了一套”扩展的窗口协议(EWM Hints)”,使得Xwindow可以具有某些Windows的特征,比如一个工具条程序可以告诉窗口管理器:”这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要越过这个界线。”
一个强大的窗口管理程序比如FVWM,它收到这样的提示时,可以答应工具条程序的这个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!
你想想,是不是有些Windows程序常常弹出一个窗口要你选择 “Yes or No”?你不点击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人,一个智慧的生物,怎能受到一个程序如此的待遇?
还有就是很多Windows程序把人当成傻瓜,而它是”智能程序”。比如,有一个程序就是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了。
如果连”一句话开头一个字母要大写”这么明显的问题都需要程序帮你纠正的话,人脑还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那一大堆菜单里找到怎么关闭这个愚蠢的选项。
只有符号才能完全操纵计算机
我们来说说很多初学Linux的用户。虽然他们在用Linux,但是他们打心眼儿里是觉得Windows的工作方式好,他们希望Linux有一天能”像Windows那样”。你说:”我的鼠标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:”Linux从来没有摹仿Windows,将来也不会。Linux从诞生之日起,它的工作方式就比Windows的先进。
Linux属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”
看看优秀的UNIX程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?
当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文 件的效果,你需要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了awk, sed, Perl,你会觉得那才是真正的自动化啊。
鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。
各个小程序的完美配合
这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能力,然后让它们合作。Xwindow也继承了这种好传统。 这恐怕就是Windows和其它操作系统望尘末及的地方了。UNIX程序设计之统一,配合之完美,真使我难以置信!shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了sed的正则表达式,其它程序基本上都能用了。你一旦学会了vi和VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经设计好了VIM在今天的完美而统一的操作方式!而且vi的操作还体现在Mutt, tin等很多程序中。你甚至可以把bash设置为vi的输入方式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可以在自己的窗口里”嵌入”另外一个 程序。
在Windows和其它非UNIX操作系统中,这种合作是非常困难的。我曾经在Windows下使用Perl来进行一些自动工作。但是Windows的文件操作,管道是如此的不稳定,程序之间基本不能合作。你别想在Visual Studio窗口里面嵌入UltraEdit编辑器,你别想用一个expect脚本来控制telnet到水木清华BBS。
Windows的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal, 自己的通讯代码。每一个IDE都自己提供编辑器,编译器,汇编器,调试器。人们为了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器的键绑定,菜单组 织…… 不能DIY!
你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己 想要什么牌子的版面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的古球拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用Windows程序,你得到的是大杂烩,就像你去买”品牌机”,只有那么几种配置,而且附带很多你不需要的软件和服务;就像你去买组装好的滑板,你想要大一点的轮子和窄 一点的板子,但是你没有这种选择余地!Windows程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新买全套配件!
而UNIX和Xwindow就是高档的”组装货”。比如我用Mutt的时候,我可以用VIM也可以用pico来编辑邮件,我可以用ImageMagick也可以用xv来显示附件里的图片,我可以用lynx把HTML附件转成文本嵌入窗口中,我也可以把HTML附件交给Mozilla图形显示。我可以让GnuPG帮我把邮件进行数字签名和加密,我也可以用其它PGP程序。
我想让Postfix而不是sendmail帮我发出邮件,我想让fetchmail帮我收邮件,转发给postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。
学UNIX绝对不是浪费时间
有人告诉我:”你看我用Windows什么都不用学。而用Linux,光是安装就花了我一个星期!”
首先,我要告诉你的是,你装Linux花了一个星期,不是因为Linux不好装,而是因为你已经习惯了Windows,对Linux最初难以理解而已。你想一想你最初安装Windows的时候呢?你花了多少时间搞明白什么是硬盘分区?什么是盘符?什么是目录?你认为Windows就是那么容易可以学会的吗?虽然你觉得没花时间学,但是你以前在用别人的机器的时候已经耳濡目染,自然就了解了。而且由于你想要Linux和Windows并存于硬盘上,又增加了安装难度。而且你肯定没有得到有经验的Linux用户的帮助,否则他们会在20分种之内帮你搞定。一个星期也太夸张了.
如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过windows,你肯定会很习惯 /etc, /usr, /usr/local ,... 而不是C:, D:, E:, ... 是不是?如果你只用过Linux,你第一次用windows时恐怕也会问:”/bin目录哪里去了啊?”
最重要的是,你用惯了的UNIX工具,它们可以伴随你一生,而不会那么容易变化或消失。你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多,而且可以完全模拟你现在的工具。
我们实验室一个60多岁的老师,用vi, cc, make, ...都几十年了,他以前的经验绝对没有白费,而且教会了我们一批又一批的学生。vi伴随着UNIX的最初发行而诞生,直到今天还是世界上头两号编辑器之一!有些人的FVWM配置文件已经用了10多年,现在完全不经修改还可以用。
看看Windows的工具,你从Borland C++ 换到VC, 就必需适应新的环境:菜单不同了,颜色不同了,按钮不同了,帮助信息不同了,热键不同了,编译器参数,调试器功能也不同了,…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了VC, 你又要换成VJ, PowerBuilder, C++Builder, ...
很多windows程序员都是这样,开头在dos下用Turbo C, 然后是Borland C, VC, C++ Builder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不断变化,不断出问题,又不断的在修改…… Windows程序员不得不买又厚又重的Microsoft Press的书籍,看了才一个月,又过时了。今天你才学会了写VxD,明天你就必须用WDM了。你不得不注册MSDN才能赶上Microsoft的步伐。很多人说:”计算机是贵族的专业。” 这就是微软一手造成的。
这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命!我们为什么不使用从诞生就那么一致和完美的UNIX?你需要理解先进工具的设计理念。UNIX的工具就像我们用的汽车,它的离合器,油门,刹车,方向盘,后视镜,永远都在同样的位置。用惯了的话,你对你的汽车的每一个部件都会了如指掌,甚至你自己 都可以修车了。这难道不好吗?
有人说:”你说我们需要了解UNIX,难道你要开车还必须了解汽车的结构吗?” 你去问问开车的司机,哪一个不了解汽车的结构的,那他的驾照就是混来的。你难道想要傻瓜型的”微软牌汽车”吗?我们来看看:
你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱。车上的防撞气囊不时会冒出来,说是为了你的安全。每开100英里要大修一 次,每过一年要换一次引擎。附带的,你还必须换用由微软汽车公司指定的石油公司提供的新型号的机油。你的车出了问题,但是法律规定,你不准私自拆开你的汽 车来修理,你必需到微软汽车公司指定的维修点去,需要付相当多的钱才能修好一个小毛病。
最可气的是,你每换一个型号的微软牌汽车,它的刹车和离合器都在不同的位置,你需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵,你受了重伤,你 也不能状告微软汽车公司,因为你买来汽车之后必须签一个合同,说”由于微软牌汽车对你和家人造成的一切死伤,微软概不负责。”
怎样完全用GNU/Linux工作
说了这么多Windows的不好。我还没有告诉你我怎么用Linux处理有些必要的事情。半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到Win2k来处理汉字。后来我找到了miniChinput, XSIM和SCIM输入法。这下可以处理汉字了。而且VIM和Emacs对汉字支持越来越好。我的大部分文本是用VIM编辑的,包括程序,信件,网页,LaTeX论文,MetaPost绘图语言。
我不用Word这样的程序写论文,而是用LaTeX,因为这是世界上效果最好,最方便的论文工具,是大多数学术杂志要求的格式。幻灯都是用ConTeXt做的,用起来很简单,而且效果非常漂亮。你可以看看我的TeX介绍。
至于绘图,你可以用很多可视化的工具,比如xfig,dia。但是对于我来说,任何可视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了MetaPost。它简单又好用, 而且效果是世界一流的。我的插图,如果不是图像,都是MetaPost画出来的。
我曾经抱怨mozilla-mail经常突然消失,损坏我好几封快要完成的信件。后来我发现mozilla的邮件处理程序确实是不稳定的,功能又弱,有经验的UNIX用户都不用这样的程序。Mutt是一个非常稳定可靠的UNIX邮件处理程序,而且功能非常强大。我曾经为Gnome和KDE的不稳定而烦恼。现在我找到了非常强大的FVWM。KDE,Gnome也能和FVWM一起工作。虽然Gnome和KDE总体不稳定,但是某些部件程序还不错,很多gtk, Qt的程序也很不错,它们很多都是可以独立于这些桌面环境运行的。
Linux有很多强大方便的工作方式是Windows没有的,或者有类似的东西,但是很差劲或者用起来不方便。比如ssh服务,rsync,cvs,expect ……
结论
我写这么多的目的是什么?我希望喜欢Linux的朋友,完全清除微软和Windows灌输在你脑子里的谬论,别再相信它们所谓的”新技术”,别再追赶Windows,因为追赶Windows = 倒退。马克思有一个思想很重要,”新生事物并不一定是在最近出现的。”
UNIX,Xwindow, TeX虽然都比Windows先出现,但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。
消除学计算机很难的幻觉,勇敢的拿起像bash, FVWM, TeX, VIM, Emacs, Mutt ……这样强大的程序,勇敢的面对符号。不要再埋怨”Linux为什么不能像Windows那样”,不要再浪费时间试用这样那样的程序,不要再忙着升级。你需要理解UNIX的工作方式,因为那是大多数科学家的工作方式。Linux可以成为你的好朋友,你需要认识它,了解它,信任它,才能完全的靠它来高效的工作。当然,在游戏机,手机,掌上电脑里,或者在用电脑来娱乐的时候,用一些 “傻瓜软件”还是不错的.
我希望小学,中学的计算机老师能够提高自己的素质,在孩子们的启蒙教育中充分利用Linux神秘的特点,引起孩子们对数学,对符号的好奇心。诱导他们用计算机来解决世界上的有趣问题,而不要把教学的范围局限于计算机的操作和它自身的问题。
附录: 我用来处理日常事务的Linux程序
好了好了。我知道你发现自己应该转向Linux,你很后悔当初为什么中了微软的邪。但是不要着急。因为这些东西本来只是工具,它们是用来完成你的主要任务的辅助而已。你以前选错了工具,这不 要紧。你还是拥有你自己原来的专业技能,那才是最重要的。工具的东西只有慢慢适应转换,不能一蹴而就,否则你会感到非常没意思,甚至放弃。
如果你只想做一个像我这样的普通用户,主要目的是用Linux来完成自己的任务,那就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理员确实很辛苦。这里我对实验室的网管同学鞠一躬,谢 谢你的指点和帮助. 不用把你的机器当成网络服务器,不用开放没有必要的服务,设置好ssh, ftp已经足够了。这样会省去了解很多没必要了解的东西的时间。不用过度考虑”安全”,因为Linux缺省已经很安全了。不过你有兴趣了解更多那也无妨。
下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工程软件比如Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其它物理上的,化学上的,生物上的 …… 都必然有Linux和UNIX的版本。当然他们很多不是免费的,不要总是觉得什么都应该免费,自由不等于免费。它们是经过很多人辛勤劳动的产物,是可靠的程序,它们物有所值。
下面列出我常用的一些Linux程序。一个列表里可能有很多,那是为了方便你来选择,我列出了比较信得过的。但其实很多只有第一个是我真正在用的,我不喜欢试用程序。我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,那样可以省去我很多麻烦。
Shell: bash。它结合了csh和ksh的优点,并且有readline功能,你可以随意绑定自己的键盘。
编辑器: VIM, Emacs。
程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...
论文,幻灯工具:LaTeX, ConTeXt
绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用xfig, dia来画一些流程图之类的图片。
图像处理:ImageMagick。其中的import程序可以屏幕抓图,convert程序可以转换图像格式,display可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用Gimp, 它几乎和Photoshop差不多。
自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图…… 全自动,而且不会重复劳动。
数值计算程序:SciLab。这个程序基本上可以代替Matlab。
代数计算程序:MAXIMA。这个程序基于世界上最老的计算机代数系统之一: 由美国能源部(DOE)发行的MIT Macsyma系统。它是用Common Lisp实现的。很多现在的符号计算程序比如Maple都从MAXIMA身上学到很多东西。它现在经过DOE批准以GPL发行,永远是一个自由软件。
加密程序:GnuPG。我的PGP密钥就是它搞出来的。
打包,压缩程序: 什么都有: tar, gzip, bzip2, zip, rar, ...
虚拟光驱程序: Linux不需要虚拟光驱程序,直接mount就行了。
ftp服务器:proftpd, vsftpd。proftpd功能很强,但是我只用了最简单的一种设置。
WWW服务器:apache。(我一般没有开)
ftp客户程序:lftp,ncftp。它们都是文本方式操作的,但是比起图形
你要体会什么叫做”设计”,一个糟糕的设计并不是到后来缝缝补补就可以变好的,而一个出色的设计,不但可以以不变应万变,而且可以影响到后来者。一 个出色的设计配上一个出色的实现,那就是非常出色的发明。Linux就是这样的一个出色的发明。Linux并不需要追赶Windows,也不需要打垮微软。它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。
Unix是简单的,你不需要成为一个天才也能理解这种简单。
UNIX的设计者Dennis Ritchie说:”Unix is simple. It just takes a genius to understand its simplicity.” 但是我不这么认为,因为我不是一个天才,但是我却勇敢的把Windows完全删除掉,遇到不明白的事情的时候努力用UNIX的方式去解决,而不是寻求Windows的帮助。现在我体会到了UNIX的思想和好处,我可以用比Windows高效几倍的效率工作。因为我相信这样的信念:”Windows能办到的事Linux一定能办到,而且办的更好。”
这小节开头的话应该改成:”Unix是简单的,你不需要成为一个天才或是计算机专家。但是在这个冲斥着Windows错误观念的世界,你需要信念和勇气才能理解它的简单。” 我下面就告诉你一些我理解到的东西。首先,你要知道的是微软在国际科学领域是根本没有地位的。
微软的地位
微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我认识的MIT,Stanford的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商业宣传和垄断 经营的小公司。这个”小”并不是说它人少,钱少,而是说它先进技术少。
我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了VC+MFC作为平台。我在分析算法时还得到Fortune很热情的鼓励,寄给我一份资料,还多次回信耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给Fortune,他回信说:”对不起。我机器上没有MFC。” 话说的很客气,但是我已经感觉到了他对Windows的不屑。然后我把MFC静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起我,而是确实有难处。
你能感觉到这位科学家对微软和Windows是什么态度了吧?不是反感,而是他心里根本没有Windows这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系呢。 我送他们软件,我捐钱盖大楼,我出钱找图灵奖获得者来演讲,让他们觉得我们都是科学家!
好了,现在全国的大学包括清华,几乎所有人机器必装盗版Win2000,Office XP,学校的选课系统是非IE不能正确浏览,论文用Word编辑,演示用ppt做,email的通知附件是doc文件,你不用Word打不开,连863项目都用VC写程序了。我很久以前就看到一份报纸说,”微软为什么不严厉打击盗版?” 这篇文章说,微软非但不打击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,”以后我要你们加倍的来还我!” 确实如此,它的目的快实现了。
Windows笼罩下的中国计算机教育
说句丢脸的话,比尔盖茨很久以前是我的偶像…… //blush
在中国,比尔盖茨被很多人奉为神圣,”少年电脑天才”,甚至有的人提到他的名字就做出”抱拳对天”的姿势。很多人谈到微软的”新技术”,”高科技” 都是眉飞色舞。各种”VC编程圣经”,”深入了解Visual C++”之类的书,在开头几页都会出现非常肉麻的字眼,”在那团团的混沌中,一个开天辟地的精灵,Windows 1.0,诞生了……”
微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培训班,教的都是一些DOS命令,打字,Windows基本操作,Word文档处理,PowerPoint,高级班可能有Excel,Access…… 参加各种微软认证考试,MCSE,MSDE的人络绎不绝。考试辅导班都贴出了”280元,考过为止”之类的字样。考试参考资料更是昂贵,有些电脑书店整整两书架都是”Microsoft Press”的东西。我有个同学参加认证考试,每门考试都要200多元。而且你一次考不过可以再考,又要交钱。他后来还津津乐道跟我说,看我,花了XXXX(一个四位数)元考过了微软认证,得到一张比尔盖茨亲笔签名的证书和价值6000元的Windows XP内部发行版。
“电脑要从娃娃抓起”,我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑之后,他们首先就会装一个盗版的Windows,然后买来盗版的游戏开始玩。如果哪个孩子会用Delphi编程序,那可不得了。报社记者,电视台争相报导,说,某某学校的初中生某某,在别人都还在玩电脑游戏这种”初级阶段”的时候就已经用Delphi写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!
我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过”中华学习机”。看到新入学的同学们各个谈论的都是 “Windows 95”,”VC”…… 我简直觉得我落后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的同学问了一下:”你们天天谈论的瘟95是什么啊?”答: “win95就是一个操作系统,跟DOS是一类。””朵死是什么?” “你连DOS都不知道是什么?别在计算机系混了。” 学校上课当然不讲VC编程之类的东西,但是上Pascal的老师有一次就说:”嗨,我们学校真是落后。现在别人都用C, C++,甚至VC了,我们还在讲Pascal。不知道什么时候才能有VC课啊。你们出去也是要用VC的,只好自学了。” 于是,有些同学很多时候上课都捧着一本很重的”Windows编程大全”之类的书,根本没有听课。吃饭时就念念有词的跟我说,”代码的优化是无止境的”,”匈牙利命名法真是伟大的发明” …… 这就是中国很多大学计算机系的情况。
感觉到无知了?这不是偶然的,而是微软长久以来埋下的伏笔。它要让无知的大家都把它奉为神圣,它要让支持UNIX,Xwindow的人一旦说UNIX好,Xwindow好的时候,都被一群人围着说教:”这个Windows也能做到”,”你对Windows有偏见”,”微软才是主流啊”,”你敢瞧不起win2k?”,”.NET就是世界潮流”,”微软的毕竟是新技术”,”有钱就是有技术”…… 甚至在一番论战比较后败下来还是要说:”Windows性能差点,但是易用性强”,”Windows是老百姓用的,要求别那么?quot;,”微软那么有钱,以后想超过UNIX还不容易吗?”……
发达国家的计算机教育
我前段时间在USENET发文问有关Scheme语言的问题时,认识了一位丹麦人。他解决了我所有的问题,并且建议我阅读一些很”深奥”的有关程序语言语法,文法的书,他告诉我很多网站可以学习LISP,Scheme,人工智能,算法。他叫我看Jonathan Rees的论文 “Syntactic Closures”。他还打包给我寄过来一份MIT的 “How to Design Programs”。他说他在自己的PC机上装的是Linux,他用Emacs编辑,运行Scheme程序。他对Emacs的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个Scheme解释器。这对于我来说是望尘末及了。
他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他的情况。原来,他是丹麦一所普通高中的计算机老师。
他说他在高中里讲授程序设计和算法,计算机语言文法。他说用Scheme,他的学生不用再为内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。
天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计算机教育如果继续这样下去,只会沿着弯路越走越远!
微软和它的朋友们的如意算盘
下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是100多美元,每次升级又是几乎同样的价钱。Windows NT还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。
花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上Windows之后一般第一件事就是去下载一个WinZip吧,”只要29美元”。Windows会中病毒啊,马上花70美元买一个Norton AntiVirus吧。还有黑客呢?再买一个Norton Internet Security好了,100美元。系统需要优化,磁盘需要整理,买一个Norton System Works是你最佳的解决方案,100美元。
可是你现在还是不能干正事啊!你想要一个Word, PowerPoint?那就买一套Office XP吧,一起买便宜些,$459.90。
那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看”帮助”也学不会。买本书看看吧,我推荐”Special Edition Using Microsoft Office XP”,不贵,$27.99。这本书里面大部分是屏幕抓图,还是买一本旧的比较划算,$17.85。
你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为Windows程序员。首先买一个Visual Studio.NET吧,要不然怎么编译程序。$494.95。
为了紧跟微软动向,世界潮流,不能不注册个MSDN什么的吧?这个贵一点,不过物有所值啊,$2,799。
嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样”自由”的,”安全”的生活了。
为什么要反对使用Windows
很多人都说不应该完全否定Window,Windows也有它的长处。不应该骂微软。
对。Windows容易操作,适合普通用户。如果微软把它自己定位在P&G,Philips那样的地位,能够给我们的百姓提供周到的,完善的,价廉物美的服务。那我肯定是很喜欢它的。但是从上面的种种情况说明,微软是一个野心极大的国际垄断组 织!它的产品没有一个是不出问题的:Windows不稳定,容易中病毒,而微软不为大家免费提供杀毒软件。我就是要让你们花钱买我的朋友Symantec的杀毒软件,谁叫你们已经上了我的贼船?这叫什么售后服务啊!
你买来微软的程序,安装的时候一般都有一个协议,说:”由于微软的程序造成你的数据损坏或丢失,微软概不负责。” 我想很多人肯定觉得这个不合理,不想按那个 “I accept”。但是你的软件买都买来了,钱都花了,现在一按 “I decline”,安装程序马上就会退出。你只好被迫点击了 “I accept”!这不是不平等条约吗?
我已经目睹了好几个朋友的文档被Microsoft Word损坏,有的是编辑了十多天的30多页的论文,有的是费了很大工夫做出来的个人简历,那个朋友为此失去了到自己向往的P&G工作的机会。就在他要投简历的前一个晚上,就在那一瞬间…… 不知道他痛哭的时候有没有想起要投诉微软,可是谁叫我们用的都是盗版呢,况且你还点击了 “I accept”。
微软仗势已经占有大部分PC市场,制定不符合国际标准的”微软的标准”,以不合理的方式压制其它公司的软件,这个问题已经在美国司法部闹了很久了。 他甚至在Windows系列操作系统中放置能够通过网络泄漏用户信息的代码,以至于Windows刚进入澳大利亚时被澳大利亚政府禁止使用。
有些人说:”微软毕竟开创了一个历史,造就了今天的IT行业。” 但是,如果没有微软,我们今天早就用上非常稳定,非常可靠,非常方便,非常”傻瓜”的软件了!微软是阻挡信息技术发展的罪魁祸首。
微软的程序的工作方式(注意,我只是说操作方式,病毒的事情另外算)确实适合于一般家庭,上上网,发发邮件,打打游戏都不错。可是微软却要把自己包 装成什么”高科技”企业,要在世界各地设置”研究院”,在大学计算机系赠送不适合用于科研的Windows产品,甚至出钱请图灵奖得主来中国畅谈”二十一世纪的计算”,还在大会上宣传自己的 .NET技术。非要把别人认为自己是科学的,自己是领导世界高科技的。但是呢?它什么高科技也没有。欧洲,美国,哪一个关键部门在用微软的东西?NASA? DOE? CERN?你仔细想一想,微软的程序对人类到底有什么重大作用?
什么是Windows能干而Linux干不了的事情?---
”Windows能干而Linux干不了的事情,那就是不需要干的事情。”
有个朋友看我半年没有用Windows,有时就会问我:”你只用Linux,有没有发现有些Windows能处理的事情Linux干不了?”---
我回答说:”Windows能干而Linux干不了的事情,那就是不需要干的事情。”
Windows能做的有益的事情Linux都能做
Windows下的某些功能确实是我们需要的,那么Linux的开发者们和用户也需要这种功能,他们就会去实现这种功能,而且比Windows的方式好得多。由于大多数科学家,工程师用的都是Linux或者某种商业UNIX, 所以几乎所有商业的科学工程程序,比如Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先有UNIX的版本(包括Linux),然后再考虑移植给Windows,甚至根本不移植给Windows,因为Windows的机器一般没有足够的能力运行这样的程序。你不要以为只有Windows才有PSpice, UNIX的HSpice要好得多,而且可以运行在大型主机上。当然它们不是免费的,但是它们值那个价钱。
但是Windows下有些东西在Linux下没有很相似的,或者你找到很多类似的,但是它们每一个比起Windows的那个程序都要差很多,那么原因有两种可能性:
有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。而其它程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于Gtk, Qt的诞生,Linux下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。当然 也有一流的程序用Gtk和Qt,比如GVIM就可以用Gtk作为图形界面,我还知道Synopsys一些程序用了Qt。
我曾经也犯过这样的错误,从外表区分一切。结果优秀的FVWM, lftp, Mutt, wget都被我忽略过。当我找回它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 我第一次看到FVWM觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学看到FVWM都说:”哇!真漂亮。”
有另一种完全不同的方式可以达到相同的目的,甚至更好。
很多人很关心Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个Linux程序能够完全兼容的打开一个复杂的doc文档。但是你永远也不可能有那一天。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文档格式。它一定会不断变化doc文档的内部结构,隐藏一些秘密,让其它公司的程序打开doc文档时总是有某种问题,从而你必需购买Microsoft Office和Windows。
你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是Linux或者其它类型的UNIX,他们没有Word可用,怎么处理文档呢?这么多年没有一个像Open Office的程序出现,难道大家没有办法写文档吗?
显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的幻灯片,它们是什么做的?原来UNIX用户早就有非常方便的troff, LaTeX, SGML等东西可以处理文档,而且它们比起Word都要高明的多。Word显然被这些大拿忽略了,以至于很久以来没有人想在Linux下开发一个类似Word的程序,除非某些公司想抢微软的饭碗。
很多人留着Windows在硬盘上的原因无非是为了用Word和PowerPoint。我见过一个教授,他的Windows笔记本电脑上除了PowerPoint什么都没有。有一天演示的时候,他指着堆乱字符说:”对不起,这是一个公式……怎么每次都是这样……” 其实有比PowerPoint好几百倍的东西可以制造幻灯片,你可以用最简单的方法制造世界一流效果的论文和幻灯片。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离开Windows。
Windows能做的那些没用的事情Linux永远做不好
电脑游戏
有些人说Linux下不能玩Windows下所能得到的所有游戏。的确,Linux下虽然也有少量的游戏,比如Quake。但是它没有Counter Strike, 没有Star Craft, ……
并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。
你可以在CS里杀人,你可以在Tomb Raider里探险,你甚至可以在Tony Hawk’s Pro Skaters里滑板…… 但是It’s not real!你虽然有很高的”反恐技巧”,但是遇到歹徒的时候,你是那么的怯懦;你虽然控制Laura伸手敏捷,但是你打篮球的时候怎么总是被人断球?你虽然可以轻易的在THPS里作出一个 “360 kickflip to hangten grind to fakie”,但是你踩在自己的滑板上的时候还不会ollie!
说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比Windows + PC更好的游戏方式。Sony的PlayStation2, SEGA的DreamCast, Nintendo的N64,Namco的街机……每一个都比Windows游戏精彩,每一个都有如此高的3D性能,以至于Pentium4, Itanium + GForce4都无法与它们比美!
Linux的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。 要玩游戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么Linux几乎没有游戏了吧?
“整理硬盘,优化系统”
这是一个非常有意思的话题,仅次于有关”病毒”的话题。相信很多Windows用户都有整理硬盘的经历。在很多Windows用户眼里,”硬盘用久了,会出现碎片,速度会减慢,需要一个程序来整理,整理硬盘的时候不要做其它工作”,这好像是天经地义的事情。
我也曾经津津有味的看着Norton Defrag一点一点的把我的硬盘排序,调整,用图形的方式显示出来,然后报告“100% 没有碎片。你的硬盘现在已经达到最佳状态。” 我现在才发觉我那时是多么的幼稚。
Linux和UNIX用户似乎从来没有”整理硬盘”这种说法呢?你觉得很奇怪吗?如果你觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,UNIX的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期都要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通 的!
Linux机器根本不用整理硬盘,这就是为什么没有看到过Linux用户整理硬盘。Linux的文件系统是比Windows的FAT, FAT32, NTFS高明得多的文件系统,它们不但可以对文件设置权限,实施完全的保护,而且可以”越用越整齐”,”越用碎片越少”!你应该把文件大部分放在Linux的分区,而不是Windows分区,因为它比Windows分区可靠得多。
还有更滑稽的事情就是有很多”Norton System Doctor”,”Windows优化大师”,”超级兔仔注册表魔法” 之类的程序存在,而且价格昂贵。似乎一个操作系统本来应该有很多问题,需要别的厂商做程序来”优化”它,而且为了得到优化,你需要付钱!这些问题Linux根本就没有,所以不需要什么优化。Linux内核本身就是高度优化的。
IDE
有些人在抱怨为什么Linux没有一个良好的IDE开发环境。Linux现在已经有一些IDE了,但是总是有很多问题。你是不是正在寻找,正在期望Linux某一天可以有一个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要用IDE?你说:”IDE开发迅速,调试方便,适合大型程序……” 那说明微软的程序在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。
高明的UNIX程序员不用IDE,IDE从来就是给初级Windows程序员用的。
你看看大型的UNIX程序,包括Linux内核,各种网络服务程序,Xwindow程序在内,哪一个是IDE搞出来的?我们实验室的EDA程序也没有一个是IDE弄的,我还知道Candence, Synopsys,Mentor的高性能的图形界面EDA程序也都不是IDE写的。你信不信,微软的人在写Windows本身的时候也根本不用IDE。微软内部程序员最喜欢的编辑器其实是VIM,用VIM的微软程序员上次向乌干达的可怜儿童捐助了1000多美元,这是值得称赞的。
有一次某杂志采访一些出名的Linux内核程序员,包括Linus在内,没有一个人用IDE,有的人用VIM,有的用Emacs,只有Linus说”GNU Emacs is evil”,但是其实他用的是一种跟Emacs有同样键绑定功能的MicroEmacs。大家都是用编辑器编辑了程序文件,然后用make这样的自动工具调用gcc编译器完成编译工作的。甚至高级的Windows程序员也不用IDE,他们可以从命令行调用cl,nmake来编译自己的程序。虽然这样的Windows程序员很少,但是他们却是最了解Windows,最高明的Windows程序员。
为什么UNIX程序员不用IDE?明白了这个道理你就能体会到UNIX的设计思想了。首先,一个IDE集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上VIM或Emacs,编译器比不上GCC,汇编器比不上as,调试器比不上gdb,ddd, 跟踪器比不上strace, ltrace, truss。你得到的是一套整合的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套IDE,但是这套IDE的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不能保持原来的某些东西。
而在UNIX下就不一样了。你可以用你最喜欢的VIM编辑程序,你在VIM里可以调用GNU make,make可以调用gcc, ld, ... make的出错信息可以被VIM捕获,VIM能帮你在源程序里定位。你如果喜欢icc, 你可以让make用icc而不是gcc。你如果觉得gdb跟踪变量时比较麻烦,你可以用ddd来显示各种数据结构之间的关系。你还可以在Emacs里调用gdb,那样就可以同步显示源代码了。而且VIM和Emacs还可以编辑很多其它东西,比如信件,LaTeX文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如Mutt, tin都可以在内部使用VIM,这样就更方便了。实际上make在其它方面还能帮你很多忙,我的每一个比较大型的LaTeX文档都是用make维护的。
Linux能干的高精尖的事情Windows都干不了
当然有很多事情是Linux/UNIX的专利了。因为Windows只能装在PC机上,好像以前也有Alpha可以使用Windows NT,但是就是没见到有人用。PC机的能力是很低的,像我们编程序处理NP-Hard问题的人,用Windows的机器显然速度不够,而且有时一个问题算上几天甚至几个星期,Windows机器是以”死机”着称的,我们怎么能放心?所以几乎所有科学计算程序,EDA程序,高性能图像处理程序都不是Windows的。他们有时也会移植一些给Windows,但是常常降低那些程序的能力。你比较过Windows版本的Mathematica和Linux的有什么区别吗?
IBM制造的最大的并行计算机有8000多个处理器,Windows不可能有能力管理这么多处理器,它用的是什么操作系统?答案是Linux。
《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。那也是Linux机器做的。
民航总局用来训练地情人员的虚拟现实训练设备,Windows当然无能为力。那都是商业的IRIX机器。
UNIX是最早支持TCP/IP网络协议的系统。它上面有很多可以互相协作的网络服务程序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖茨还在扬 言:”Internet是没有前途的。” 微软的这个”远见卓识”大家应该都已见识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识了的。
其实你知道了,Windows没有一样有用的事情能比UNIX干的更好。
Linux干不了的有用的事情Windows照样干不了
当然Linux不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是Linux干不了的事情,Windows肯定也干不了。这些事情就是我们需要探索,需要努力的事情了。在你探索的过程中,Linux必定是你的好伙伴。
不要把Linux和Xwindow掩盖起来!
不要把我们的用户当成傻瓜。
什么?你早就知道Windows是垃圾?噢!你怎么不早说呢!害我废话这么多。嘿嘿。
“好了。你知道Windows是垃圾,你现在用什么?”
“Linux + Xwindow”
“那我问你,Xwindow是什么样的?”
“不就是跟Windows差不多吗?只不过 ‘Start’ 按钮比较方,而且上面不是一个Windows标志,而是一个脚丫子。点击一下居然还有很漂亮的中文菜单。我喜欢!”
“你知道什么是’根窗口’吗?”
“不知道。从来没听说过呢?”
“根窗口就是遮盖整个屏幕的那个最大的窗口。”
“哪儿有什么窗口啊!我没有看到呢?”
你发现了问题吗?这些Linux用户说是在用Linux和Xwindow,但是他们对Linux和Xwindow几乎完全不了解。很多人用了那么久Xwindow都不知道根窗口是什么东西,不知道其实按钮也是窗口,不知道窗口管理器和其它程序有什么关系,大家都以为窗口上面的按钮是程序自己放上去的,不知道窗口? quot;class name”,”resource name”是什么东西。他们也不知道 .Xdefaults是用来干什么的。特别是他们很多人都不知道Xwindow的字体是如何命名的,什么是fontset,有了一个新的字体也不知道怎么安装。
他们被遮在Linux之上的一层一层的包装迷惑了,他们等待有图形界面的工具来帮助完成一切事情,他们认为Linux跟Windows一样,只是麻烦一点。他们知道Linux内核很好,但是他们感觉不到Linux和Xwindow在操作层面的天生的先进性,随后不久就把Linux完全删除掉了。你发现没有,要用户理解UNIX和Xwindow的操作层面的先进性,才是留住用户的最好办法。如果用户体会不到操作时的方便和高效,内核再好他们也不会理会。
但是用摹仿Windows的作法来吸引用户,永远会失败的。因为Linux如果摹仿Windows那一套低效率的方式,那么Linux的这套”低效率方式”永远比不上Windows的那一套”低效率方式”。那么用户就会说:”这个Linux,没有一样比的上Windows。”
Linux天生就是继承了UNIX的高效的工作方式,为什么我们要把它掩盖起来?我们为什么只告诉用户KDE的菜单怎么用?我们为什么不能像早期的Xwindow书籍那样第一节就告诉用户什么是X server, 什么是X client,什么是Window Manager, 什么是根窗口。第二章就告诉用户窗口有哪些属性,什么是classname, resource name, hint,怎样使用 .Xdefaults, xrdb ……
在这里我又不得不说一下那些Linux的发行公司和写书的人,他们把Linux和Xwindow包装起来,却没有从基本上告诉用户Xwindow的工作原理。很多书籍讲授的层次就是在Gnome, KDE的菜单操作的层次,靠大量抓图来占篇幅,”繁荣”Linux书籍市场。
现在很多人已经把能够利用别人的库写出一个好看的程序作为自己编程水平的象征。在这?quot;图形化”,”可视化” 的年代,你如果还在用troff, LaTeX写文档,你还在用VIM自己编辑HTML,用Mutt处理邮件,你还在用文本模式的gdb调试程序,你还在用Xlib写程序, 你还在用tin上USENET,你还在自己写Makefile,写机器代码,你还在玩Clossal Cave这样的字符模式冒险游戏,那你就是老古董。
其实这种思想是错误的。虽然你是一个坚决的Linux支持者,但是你的思想是Windows的思想。你认为图形界面,菜单,按钮就可以解决一切问题,就可以给你高效方便。你还是没能摆脱微软给你的潜移默化的东西。你其实离不开Windows那样的环境,你迟早会删掉自己的Linux。
GUI vs. CLI
做一个坚定不移的”两面派”
大家看到这个标题是不是热血沸腾?两派大虾都可以围攻我了:
GUI派用户:”哇!我一看你这小子就是CLI的。要不然自己写什么Makefile?用什么Mutt?”
CLI派用户:”切~ 你还用X!高手都不用X。你是GUI那边的。”
可怜的我:”555~~ 你们都不要我~~ GUI和CLI就那么水火不容吗?”
计算机界这样的门派之分还很多。很有特点的就是CLI和GUI了。CLI (Command LIne)的狂热份子声称永远不用X。我上次在实验室看到一个同学用一个SecureCRT登录到Sun机器,然后用一个vanilla vi编辑程序,我建议他启动一个GVIM过来显示在Exceed上可以有语法加亮。但是他坚决反对,说:”高手不用X。你想想,要是我在一个很慢的网络连接怎么用X?而且好多服务器没有装X程序。”
但是我们实验室的网速可够快,Windows机器都有Exceed啊,而且Sun机器有全套X客户程序包括GVIM。他说他是CLI的坚决拥护者,但是他却在用Windows,他后来打开了好几个SecureCRT,每次从文本框输入地址,用户名和密码,从下拉菜单选择”SSH2”,然后点击”Connnect”。他还不断的夸SecureCRT是”网络管理员投票选出的最受欢迎的登录方式”。老天,SecureCRT本身就是个GUI啊,他其实没有明白Xwindow的好处。
你说我是GUI的?我虽然很少在console下工作。但是我对bash, VIM很熟悉,我可以让bash按照我的键绑定方式来工作。我可以在rxvt里使用Mutt来收发email。我的每个桌面上都常常堆放着一打不同大小的rxvt。我用VIM编辑LaTeX。我自己写Makefile来维护LaTeX文档。我有时用mpg321来放mp3。我上BBS用的我自己写的expect脚本。 好了,CLI派的朋友可以收我做盟友了
你说我是CLI的老古董?我的FVWM被我配置为可以”手写操作”,我只要画一个”r”就可以启动rxvt,我只要画一个 “U” 就可以启动GVIM,…… 我用GVIM语法加亮模式编辑程序,我用Mozilla浏览网页,…… GUI派的现在好像认我做朋友了
好了。CLI派的朋友,虽然我很喜欢命令行,但是我有时在屏幕上左右画一下就可以执行:
Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 -bg gold -fg midnightblue -fn “-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*”
你是不是现在又想把我逐出师门?
GUI派的朋友,虽然我很喜欢窗口。但是我可以在FvwmConsole里输入:
All (rxvt) MoveToDesk
把我所有的rxvt移动到我现在工作的桌面。”这家伙,怎么这么快就叛变了!”
其实何必分什么GUI和CLI,UNIX和Xwindow都是工业标准,它们从设计那天开始就有非常灵活的用法,各个程序,不管是GUI还是命令行的都可以互相协作。UNIX和X是一家,何必搞的那么偏激,非此即彼?你从我上面的行为可以看出GUI和CLI的模糊界线吗?我就是坚定不移的”两面派”。
UNIX是简单的
”我相信简单就是最好,如果太复杂,我是不能理解的。” -Seymour Cray
很多第一次用Linux的人会惊奇的发现,Linux的程序居然不?quot;安装”就可以运行,程序拷贝到随便那个目录都可以用,而不是一定要占用你第一个分区的空间。程序的设置只是一些简简单单的文本文 件。你根本不需要什么”注册表修改器” 就可以改变系统的设置。这就叫做简单,但是简单就是美。虽然这只是UNIX简单性的一个肤浅的认识,你已经体会到了某些东西。
但是简单并不意味着功能弱,并不意味着落后。相反,简单意味着强大,意味着生命力。
我不会再继续阐述我理解到的”UNIX的简单”,因为这个需要自己去体会。
UNIX是永恒的
有人说:”Plan9会取代UNIX,Mach会取代Linux内核。”
但是你如果是一个深入体会了UNIX的人,你就会知道:UNIX的思想是永恒的,不管时过境迁,Plan9是否代替UNIX,UNIX的灵魂都会在Plan9身上现形!
我为同一个设备写过Linux内核和Windows VxD驱动程序。写Linux驱动程序时,我对UNIX设计的完美的一致性,远见性所折服。UNIX用同样界面的read(), write()系统调用就可以对不同的对象:普通文件,设备文件,管道,管道文件,socket,……进行统一的读写操作。我跟本不需要写一个测试用的应 用程序就可以对我的设备驱动进行测试,因为cat, cp, dd, 它们也使用了同样的read(), write(),设备和普通文件在应用程序眼里没有区别。在那个还没有Smalltalk, 没有C++ 的年代,UNIX的设计者已经使用了所谓的 “面向对象方法”。对,C语言也可以实现面向对象。
UNIX的系统调用几十年都没有很大变化,这非但不是顽固,不进步的象征,反而是UNIX的远见卓识的体现!这就跟TeX程序几十年都不变的情况差不多。这些才是真正的永恒的master piece! 你应该改变所有软件都必需从0.1, 1.0, 1.1, 1.2, 2.0,..., 3.0, 3.1, 95, 98, 2000, XP, ... 不断升级的想法。
Windows就不同了,它在最开头只是一个DOS之上的图形包装而已。后来为了兼容以前的糟糕设计,不得不加上很多累赘。我写VxD驱动程序的时候就深有体会,Windows 95程序对设备的操作只有用DeviceIoControl,我不得不写了两个应用程序来对设备驱动进行测试。Windows内核的不一致性和隐密性使我非常恼火。不过Windows WDM驱动程序现在也有了ReadFile, WriteFile,…… 那说明什么?那说明Windows在向UNIX学习,或者有可能是某个UNIX设计人员在微软打了几天临工,顺手加了几个UNIX的东西进去。这样做是没有用的,Windows从一开始就是非常糟糕的设计,它的历史的包袱太沉重了,缝缝补补有什么用?它只能永远的被UNIX甩在身后!
UNIX是强大的
让聪明人干任何他们想干的事情。
UNIX的一个特点就是非常高的灵活性,Xwindow也具有这种灵活性。这种灵活性体现在哪里呢?
UNIX的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它们的行为很多都可以用配置文件来改变。比如GNU bash, 通常缺省的命令行输入方式是Emacs方式,但是只要我编辑一个 .inputrc文件,就可以把它变成vi的输入方式,而且我还可以自己绑定键序列到某些操作。我可以用shopt来设置它的很多特点,比如是否进行通配符扩展,是否可以把一个变量当作一个目录来cd,是否可以自动纠正某些明显的目录名打字错误 ……
UNIX程序设计的思想是提供给用户”机制”,而不限制用户制定”政策”。这是一个重要的尊重用户的作法。
我们再来看看Xwindow。Xwindow是一个出色的设计,它把显示服务器和客户程序分开。一个显示上既可以显示本机上的程序,也可以显示别的机器上的X程序,而它们都遵守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件 …… 比如有时我的XFree86上会出现四个不同机器上的XTerm,两个不同机器上的GVIM,…… 它们统一受本机上的FVWM指挥。
Xwindow程序都具有很多很多命令行参数和resource参数。你可以随意的在命令行或者 .Xdefaults文件设置所有的颜色,字体,尺寸…… 而且如果你用xrdb把 .Xdefaults导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上的时候也会遵守同样的外观规定。
Xwindow的窗口具有Property, 也就是一些可以自己定义的共享数据(原子)。正是因为这些Property的存在,使得Xwindow具有无比强大的生命力。X的窗口管理器和其它客户程序之间并没有统一的协议,但是后来出现了ICCCM(客户程序间通信规范),这个规范就是通过property定义的。现在又有人定义了一套”扩展的窗口协议(EWM Hints)”,使得Xwindow可以具有某些Windows的特征,比如一个工具条程序可以告诉窗口管理器:”这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要越过这个界线。”
一个强大的窗口管理程序比如FVWM,它收到这样的提示时,可以答应工具条程序的这个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!
你想想,是不是有些Windows程序常常弹出一个窗口要你选择 “Yes or No”?你不点击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人,一个智慧的生物,怎能受到一个程序如此的待遇?
还有就是很多Windows程序把人当成傻瓜,而它是”智能程序”。比如,有一个程序就是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了。
如果连”一句话开头一个字母要大写”这么明显的问题都需要程序帮你纠正的话,人脑还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那一大堆菜单里找到怎么关闭这个愚蠢的选项。
只有符号才能完全操纵计算机
我们来说说很多初学Linux的用户。虽然他们在用Linux,但是他们打心眼儿里是觉得Windows的工作方式好,他们希望Linux有一天能”像Windows那样”。你说:”我的鼠标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:”Linux从来没有摹仿Windows,将来也不会。Linux从诞生之日起,它的工作方式就比Windows的先进。
Linux属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”
看看优秀的UNIX程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?
当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文 件的效果,你需要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了awk, sed, Perl,你会觉得那才是真正的自动化啊。
鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。
各个小程序的完美配合
这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能力,然后让它们合作。Xwindow也继承了这种好传统。 这恐怕就是Windows和其它操作系统望尘末及的地方了。UNIX程序设计之统一,配合之完美,真使我难以置信!shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了sed的正则表达式,其它程序基本上都能用了。你一旦学会了vi和VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经设计好了VIM在今天的完美而统一的操作方式!而且vi的操作还体现在Mutt, tin等很多程序中。你甚至可以把bash设置为vi的输入方式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可以在自己的窗口里”嵌入”另外一个 程序。
在Windows和其它非UNIX操作系统中,这种合作是非常困难的。我曾经在Windows下使用Perl来进行一些自动工作。但是Windows的文件操作,管道是如此的不稳定,程序之间基本不能合作。你别想在Visual Studio窗口里面嵌入UltraEdit编辑器,你别想用一个expect脚本来控制telnet到水木清华BBS。
Windows的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的Virtual Terminal, 自己的通讯代码。每一个IDE都自己提供编辑器,编译器,汇编器,调试器。人们为了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器的键绑定,菜单组 织…… 不能DIY!
你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己 想要什么牌子的版面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的古球拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用Windows程序,你得到的是大杂烩,就像你去买”品牌机”,只有那么几种配置,而且附带很多你不需要的软件和服务;就像你去买组装好的滑板,你想要大一点的轮子和窄 一点的板子,但是你没有这种选择余地!Windows程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新买全套配件!
而UNIX和Xwindow就是高档的”组装货”。比如我用Mutt的时候,我可以用VIM也可以用pico来编辑邮件,我可以用ImageMagick也可以用xv来显示附件里的图片,我可以用lynx把HTML附件转成文本嵌入窗口中,我也可以把HTML附件交给Mozilla图形显示。我可以让GnuPG帮我把邮件进行数字签名和加密,我也可以用其它PGP程序。
我想让Postfix而不是sendmail帮我发出邮件,我想让fetchmail帮我收邮件,转发给postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。
学UNIX绝对不是浪费时间
有人告诉我:”你看我用Windows什么都不用学。而用Linux,光是安装就花了我一个星期!”
首先,我要告诉你的是,你装Linux花了一个星期,不是因为Linux不好装,而是因为你已经习惯了Windows,对Linux最初难以理解而已。你想一想你最初安装Windows的时候呢?你花了多少时间搞明白什么是硬盘分区?什么是盘符?什么是目录?你认为Windows就是那么容易可以学会的吗?虽然你觉得没花时间学,但是你以前在用别人的机器的时候已经耳濡目染,自然就了解了。而且由于你想要Linux和Windows并存于硬盘上,又增加了安装难度。而且你肯定没有得到有经验的Linux用户的帮助,否则他们会在20分种之内帮你搞定。一个星期也太夸张了.
如果一开始用的就是Linux就没有这个问题。你想想如果你没有用过windows,你肯定会很习惯 /etc, /usr, /usr/local ,... 而不是C:, D:, E:, ... 是不是?如果你只用过Linux,你第一次用windows时恐怕也会问:”/bin目录哪里去了啊?”
最重要的是,你用惯了的UNIX工具,它们可以伴随你一生,而不会那么容易变化或消失。你可以永远不用再换另外的工具了。除非那个工具比你这个好的太多,而且可以完全模拟你现在的工具。
我们实验室一个60多岁的老师,用vi, cc, make, ...都几十年了,他以前的经验绝对没有白费,而且教会了我们一批又一批的学生。vi伴随着UNIX的最初发行而诞生,直到今天还是世界上头两号编辑器之一!有些人的FVWM配置文件已经用了10多年,现在完全不经修改还可以用。
看看Windows的工具,你从Borland C++ 换到VC, 就必需适应新的环境:菜单不同了,颜色不同了,按钮不同了,帮助信息不同了,热键不同了,编译器参数,调试器功能也不同了,…… 那个时候恐怕花要花你很多时间去适应。当你刚刚适应了VC, 你又要换成VJ, PowerBuilder, C++Builder, ...
很多windows程序员都是这样,开头在dos下用Turbo C, 然后是Borland C, VC, C++ Builder, ......不断追赶微软的潮流。而且微软的SDK, MFC, .NET …… 什么都在不断变化,不断出问题,又不断的在修改…… Windows程序员不得不买又厚又重的Microsoft Press的书籍,看了才一个月,又过时了。今天你才学会了写VxD,明天你就必须用WDM了。你不得不注册MSDN才能赶上Microsoft的步伐。很多人说:”计算机是贵族的专业。” 这就是微软一手造成的。
这些东西才是没完没了的浪费大家的时间和金钱的。这是是浪费生命!我们为什么不使用从诞生就那么一致和完美的UNIX?你需要理解先进工具的设计理念。UNIX的工具就像我们用的汽车,它的离合器,油门,刹车,方向盘,后视镜,永远都在同样的位置。用惯了的话,你对你的汽车的每一个部件都会了如指掌,甚至你自己 都可以修车了。这难道不好吗?
有人说:”你说我们需要了解UNIX,难道你要开车还必须了解汽车的结构吗?” 你去问问开车的司机,哪一个不了解汽车的结构的,那他的驾照就是混来的。你难道想要傻瓜型的”微软牌汽车”吗?我们来看看:
你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱。车上的防撞气囊不时会冒出来,说是为了你的安全。每开100英里要大修一 次,每过一年要换一次引擎。附带的,你还必须换用由微软汽车公司指定的石油公司提供的新型号的机油。你的车出了问题,但是法律规定,你不准私自拆开你的汽 车来修理,你必需到微软汽车公司指定的维修点去,需要付相当多的钱才能修好一个小毛病。
最可气的是,你每换一个型号的微软牌汽车,它的刹车和离合器都在不同的位置,你需要重新去考驾驶执照。如果这辆汽车在途中刹车失灵,你受了重伤,你 也不能状告微软汽车公司,因为你买来汽车之后必须签一个合同,说”由于微软牌汽车对你和家人造成的一切死伤,微软概不负责。”
怎样完全用GNU/Linux工作
说了这么多Windows的不好。我还没有告诉你我怎么用Linux处理有些必要的事情。半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到Win2k来处理汉字。后来我找到了miniChinput, XSIM和SCIM输入法。这下可以处理汉字了。而且VIM和Emacs对汉字支持越来越好。我的大部分文本是用VIM编辑的,包括程序,信件,网页,LaTeX论文,MetaPost绘图语言。
我不用Word这样的程序写论文,而是用LaTeX,因为这是世界上效果最好,最方便的论文工具,是大多数学术杂志要求的格式。幻灯都是用ConTeXt做的,用起来很简单,而且效果非常漂亮。你可以看看我的TeX介绍。
至于绘图,你可以用很多可视化的工具,比如xfig,dia。但是对于我来说,任何可视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了MetaPost。它简单又好用, 而且效果是世界一流的。我的插图,如果不是图像,都是MetaPost画出来的。
我曾经抱怨mozilla-mail经常突然消失,损坏我好几封快要完成的信件。后来我发现mozilla的邮件处理程序确实是不稳定的,功能又弱,有经验的UNIX用户都不用这样的程序。Mutt是一个非常稳定可靠的UNIX邮件处理程序,而且功能非常强大。我曾经为Gnome和KDE的不稳定而烦恼。现在我找到了非常强大的FVWM。KDE,Gnome也能和FVWM一起工作。虽然Gnome和KDE总体不稳定,但是某些部件程序还不错,很多gtk, Qt的程序也很不错,它们很多都是可以独立于这些桌面环境运行的。
Linux有很多强大方便的工作方式是Windows没有的,或者有类似的东西,但是很差劲或者用起来不方便。比如ssh服务,rsync,cvs,expect ……
结论
我写这么多的目的是什么?我希望喜欢Linux的朋友,完全清除微软和Windows灌输在你脑子里的谬论,别再相信它们所谓的”新技术”,别再追赶Windows,因为追赶Windows = 倒退。马克思有一个思想很重要,”新生事物并不一定是在最近出现的。”
UNIX,Xwindow, TeX虽然都比Windows先出现,但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。
消除学计算机很难的幻觉,勇敢的拿起像bash, FVWM, TeX, VIM, Emacs, Mutt ……这样强大的程序,勇敢的面对符号。不要再埋怨”Linux为什么不能像Windows那样”,不要再浪费时间试用这样那样的程序,不要再忙着升级。你需要理解UNIX的工作方式,因为那是大多数科学家的工作方式。Linux可以成为你的好朋友,你需要认识它,了解它,信任它,才能完全的靠它来高效的工作。当然,在游戏机,手机,掌上电脑里,或者在用电脑来娱乐的时候,用一些 “傻瓜软件”还是不错的.
我希望小学,中学的计算机老师能够提高自己的素质,在孩子们的启蒙教育中充分利用Linux神秘的特点,引起孩子们对数学,对符号的好奇心。诱导他们用计算机来解决世界上的有趣问题,而不要把教学的范围局限于计算机的操作和它自身的问题。
附录: 我用来处理日常事务的Linux程序
好了好了。我知道你发现自己应该转向Linux,你很后悔当初为什么中了微软的邪。但是不要着急。因为这些东西本来只是工具,它们是用来完成你的主要任务的辅助而已。你以前选错了工具,这不 要紧。你还是拥有你自己原来的专业技能,那才是最重要的。工具的东西只有慢慢适应转换,不能一蹴而就,否则你会感到非常没意思,甚至放弃。
如果你只想做一个像我这样的普通用户,主要目的是用Linux来完成自己的任务,那就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理员确实很辛苦。这里我对实验室的网管同学鞠一躬,谢 谢你的指点和帮助. 不用把你的机器当成网络服务器,不用开放没有必要的服务,设置好ssh, ftp已经足够了。这样会省去了解很多没必要了解的东西的时间。不用过度考虑”安全”,因为Linux缺省已经很安全了。不过你有兴趣了解更多那也无妨。
下面给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工程软件比如Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其它物理上的,化学上的,生物上的 …… 都必然有Linux和UNIX的版本。当然他们很多不是免费的,不要总是觉得什么都应该免费,自由不等于免费。它们是经过很多人辛勤劳动的产物,是可靠的程序,它们物有所值。
下面列出我常用的一些Linux程序。一个列表里可能有很多,那是为了方便你来选择,我列出了比较信得过的。但其实很多只有第一个是我真正在用的,我不喜欢试用程序。我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,那样可以省去我很多麻烦。
Shell: bash。它结合了csh和ksh的优点,并且有readline功能,你可以随意绑定自己的键盘。
编辑器: VIM, Emacs。
程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...
论文,幻灯工具:LaTeX, ConTeXt
绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用xfig, dia来画一些流程图之类的图片。
图像处理:ImageMagick。其中的import程序可以屏幕抓图,convert程序可以转换图像格式,display可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用Gimp, 它几乎和Photoshop差不多。
自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图…… 全自动,而且不会重复劳动。
数值计算程序:SciLab。这个程序基本上可以代替Matlab。
代数计算程序:MAXIMA。这个程序基于世界上最老的计算机代数系统之一: 由美国能源部(DOE)发行的MIT Macsyma系统。它是用Common Lisp实现的。很多现在的符号计算程序比如Maple都从MAXIMA身上学到很多东西。它现在经过DOE批准以GPL发行,永远是一个自由软件。
加密程序:GnuPG。我的PGP密钥就是它搞出来的。
打包,压缩程序: 什么都有: tar, gzip, bzip2, zip, rar, ...
虚拟光驱程序: Linux不需要虚拟光驱程序,直接mount就行了。
ftp服务器:proftpd, vsftpd。proftpd功能很强,但是我只用了最简单的一种设置。
WWW服务器:apache。(我一般没有开)
ftp客户程序:lftp,ncftp。它们都是文本方式操作的,但是比起图形