Unix传奇(下篇)
【本文曾于2007年3月于 我在CSDN上的BLOG 发布,现在我把其搬到酷壳来,一来是觉得这段历史相当传奇,值得大家再看看,二来也和我在酷壳上发布的一些文章相互链接。】
- Unix与黑客文化
- Unix的历史教训
- Unix 家族谱
- Unix的特点
- Unix的影响和哲学
- Unix痛恨者手册
Unix与黑客文化
黑客的文化和Unix的商业化存在着必然的联系。自从Unix出现,黑客文化就与之而来。
1993初,一个悲观的观察家撰文指出,已经有理由认为Unix的传奇故事连同他带有黑客文明将一同破产。许多人预测,从那时起Unix将在六月内死亡。他们很清楚,十年的Unix商业化,使自由跨平台的Unix梦以失败告终。Unix允诺的跨平台可移植性,在一打大公司专有的Unix版本之间不停地斗嘴中丢失,一个完美的操作系统最终沦为多种版本的一团乱麻,这应该说是人类文明史上的一个重大悲剧。
在专有软件社会中,只有像微软一样的“集权制,大教堂”生产方式才能成功。那个时代的人悲观地相信,技术世界的个人英雄主义时代已经结束,软件工业和发展中的互联网络将逐渐地由像微软一样的巨型企业支配,再也没有“佐罗”,世界是恺撒大帝的世界,计算机文明将进入黑暗的帝国时代。黑客已经死了,自由不付存在。
自从Unix出现以来,第一代的Unix黑客似乎垂垂老矣,衣食不饱( Berkeley计算机科学研究组在1994丢失了自己基金)。这是一个抑压的时代。专有的商业Unix的结果证明那么沉重、那么盲目、那么不适当,以致微软能够用那次等技术的Windows抢走他们生存的空间,拿走他们的干粮。黑客世界的残余力量被逼到了世界上的角落里,苟延残喘。
就在黑客文化日渐衰落之时,美国新闻周刊的资深记者Steven Levy完成了著名的《黑客列传》一书,书中着力介绍了一个人物:Richard M. Stallman的故事,他是麻省理工学院(MIT)人工智能实验室领袖人物,坚决反对实验室的研究成果商业化。他是商业软件社会中坚强的一员,决不随波逐流,建立了全新的黑客文化。
Richard M. Stallman(他的登陆名RMS更为人熟知)早在1970年代晚期就已经证明他是当时最有能力的程序员之一。Emacs编辑器就是他众多发明中的一项。RMS的目标是将后1980的松散黑客社群变成一台有组织的社会化机器以达到一个单纯的革命目标。也许他未意识到,他的言行与当年卡尔·马克思号召产业无产阶级反抗工作的努力如出一辙。RMS宣言引发的争论至今仍存于黑客文化中。他的纲要远不止于维护一个代码库,已经暗含了废除软件知识产权主张的精髓。RMS通过“自由软件(free software)”让黑客文化更加有自我意识。当然,这个充满魅力又具争议的人物本身已经成为了一个黑客文化英雄。
只有痴迷的“黑客”和具有创造力的怪人结成的反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。 —— 《 The Art of Unix Programming 》
RMS让世界上所有的人都知道,入侵电脑系统只是低级不入流的黑客干的事,真正的黑客,是为了自由,为了软件的自由,为了挑战计算机世界中的霸权主义而斗争。他们不是街头小混混,他们更像是绿林好汉,更像是罗宾汉,更像是佐罗。就像渴望民主的人民同专制的政府斗争一样。RMS领导着许多的黑客通过互联网向专有软件发出宣战。
X Windows是首批由服务于全球各地不同组织的许多个人以团队形式开发的大规模开源项目之一。电子邮件使创意得以在这个群体中快速传播,问题由此得以快速解决,而开发者可以人尽其才。软件更新可以在数小时之内发送到位,使得每个节点在整个开发过程中步调一致。网络改变了软件的开发模式。
另一方面,RMS的理论体系有许多东西非常有争议,他的GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写Unix的年头都比GPL声明要长得多,GPL依然有太多的限制,而BSD协议则比GPL更加的自由。另一方面,RMS走向了另一个极端,他是完全反版权的,反商业化的。把软件产品从强制收费推向了强制免费、共享和开源,这也为他带来了许多许多的争议。
在RMS组织黑客闹革命的年代里,没有多少黑客认同于RMS的理论体系,更多的他们参与GNU只是为了体现那种在互联网上协同工作,令人激动的工作模式。自从GNU设立以来,争议不断,而黑客文化却从未有统一在他的理想体系之下。
自从Linux出现以后,一个新的黑客领袖出现了,Linus Torvalds的中庸态度网聚了世界上顶尖的黑客,其绕过了GPL和反GPL的派系之争,他使用GNU的工具从而以GPL的“传染性”保护了Linux,但他同时也不承认RMS的理论思想体系,他即开源,又支持商业化。虽然,他没有带给黑客们什么重要的思想体系或统一的价值观,但他整合了全世界黑客的阵营,让所有的黑客的行为都围绕着Linux这一事物进行。他以“用自由软件是因为它运行得更好”轻而易举地盖过了“用自由软件是因为所有软件都该是自由的”。
1998年初,这种新思潮促使网景公司(Netscape Communications)公布了其Mozilla浏览器的源码。媒体对此事件的关注促成了Linux在华尔街的上市,推动了1999-2001年间科技股的繁荣。事实证明,此事无论对黑客文化的历史还是对Unix的历史都是一个转折点。
Unix的历史教训
下面的文字出自《 The Art of Unix Programming 》(Unix编程艺术)。令今天我们所有人所反思。
在Unix历史中,最大的规律就是: (看看《 谁写了Linux 》你就会知道这一规律)
距开源越近就越繁荣。任何将Unix 专有化的企图,只能陷入停滞和衰败。
回顾过去,我们早该认识到这一点。1984年至今,我们浪费了十年时间才学到这个教训。如果我们日后不思悔改,可能还得大吃苦头。
虽然我们在软件设计这个重要但狭窄的领域比其他人聪明,但这不能使我们摆脱对技术与经济相互作用影响的茫然,而这些就发生在我们的眼皮底下。即使Unix社区中最具洞察力、最具远见卓识的思想家,他们的眼光终究有限。对今后的教训就是: 过度依赖任何一种技术或者商业模式都是错误的 ——相反,保持软件及其设计传统的的灵活性才是长存之道。
另一个教训是: 别和低价而灵活的方案较劲 。或者,换句话说,低档的硬件只要数量足够,就能爬上性能曲线而最终获胜。经济学家Clayton Christensen称之为“破坏性技术”,他在《创新者窘境》(The Innovator’s Dilemma)[Christensen]一书中以磁盘驱动器、蒸汽挖土机和摩托车为例阐明了这种现象的发生。当小型机取代大型机、工作站和服务器取代小型机以及日用Intel机器又取代工作站和服务器时,我们也看到了这种现象。开源运动获得成功正是由于软件的大众化。Unix要繁荣,就必须继续采用吸纳低价而灵活的方案的诀窍,而不是去反对它们。
最后,旧学派的Unix社区因采用了传统的公司组织、财务和市场等命令机制而最终未能实现“职业化”。只有痴迷的“黑客”和具有创造力的怪人结成的反叛联盟才能把我们从愚蠢中拯救出来——他们接着教导我们,真正的专业和奉献精神,正是我们在屈服于世俗观念的“合理商业做法”之前的所作所为。
Unix族谱
Unix的故事仍旧延续着……,许多网站也为这段历史留下记录。一个详细记录Unix历史的网站(http://www.levenez.com/unix/),这个网站忠实记载着1969~2005 年Unix发展的大事,而且还有 PDF 档案可供下载,上面有一个庞大的UNIX家族版本树,让人叹为观止。网站的首页陈列每个时期Unix的历史,也代表着无数工程师的心血与努力。
下面是一个简单的Unix的族谱:
|--AT&T (1969)-----\ | | | V6 (1976) | | | V7 (1979) | | | Novell owns AT&T's Unix (by 1994) | _____________|____________________ | | | | | | | AIX IRIX SCO HP-UX Solaris 2.X | (IBM) (SGI) (HP) (Sun) | | |--Berkley (1977)-----\ | | | 1BSD (1977) UNIX-| | | 4.4BSD (1993) | | | Net/2 | | | 4.4BSD-Lite (by 1995) | ________________|____________________________________ | | | | | | | | SunOS Ultrix NetBSD OSF/1 NeXTSTEP Mac OS X | (Sun) (DEC) (Various) (DEC) (NeXT) (Apple) | (FreeBSD) | | |--Hybrids----\ | Linux (Various) | |____________________________________________ | | | | | | | RedHat Debian Mandrake Slackware S.u.S.E. | (Walnut Creek) | |_____________________________________________ | | | | | MkLinux LinuxPPC TurboLinux OpenLinux CorelLinux (Apple) (Caldera) (Corel)
点些查看《 Linux 分发包族谱 》
Unix的特点
现在的文献中提到Unix基本上是说,由Ken Thompson和Dennis Ritchie共同开发的。而通过历史我们也能发现,Unix的主要是由Ken Thompson写下的。但在学术界,Dennis Ritchie的名字往往被排在了Ken Thompson前面的。这就是因为,Dennis Ritchie不但发明了C语言,而且当时他设计Unix操作系统的设计思想,影响了整个世界,直到今天。
当时,他们开发UNIX,没有正式立项,是Ken Thompson和Dennis Ritchie等少数几个人偷偷干的,如果一切都要从头从新设计,那几乎是不可能的。所以,Unix吸取与借鉴了Multics的经验,如内核,进程,层次式目录,面向流的I/O,把设备当作文件,……等等。但是Unix在继承中又有创新,比如Unix采用一种无格式的文件结构,文件由字节串加\0组成。这带来两大好处:一是在说明文件时不必加进许多无关的“填充物”,二是任何程序的输出可直接用作其他任何程序的输入,不必经过转换。后面这一点叫做“管道”(piping),这就是Unix首创的。此外,像把设备当作文件,从而简化了设备管理这一操作系统设计中的难题,虽然不是UNIX的发明,但是实现上它采用了一些新方法,比Multics更高明一些。
下面是Unix的特点:(30多年过去了,这些东西早已变成经典)
-
Everything (including hardware) is a file
所有的事物(甚至硬件本身)都是一个的文件。 -
Configuration data stored in text
以文本形式储存配置数据。 -
Small, single-purpose program
程序尽量朝向小而单一的目标设计 -
Avoid captive user interfaces
尽量避免令人困惑的用户接口 -
Ability to chain program together to perform complex tasks
将几个程序连结起来,处理大而复杂的工作。
Unix的影响和哲学
Unix是第三次工业革命中计算机软件领域最具代表性的产物。在这近40年中,由Unix造成的影响是最有深远意义的。就我看来,Unix为软件领域带来了至少以下有积极的东西,由这些东西所引发的直接或间接的事物更是举不胜数。
- 软件开发的若干哲学和思想。
- 全民参与推动软件,代码共享的模式。
- 开启了黑客文化和开源项目。
- 免费和商业的完美结合的Linux。
- C语言,而后发展的C++,Java等等类C的语言和脚本。(参看《 C语言的演变史 》)
- TCP/IP,其的Socket编程已成为今天通用的网络编程主流。(参看《 到处都是Unix的胎记 》)
不能不说,AT&T虽然发展了Unix,但今天Unix的混乱的局面也和AT&T 有着直接原因。但反过来说,如果没有AT&T的反面教材,今天的GNU/Linux很有可能也不会出现。AT&T究竟是限制了Unix的发展,还是以反面示例促进了Unix社区,已不好评说。今天,软件是商业化好还是开源好的争论还在继续,纵观这几十年来Unix的历史,Linux的划时代地出现。相信你会得出自己的结论。不管怎么样,Unix的经历对计算机领域贡献的不单单是技术,他给我们提供了丰富而生动的教材。特别是Unix引发的哲学,让今天的我们依然受益不浅。
说到Unix为我们所带来的软件开发的哲学,我必需要说一说。Unix遵循的原则是KISS(Keep it simple, stupid)。在 http://en.wikipedia.org/wiki/Unix_philosophy 上有很多的基本上大同小异的Unix哲学,都是很经典的。
Doug McIlroy 是认为UNIX的哲学是这样的:三条哲学,简明扼要,就是这三条哲学贯穿着整个Unix世界。尤其是第一条“do one thing and do it well”真是相当精彩!
- Write programs that do one thing and do it well.
- Write programs to work together.
- Write programs to handle text streams, because that is a universal interface.
只要是Unix的程序员,他们会比别的程序员在任何时候都会不停地强调着这三条哲学。
而《 The Art of Unix Programming 》总结了下面这些哲学,都是至理名言啊。
- Rule of Modularity: Write simple parts connected by clean interfaces.
- Rule of Clarity: Clarity is better than cleverness.
- Rule of Composition: Design programs to be connected to other programs.
- Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
- Rule of Simplicity: Design for simplicity; add complexity only where you must.
- Rule of Parsimony: Write a big program only when it is clear by demonstration that nothing else will do.
- Rule of Transparency: Design for visibility to make inspection and debugging easier.
- Rule of Robustness: Robustness is the child of transparency and simplicity.
- Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.
- Rule of Least Surprise: In interface design, always do the least surprising thing.
- Rule of Silence: When a program has nothing surprising to say, it should say nothing.
- Rule of Repair: When you must fail, fail noisily and as soon as possible.
- Rule of Economy: Programmer time is expensive; conserve it in preference to machine time.
- Rule of Generation: Avoid hand-hacking; write programs to write programs when you can.
- Rule of Optimization: Prototype before polishing. Get it working before you optimize it.
- Rule of Diversity: Distrust all claims for “one true way”.
- Rule of Extensibility: Design for the future, because it will be here sooner than you think.
X Windows 的设计者 Mike Gancarz 给出了下面九条哲学思想
- Small is beautiful.
- Make each program do one thing well.
- Build a prototype as soon as possible.
- Choose portability over efficiency.
- Store data in flat text files.
- Use software leverage to your advantage.
- Use shell scripts to increase leverage and portability.
- Avoid captive user interfaces.
- Make every program a filter.
在今天,这种思想依然被传承着,在影响着世界上各个角落的每一个程序员。
Unix痛恨者手册
这里还需要值得一提的是一本叫《The Unix-Haters Handbook》,中文译做《Unix痛恨者手册》。可以在这里下载: http://research.microsoft.com/~daniel/uhh-download.html 。其中以调侃的语气声讨了Unix的种种不是。虽然这是十年前的一本书了,但还是值得一读。这本书指出了许多Unix的设计错误,指出了种种看起来很合理的设计走向了荒谬,还这样调侃了C语言——“如果说C语言给足了让你上吊的绳子,那么,C++在给了你足够的绳子把你的邻居全部捆起来之后,还给了你足够的绳子让你为一艘小帆船装上帆,最后你还有足够的绳子把自己吊死在帆船的桅杆上”。呵呵,相当的尖酸刻薄吧。里面有一句对操作系统的评价是这样的:“The fundamental difference between Unix and the Macintosh operating system is that Unix was designed to please programmers , whereas the Mac was designed to please users. (Windows, on the other hand, was designed to please accountants.”(Windows设计给会计人员?!连计算机用户都不是了,呵呵)
不过,我可以感觉得到这本书的作者在书中对Unix的感情是比较复杂的,爱恨交加,在书的最后有这样一句话“would anyone have spent this much time and effort writing about how much they hated Unix if they didn’t secretly love it? I’ll leave that to the readers to judge, but in the end, it really doesn’t matter: If this book doesn’t kill Unix, nothing will”。是的,如果Unix能够存活这么长的时间,那么,不会有什么东西可以把他消灭了。
从《Unix痛恨者手册》这本书,再加上Unix的历史,我们可以感到Unix的经历的风风雨雨,在Unix上面出现有种种教训,近40年的历程,Unix历经磨难,几近夭折,一路走来的确很不容易,让人由衷感叹。今天的Unix,今天的软件工业和以前相比已是不可同日而语。很大程度上,这些都要归功于这个充满苍桑的Unix。
后记
在中国我们开始学习计算机的时候,我们被Microsoft所创造的文化所笼罩里。就在Unix出现革命性的转变,在Unix影响计算机世界文化的那几年里,科班出生专业开发人员学习的是MS-DOS和微软的文化,我们犹如一个井底之蛙一样,对外面的翻天覆地的变化无动于衷。微软创造的文化在我们这里尤其地根深蒂固,我们几乎忘记了另外一边的Unix(参看《 Unix 40年:Unix年鉴 》、《 Unix 40年:昨天,今天和明天 》)。
在那充满激情的Unix的岁月里,大伙为了科研目的或个人兴趣在Unix上进行各种开发,并且不计较金钱利益,将这些源码公开,互相共享。在那里,开发和自由成为主题,正因为如此,当今的世界才如此丰富多采。在40年Unix文化和技术积淀的里面,蕴涵着比较纯正的计算机文化和思想。
纵观整个Unix的历史过程中,许许多多的程序员、工程师前辈们在Unix中所摸爬滚打,他们的辛勤地、他们呕心沥血地跟随Unix,努力建立一个繁荣的计算机世界的文明。Unix不是一个简简单单的操作系统。有人说,Unix是程序员设计给程序员的,一点没错。Unix的近40年历史造就了它的博大精深,它给程序员们带来的绝不仅仅只是技术上的知识。它的失误,它的无奈,它的精神,它的荣耀,它从技术和思想上都启迪着我们。对于程序员来说,学习Unix就等同于向前辈程序学习。无论你是什么样的程序员,你都应该了解Unix,这是开发人员的根,前面的开发者造就了它,而它又在引领后面的开发人员,它是前辈程序员们交给我们的一份礼物,一个接力棒,它是开发人员赖以生存的土壤,是上一辈程序员留给我们这一代程序员开启未来的钥匙。Unix就像一个程序员教父一样,理当受到我们的尊敬和崇拜。
参考资料
- Peter H. Salus 的《 A Quarter Century of UNIX 》,这被认为是UNIX的标准历史。
- Eric S. Raymond 的《 The Art of Unix Programming 》
- http://www.wikipedia.org/ 维基百科
- http://www.computerhope.com/history/ Computer History
- http://www.lotsir.com/Blog/article.asp?id=494 Lotsir’s Blog — 《 Unix&Linux 历史重温 》
- http://www.aka.org.cn/Docs/hacker-history.html 《 黑客文化简史 》
- http://www.simson.net/ref/ugh.pdf 《 The UNIX-HATERS Handbook 》
- http://free-electrons.com/doc/free_software/img0.html 《 GNU/Linux Free Software 》幻灯片
- http://cm.bell-labs.com/cm/cs/who/dmr/hist.html Dennis M. Ritchie 《 The Evolution of the Unix Time-sharing System 》
(转载时请注明作者和出处。未经许可,请勿用于商业用途)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《 Unix传奇(下篇) 》的相关评论
通读了上篇和下篇,我虽然是大二的时候才对linux有了印象,最后一段话感触很深刻,这也是对中国教育的一种讽刺了,不过我喜欢这种戳脊梁的话,无论什么时候看到这个文章我都不会觉得晚,而且很多历史我还是知道的,现在把它们连成一片了,真的很不错
http://gcd0318.wordpress.com/2012/07/23/linuxunix%E8%AE%BE%E8%AE%A1%E6%80%9D%E6%83%B3%EF%BC%9A%E5%85%B3%E4%BA%8E%E4%B8%96%E7%95%8C%E8%A7%82%EF%BC%8C%E6%98%AF%E4%B8%8D%E6%98%AF%E7%A8%8B%E5%BA%8F%E5%91%98%E5%8F%88%E5%A6%82%E4%BD%95/
2012年07月23日
Linux/Unix设计思想:关于世界观,是不是程序员又如何
Filed under: 感悟 — gcd0318 @ 00:41
这本书从头到尾都在回答两个问题:为什么Unix类操作系统(包括但不限于各种Unix、Linux以及BSD,以下没有特殊说明或者对比时,都只用Unix来表示所有Unix类操作系统)无法成为主流,以及,为什么我会这么喜欢Unix
在开始说这本书之前,且容我先讲一段个人往事
多年之前的一次面试,我被问到,是否用过Linux,我说用过,但是更熟悉Unix。这是实话,因为以当时我的知识水平,对Linux的认识还停留在,这是一个很像Unix的东西而已,但是至于具体到底有多像,是不是皮像肉也像,则不大了解。于是对方问我对Unix熟悉到什么程度,我说上学的时候通读了Lions的代码——那是我们当时很流行的一本书,没可能没读过的。对方仿佛瞬间来了精神,脸上写满了各种字体的难以置信和不以为然,于是挑衅的让我描述一下Unix的文件系统实现
其实我大可按照操作系统课上作为例子讲解的系统5的套路随便吹吹,反正大同小异,反正那些家伙们也肯定不懂,不过我想了想,还是忍住了,告诉它们,我说不出。于是,正中那些家伙们的下怀,一个个很得意的长出了一口气,互相看看,猥琐的笑笑,然后靠在椅子里开始找别的话题
面试嘛,很自然的就往下进行,到了某个标准的环节,自我总结优点和缺点。其实这类问题我一向是拒绝回答的,因为我根本不觉得人有优点或者缺点什么的,人只有特点,之所以被认为是优点或者缺点,那是没有被正确的利用。所以一般我都说些莫名其妙的答案,比如,我是早上5点55出生的,我爱吃红烧肉,之类之类。不过这次,由于之前那些猥琐的笑让我很不爽,我决定发泄一下,因此我说,我读书善于抓住重点,这是我的优点,缺点就在于,对于不是重点的问题往往容易忽略。理所当然的,它们自然是要追问我,让我拿个例子出来。于是我说,就比如我当年读Lions的源代码,我只记住了重点问题,比如Unix的设计到底遵循着什么样的原则,才能够让它在几十年里长盛不衰,而文件系统实现之类这些细枝末节的问题,我是不怎么在乎的,当时看看,需要用的时候去查,这种数黑弄黄寻章摘句的事,我不怎么在行
那些人脸上出现了让我看着很爽的尴尬,也许他们听不懂最后一句,但是前面的话应该还是理解得了的
习惯性的跑个题
面试里有几个最白痴的问题,比如就前面这种优点缺点的问题,还有比如很多人都和我一样遇到过的,当我还在做开发的时候,问我解决过的印象最深刻一个难题是什么,当我转做测试之后,问我发现的最有价值的一个bug是什么,这类问题基本上,我的回答都是看心情,要是心情不好,对这群面试的家伙或者这个公司没什么好印象,那么也许我就随便说一个案例,然后胡诌几句深刻的影响和意义之类,要是很想得到这个职位,那么我就会明确的说,其实我解决的每个问题,每个我发现的bug,我都印象很深刻,没有最深刻。所以呢,列为看官,若是有朝一日面试到我,这种白痴问题就不问也罢了——当然了,也可以问问看,看我当时的心情怎样
习惯性跑题暂时告一段落
呵呵,赌气归赌气,Unix的伟大,绝对不在于文件系统进程调度之类的具体细节问题,至少这不是最主要的亮点,至于到底为什么,我也想过,但是说不清楚
一直到,遇到了这本书的作者
作者Mike Gancarz,我大概听说过,因为他更早的一本The Unix Philosophy在GNU乃至整个程序员界都太有名了。不过很不幸的是,我至今没有通读过原本,只是支离破碎的看过一些节选,以及其他程序员的读书笔记。所幸这些读者都还算是有些眼界和智慧的,因此那些读书笔记和广为流传的片段节选都抓住了一些最核心的精神,所以我的损失也并不太大。这次读Linux/Unix设计思想,算是第一次和这个作者接触——当然了,还不能算是直接接触,因为毕竟,我读的是译本而不是原文
凡是自称程序员的,哪怕再不名副其实,应该也都不至于不知道Unix,哪怕不是从事和它相关的工作。Unix的名头在程序员的圈子里,那是怎么夸张都不过分的响亮——不过,Unix的知名度和影响力,大概也就是只局限于这个圈子了,其他领域知道Unix的人恐怕凤毛麟角,那些人也许接触的更多的,还是Windows或者Mac OS
不得不说,Unix是优秀甚至伟大的,但是为什么酒香还怕巷子深,问世几十年以来,始终就不能成为主流呢
Linux/Unix设计思想就回答了这个问题:因为一般人都是惧怕计算机的,它们不理解计算机复杂的内部结构和原理,因此也就排斥和恐惧,不愿意接触到太多的细节,对于它们来说,最好就像Windows那样,一切都只需要按照明确的操作指令按一下,甚至连按一下都不需要,就都被安排好了
我和我那个同样对计算机充满了恐惧的妻说起,妻说没错,就是要这样。这也是普通用户的典型需求,程序员,尤其合格称职的程序员(而不是仅仅有个程序员的职业标签,实际上绝大多数做着所谓的程序员工作的,都不是合格称职的程序员。欢迎对号入座)毕竟属于稀有动物,所以真正热爱Unix的,也只可能是少数派
其实就算是程序员,也对Unix的某些思想有很大的排斥。我记得我在很多次面试的时候都被问过一个问题,让我实现一个strcpy,但是我的答案总会被挑剔,问我,如果传入的是无效指针怎么办。起初我也很老实谦虚的说,哦,应该加上一个assert。但是当我真的打开ANSI C的库时,我却看到,strcpy也没有判断指针是否有效。这就让我觉得理所当然了,因为我每次要使用strcpy的时候,我确实是都要确认一下指针有效的。既然如此,为什么当我要实现一个strcpy的时候,必须验证一下指针呢
又比如Unix著名的“没有消息就是好消息”,就曾引起某些年龄较小接触Unix之前接触过MS系操作系统的程序员很不习惯。就如书中提到的查询文件但是没找到,Unix拒绝提供类似DOS的那种“File(s) not found”的提示,就让这类程序员很不习惯。其实这还不是最被诟病的。Unix删文件是没有提示的,不会像Windows那样去确认,就如作者在书里所说的,重置一个分区,这么大的动作,Unix给出的最强烈的警告,也不过就是一句“Are you sure what you are doing”而已——Unix在这方面,可以说残缺的简直到了极限。但是我觉得这么做可以理解,也理所应当,用户当然要为自己的行为负责,用户应该知道自己正在做什么,文件误删了怎么办?下次吸取教训吧,毕竟这个世界上,不能重新来过的事很多,不差这一件
我和一位师兄说起,他却说,因为很多程序员觉得,由自己来保证指针的有效性,让用户自己来保证每次删除文件都不是误操作,太麻烦了,还经常忘——啊哈,原来如此哦,就是因为懒惰的人愚蠢的人太多,所以我就要为它们考虑,这就是典型的Windows所传播的价值观
没错,Unix就是这样,它给使用者尽可能多的自由,让每个人可以按照自己喜欢的方式来支配计算机,操作一切。因此Unix从不限制用户的行为,而是让用户随心所欲,默认用户有勇气同时有能力而且愿意并且渴望用计算机做到更多的事,所以就把一切都交给用户,让用户自己来做各种决定,同时当然也就要为自己负责,这就是Unix。其实作者列举的所有所谓的设计思想,都可以归结在这下面,因此才会提供了无数的小工具,而不是一个一揽子的解决方案,所以才会减少交互的信息,而不是没完没了的罗嗦确认
高手当然都喜欢这样,少限制,多自由,信息简单但是准确,而这对于一般的使用者来说,则是天大的麻烦,人们会觉得,为什么我要知道那么多,这些应该是计算机替我做好的,出了问题为什么要我来负责,难道我有错计算机就不能替我承担一部分责任吗——可以说,Windows恰恰是在迎合着普通用户的这种需求,低三下四的取悦着这些用户,既然用户怕麻烦,那么就让计算机来做各种简化操作的工作,所有的危险操作,都要承担起审核的责任,和用户反复的确认(不过即便如此,依然有很多白痴做出愚蠢的操作)
若干年前微软曾经假模假式的搞了一次学术界的合作活动,请高校研究所的学者去读源代码。我的老师恰好就在应邀之列,据他说,就是弄了一间大屋子,在里面放满了打印出来的代码,然后给两天时间随便看,但是不许复印不许抄写。这可真是要多虚伪有多虚伪啊。老师告诉了我们他大致通览之后所留下的印象:其实真正有用的代码没多少,和用户之间的交互信息倒是很多很多——看吧,果然如此,怪不得Windows系列产品越来越占磁盘吃内存呢,大概也只有硬件厂商会喜欢这样的东西吧,而且微软还把这种设计叫做“对用户负责”——天可怜见啊,为了一群对自己都不负责的用户,微软的工程师们真是殚精竭虑,要知道,Windows的用户那么多,这里面谁知道会有多少神经病,就凭一个微软的那么点工程师,肯定是防不胜防啊,累死也不可能堵死所有的窟窿
我也和妻说起过这个事,因为我是很喜欢Unix这个风格的,有事说事,没事闭嘴,妻则说,就是很“鸟”嘛,摆酷。诶,对呀,这就是妻一贯的典型风格,总是能够一语中的:大部分人就是受不了别人当面摆酷,哪怕其实人家的确真的就是很酷
其实看完了这些,Unix为什么在圈内圈外都不能百分之百的受到欢迎,就很明显了。试想如果这是一个人,虽然才华横溢无所不能,但是就喜欢摆酷,从不取悦周围的人,无论谁要接近它,都要先证明自己够资格进入它的交际圈,那么它必然是缺少朋友的——但是这种人身边如果有朋友,一定是素质超群的,就像Unix世界,在这个世界面前,微软的Windows帝国就仿佛是一群乌合之众,是那么的微不足道。也是因此,虽然Unix也是一群人七手八脚攒出来的东西,但是却有最接近完美的质量
话说到此,就回到了我最开头的那句话——这本书从头到尾都在回答两个问题:为什么Unix类操作系统无法成为主流,以及,为什么我会这么喜欢Unix
向伟大的程序员们致敬~
我和一位师兄说起,他却说,因为很多程序员觉得,由自己来保证指针的有效性,让用户自己来保证每次删除文件都不是误操作,太麻烦了,还经常忘——啊哈,原来如此哦,就是因为懒惰的人愚蠢的人太多,所以我就要为它们考虑,这就是典型的Windows所传播的价值观
Thank you for this. Really nice piece of work. Creation of backlinks made easy because of you. Thanks!
All the contents you mentioned in post is too good and can be very useful. I will keep it in mind, thanks for sharing the information keep updating, looking forward to more posts. Thanks