《Just For Fun》阅读笔记

我的热情从来没有低落过(我希望你在做某件事时也能说出同样的话)。

那年夏天我做了两件事。第一件是什么都没做。第二件事是读完了七百一十九页的《操作系统:设计和执行》。那本红色的简装本教科书差不多等于睡在了我的床上。

一个差劲的系统在做任何你想做的事情时都需要有特殊的连接。UNIX则恰相反。它提供给你执行任务的材料,这些材料足以让你完成任何事情。这就是所谓的干净利索的设计。

语言其实也是如此。英语有二十六个字母,你可以用这些字母创造出任何单字。另一种语言是汉语。在汉语中,你所想到的任何一件事都由一个字来代替。你一开始用的就是复杂的形态,然后在有限的方式中将复杂的形态组合起来。VMS的大体上也是这种思路,Windows的方法也是如此。

而UNIX的理念是越小越漂亮。一小堆简单基本的建筑材料,结合起来就能创造出无限的复杂表述。

物理的规则亦是如此。你努力找出基本的规则,而这些规则都是相对简单的。从那些简单的规则中,通过相互作用产生令人不可思议的复杂性。


“这些回忆让我觉得,我至今仍认为他没有什么‘特殊的’才华,肯定没有在‘计算机’方面的才华--假如他没有这方面的才华,断然会把精力放在其他方面。在某一天或某个年代,他就会集中于应付另一个不同的挑战。我想他会的(我的意思是说,我希望他不要永远陷在Linux 软件上)。因为我认为他的动力并非是‘计算机’,也决不是名声和财富,而是诚实的好奇心和征服所面临的困难的愿望,以及用最好的办法去克服困难。因为事情就是如此,他决不会后退。“我想我已经回答了李纳斯是一个什么的孩子的问题--不错,他是非常好养的。他惟一需要的就是一个挑战,剩下来的事情就由他自己去解决了。就像我和萨拉过去常说的,只要给他一间斗室,里面放上一台电脑,再给他一些面条吃,他就会觉得无比幸福。



对于任何编程的人来说,编程是世界上最有趣的事。它比下棋之类的游戏更有乐趣得多,因为它可以由你自己来制订游戏规则。而你制定什么样的规则,也就会导出与此规则相符合的结果。然而,对于编程外行的人来说,它却似乎是世上最枯燥的事。编程给人带来的最初兴奋的原因有部分是显而易见的,那就是:通过编程你可以支配一台计算机,你叫计算机做什么,它就做什么,永远准确无误,而且毫无怨言。这本身就很有意思。但是计算机在一开始让你入迷的盲从性,显然不得它成为招人喜爱的伙伴。事实上,这种特性很快就让人厌烦了。真正使编程令人欲罢不能的是:你能让电脑做你想做的事,但是你还必须想出怎样做到的办法。我个人认为,计算机科学和物理科学有很多相似之处。两门学科都是在一个相当基础的层面上探讨一个体系是怎样运行的。当然,区别在于,在物理学中,你探究的是一个已经存在的客观世界的构成。而在计算机科学中,你却是在创造一个前所未有的体系。在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。如果你功力深厚,你可以是上帝——在一个较小的层面上。


编程是对创造的训练。探究计算机工作原理的过程,是吸引我走进编程世界的最初原因。在这其中获得的最大的乐趣在于,我认识到了计算机科学与数学的类似:你必须从该体系自身的规则出发,推演出整个世界,在物理科学中,你被客观规律所束缚。但是在数学和编程中,只要能合乎逻辑地推演,就可以成立。思考数学问题,不会受到客观世界的逻辑的限制,数学只是逻辑自洽的符号体系。正如任何一名数学家都明白的,人完全可以建构出一套数学等式,以证明三加三等于二。事实上,你想有什么样的体系就可以什么样的体系。但是,随着复杂程度的提高,你必须多加小心,不要弄出什么与你创造的体系不一致的东西。好的体系容不得任何错误。编程也与数学一样是这么回事儿。

操作系统是计算机的所有功能的基础。而创造一个操作系统则是最终的挑战。创造操作系统,就是去创造一个所有应用程序赖以运行的基础环境——从根本上来说,就是在制定规则:什么可以接受,什么可以做,什么不可以做。事实上,所有的程序都是在制定规则,只不过操作系统是在制定最根本的规则。创造操作系统就像在为你创造的这片土地制订宪法,而其他在电脑上运行的程序则是为宪法所允许的普通法律。有时,这些法律根本讲不能,但这正是你要面对的问题。你需要找到解决办法,并能够意识到自己以正确的方法找到了正确的答案。还记得那些在课上总能答对问题的同学吗?他们的答案比别人来得快,他们能这样是因为他们没有刻意去追求。他们不在乎他们应该怎样来答题。他们只不过找到了合理的考虑问题的方法。人们一听到正确答案,一切听起来就都是那么回事了。在电脑上也是这样。你可以鲁莽、生硬地行事,愚蠢地死死纠住问题不放,直到问题不再成为问题。也可以通过找到正确的方法,使问题突然消失。你可以从不同的角度看问题。直到灵光突现地认识到:问题之所以成为问题只在于你的方法错了。

一个伟大的数学家不会采用平庸而繁琐的方法,因为他能看到隐藏在问题背后的真正内涵,并应用这一理解去找到更为简便的方法。在计算机科学中也绝对如此。没错,你能写一个程序来求出总数。这对于今天的电脑来说不过小事一桩。但是一个伟
大的编程者能凭借其聪明的头脑就知道答案是什么。他知道怎样写出漂亮的程序,知道怎样采用一种全新的但最终会被证明是正确的方法。

我的外壳程序可以运行后,我马上开始着手其他几个程序,比如拷贝程序和列表程序,
这些都比外壳程序简单得多。你所需的一发,外壳程序早就具备好了,所以一旦外壳程序完成,就好像是从 0 飞跃到 100 一样,因为一切都已就绪。这时,我已经拥有了一切必要的条件,感觉就像上帝创世纪那样,执掌一切地说:“让那里有光”,那里就真的有了光。在此之前,的确是一无所有。

他们不懂计算机。至少,我认为他们不懂计算机。

要使 Linux 发展成最完美的技术就必须保持它的纯洁性。如果有铜臭渗透进来,事情就要变黑暗了。所以,如果不让钱的问题掺和进来,就不会有贪欲的参与。

总的来说,我从两个方面看版权。比如一个每月挣五十美元的人,他可能会为一个软件
花费二百五十美元吗?如果花一点钱买非法拷贝软件,而把五个月的工资用于吃饱肚子,我一点不觉得他不道德。这种侵权是道义上可以接受的。去追捕这种“侵权者”是不道德的,更不要说简直就是愚蠢的。就 Linux 而言,谁在乎如果只将其用于个人目的时,一个人是否真正遵循了 GPL 呢?那些想藉此赚大钱的人们,才是真正不道德的,不管他们是在美国还是非洲,也不管程度如何。贪欲从来就不是善的。


微内核的理论依据是,操作系统是非常复杂的,所以要通过模式化来减少复杂性。微内
核方法的原则,即核心的核心,是昼减少功能。它的主要功能是传播。电脑所提供的一系列不同的服务都是通过微内核的传播渠道实现的。因此,应尽量分割问题的空间,使其不再复杂。我认为这种做法很愚蠢。是的,每一个单独的部分是简单的,但是相互作用的多种功能如果放在一起就要复杂得多,而 Linux 就是后者的情况。想一想自己的大脑。每一个单独的部分都很简单,但是各部分的相互作用构成了一个复杂的系统。这是一个整体比个别更大的问题。拿一个问题来说,如果你简单地将问题一分为二,说半个问题要容易一半,那么你就忽略了一个事实,即:你必须要考虑到两个半个之间的联系所带来的复杂性。微内核的理论是,如果把核分为五十份,那么每一份都只有五十分之一的复杂性。但是每个人都忽视了一个事实,即各部分之间的联系事实上比源系统更加复杂,而且那些个别部分也不是那么简单。
这是我对微内核最重要的反驳:你想实现的简单化是错误的简单化。


大多数操作系统是独立一体的,也就是说,整个操作系统是一个单独的 a.out 文件,一
个“核形式”运行。这种二进制中有管理过程、存储管理、文件系统及其他。这类操作系统目前有 UNIX,MS-DOS,VMS,MVS,OS/360,MULTIC 以及其他很多。
另一种则是基于微内核的系统,在这种系统中大部分 OS 都作为单独过程进行,还有许
多通过沟通在核外运行。核的任务是管理信息仁慈,控制中断的情况,低层次的过程管理,
还 可 能 有 I/O 。 这 种 形 式 的 操 作 系 统 有RC400,Amoeba,Chorus,Mach, 以 及 尚 未 发 行 的WindowsNT。


在所有的决定中,纯粹的技术决定并不成其为问题,困难的是用老练的技巧向一个人指出你更乐于采用另一个人的建议而不是他的。有时候,我只是这样简单地对他说:“这东西用起来很不错,我们就用它吧。”

我很早就明白,最好的领导者不是让手下做他要求他们做的事情,而是让手下做他们自己想要做的事。同时,最好的领导者也明白,当手下犯错时,要让他们自己有能力纠正而不要总是自己出面纠正。最佳的领导者是能够让手下自作主张的人。让我换一个述。
Linux 所取得的许多成功,其实可以归结为我的缺点所致:
1、 我很懒散。
2、 我喜欢授权给其他人。

如果你环顾一下你周围最聪颖的那些孩子们,你会发现他们中的绝大多数都在参与对
Linux 的开发。有一个很明显的现象是,无论是开放源代码的理念还是 Linux 操作系统都在各大学里赢得了最广泛的支持,其原因之一是:青年学子们大多都抱有对主流与权威的逆反心理

于是,有一些加盟微软的朋友告诉我,他们曾见到我的头像被钉在了微软公司里的飞镖靶心上。我对此唯一的评论是:我的大鼻子实在太好瞄准了。


下面是我所遵循的信条,第一条是“推已及人”,如果你能恪守这一原则,你会在任何环境下都知道该怎么做。第二条是“以己为荣”,第三条是“行而乐之”


人们希望有人告诉他们该如何行动。这种倾向植根在我们的基因核里。任何社会性的动物都本性如此。所以,那些具有个人意识,敢于对别人说“不,我不遵循”的人就变成了领导者。要变为一名领导者并不很难(肯定如此。我不就变成其中一员了吗?)。那些没有这种信念的人,在某种程度上,更喜欢领导者替他们做出决策并告诉他们该怎么做。


成功在于质量,在于给大众提供他们想要的产品。成功不是试着去控制人们。麻烦之处在于,人们经常会被纯粹的贪婪所驱使,而这一点从长期来看最终会导致失败。贪婪导致了决定被偏执和控制欲所统治。那些错误的、短视的决策,导致了最终的难。


果你想通过控制某一资源来赚钱的话,那么你终将发现自己会被市场淘汰。


如果你喜欢什么就让它自由

Sun 本身应该允许每个人都可以开发他们自己的 Java 语言——不加任何限制——也完
全可以保证他们自身做得更好。那正是公司不被贪欲或者对竞争的恐惧所蒙蔽的标志。那也是一个公司相信自己实力的标志。


公开源代码的理论基础就是:简单化。在操作系统这一情形里,源代码——即那些构成
系统的程序指令——是自由的,任何人都可以改进它、改变它和利用它。但这些改进、改变和利用后的源代码也必须是可以自由获得的。项目不属于任何个人,而是属于每一个人。通过将其开放,会产生迅速和边疆的改进。比之于封闭起来开发,其结果会出得更快、更成功。那正是我们开发 Linux 时所经历的。想像一下:你旁边是一个庞大的开发队伍,而不是一个以秘密小组形式组成的开发团队。潜在地拥有数百万更加聪明的头脑来参与同一项目,并且有同行评论过程的支持,啊,这力量简直是无以匹敌的。


公开源代码是开发和提高最佳质量技术的最好方法。


其中一个有关公开源代码的最令人不解的迷,就是为什么会有这么多优秀的程序员(最
近一次的统计表明大约有七十五万程序员在从事 Linux 的开发与改进)在毫无报酬的情况下会如此投入地工作?用一个词来概括这种动机的话,可以说是“目标”。在一个生存或多或少已经有保障的社会里,钱财并不是最大的激励因素。众所周知,当人们是由爱好和热情所驱使着的时候,往往能够将工作做得最好。对于剧作家、雕塑家和企业家是如此,对于软件工程师也是如此。公开源代码模式给人们提供了依靠兴趣与热情而生活的机会。享有乐趣以及与世界上最好的程序员一起工作,而不是与那些恰巧为他们的公司所雇佣的少数几个程序员一起工作,是一种无与伦比的享受。公开源代码开发者努力工作着以赢得他们同行的尊敬,那当然是一种高度有效的激励。




事实上,理解公开源代码现象的一种方式是:想像一下几个世纪以前,科学是如何被信
仰所感知的(如今的情形如果不是这样的话,那就是被某些人所感知)。科学最初是被视为某种危险的、具有颠覆性质的以及是不允许从事的事情——基本上就是现在的软件公司有时候看待公开源代码的方式。正如科学的诞生并不是想要破坏宗教制度一样,公开源代码也并不被视为是要粉碎现有的软件体系。这只是想要开发出最好的技术,并看看这种技术可以达到何种程度。
科学本身并挣钱。创造所有财富的正是科学的辅助作用。对于公开源代码也是如此它
允许挑战现有商业的辅助行业的产生,这一点非常相似于科学的波浪前进对于教堂的挑战。你会发现一些小公司,例如 VA Linux,利用了公开源代码而突然能够与传统公司相竞争了。用伊萨克.牛顿爵士的话来说,那就是站在了巨人的肩膀上。



你是否曾经在一个温暖的夏夜里仰面朝天,瞭望星空,认真地思考你为什么会在这里?
你自己又身在何处?你打算在你的生命旅途中做些什么?


对了,就是这三件事:生存、你在社会中的位置、还有快乐。
这一次序是:生存;社会交往;寻找乐趣。

是的,你可以为事业而奋斗,然而最终,生活的终极目标是快乐。”


posted @ 2013-04-23 17:00  忧郁巫师  阅读(418)  评论(0编辑  收藏  举报