第9章(1 / 4)

加入书签 本章报错

黑客与画家强烈推荐: 何处飞花 网王之月光—手心的幸福.... 草根男人职场成功学-程咬金篇 都是戏精 修炼作弊器 星际争霸世界的跳虫 宝贝真乖 高H (完结) 艳遇 重生之兄友弟恭

既然是谈论未来,最好谈谈并行计算parallelputation,因为ฦ看上去并行计算好像就是为未来而存在的。无论怎么想,并行计算似乎都是未来生活的一部分。

以永不过时作为目标是一种帮助自己找到最佳答案的方法:如果你不愿别人的答案取代你的答案,你就只好自己做出最佳答案。某些大师的作品太过杰出,永不过时,使得后人几乎难以在该领域立足。自从1้6世纪出现了德国雕刻๑大师丢勒durer,后世的雕刻๑家都因为自己的作品被拿来与他的作品作比较而苦不堪言。

这在今天的社会也成立,虽然已经很少有人直接创造财富供自己使用了少量的家务活除外。我们大多数人都在为ฦ其他人创造财富,然后用创造出来的财富交换金钱๥,再用金钱交换我们需要的另一种财富

eb怀特

曾经从一个ฐ农民朋友那里听到เ一则趣闻。许多农场用电å篱笆防止奶牛逃跑,但是不少电篱笆其实并没有通电。不过奶牛们已经吃过苦头,显然学会了不去碰电篱笆,这时不通电也能起到效果。“奶牛们,行动吧!”他写道,“趁着统治者打鼾时,夺回你们的自由á!”

互联网软件则ท完全不同,就像你写给自己用的程序一样,修改起来很方แ便。软件的布过裎可以分解为一系列的渐进式修改,而不是猛地推出一个大幅变动的版本。常见的桌面软件可能一年布๧一到两个新版本,而我们在via9ebຘ经常是一天布๧三到เ五个版本。

那些团体神๰经越紧张,它们所产生的禁止力量就越大。伽利略因为宣传日心说而遭到教廷的审判,这件事讽刺的地方在于,他只是在宣传哥白尼的观点,而后者却安然无恙。事实上,哥白尼不仅不反对教廷,还是一个虔诚的天主教教士,他把自己的着作献给教皇。不幸的是,伽利略正赶上教廷内部反对派上台,宗教改革被压制ๆ,任何非正统的思想遭受到เ前所未有的严厉控制ๆ和禁止。

也许有一天,“计算机科学”分裂成几个ฐ独立的部ຖ分。这可能ม是一件好事,如果我本人的领域——黑客——能ม够独立出来,那就更好了。

每个人日຅常生活的很大一部ຖ分都花在与计算机打交道上面。家用电表是智能的,通信网络是程控的,信用卡是联网的,就连点菜都会用到เ电å子菜单。越来越多的迹象表明,未来的人类生活不仅是人与人的互动,而且更多的将是人与计算机的互动。

随大流的代价

使用一种不强大的语言,你的损失有多大?实际上有一些现成的数据可以说明这个ฐ问题๤。

衡量语言的编程能力的最简单方法可能就是看代码数量。所谓高级语言,就是能够更强大抽象能力的语言,从某种意义แ上,就像能ม够更大的砖头,所以砌墙的时候用到เ的砖头数量就变少了。因此,语言的编程能力越强大,写出来的程序就越短当然不是指字符数量,而是指独立的语法单位。

强大的编程语言如何让你写出更短的程序?一个技巧就是在语言允许的前๩提下使用“自下而上”bottom-ๅup的编程方法。你不是用基础语言ba色浪uage开应用程序,而是在基础语言之上先构建一种你自己的语言,然后再用后者开应用程序。这样写出来的代码会比直接用基础语言开出来的短得多。实际上,大多数压缩算法也是这样运作的。“自下而上”的编程往往也便于修改,因为许多时候你自己添加的中间层根本不需要变化,你只需要修改前端逻辑就可以了。

代码的数量很重要,因为ฦ开一个程序所耗费的时间主要取决于程序的长度。对于同一个软件,如果用一种语言写出来的代码比用另一种语言长三倍,这意味着你开它耗费的时间也会多三倍。而且即使多雇人手,也无助于缩短开时间,因为当团队规模过某个门槛时,再增加人手只会带来净损失。fredooks在他的名着《人月神话》中描述了这种现象,我的所见所闻印证了他的说法。

如果使用lisp语言,程序能变得多短?以lisp和c的比较为例,我听到的大多数说法是c代码的长度是lisp的7倍到1้0倍。但是最近,ne9architect杂志上有一篇介绍ita软件公司的文章

,里面说“1行lisp代码相当于20行c代码”,因为此文都是引用ita总裁的话,所以我想这个数字来自ita的编程实践。如果真是这样,那ว么我们可以相信这句话。itaທ的软件不仅使用lisp语言,还同时大量使用c和c+ใ+,所以这是他们的经验之谈。

‘jenmuehlbauer,“or逼tz的新า突破”or逼tzreaທ9e9aທrchitect,20่02年4月号。’

我认为,这种比例肯定不会是一个常数。如果你遇到เ更困难的问题๤,或者你雇到เ了更聪明的程序员,这个比例就会增大。一种出色的工ื具到了真正优秀的黑客手里,可以挥出更大的威力。

总之,根据上面的这个数字,如果你与ita竞争,而且你使用c语言开软件,那么ita的开度将比你快20倍。如果你需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果ita开某个ฐ新功能用了三个月,那么你需要五年才能做出来。

你知道吗?上面的对比还只是考虑到最好的情况。当我们只比较代码数量的时候,言下之意就是假设使用功能较弱的语言也能开出同样的软件。但是事实上,程序员使用某种语言能做到เ的事情是有极限的。如果你想用一种低层次的语言解决一个很难的问题,那么你将会面临各种情况极其复杂乃ี至想不清楚的窘境。

所以,当我说假定你与ita竞争,你用五年时间做出的东西,itaທ在lisp语言的帮助下只用三个月就完成了,我指的五年还是一切顺利、没有犯错误、也没有遇到เ太大麻烦的五年。事实上,按照大多数公司的实际情况,计划中五年完成的项ำ目很可能ม永远都不会完成。

我承认,上面的例子太极端。ita似乎ๆ有一批非常聪明的黑客,而c语言又是一种很低层次的语言。但是,在一个高度竞争的市场中,即使开度只相差两ä三倍,也足以使得你永远处在落后的位置。

一个诀窍

由于选择了不当的编程语言而导致项ำ目失败的可能性,是你的经理不愿意考虑的问题。事实上大部ຖ分的经理都这样。因为你知道,总的来说,你的经理其实不关心公司是否真的能ม获得成功,他真正关心的是不承担决策失败的责任。所以对他个人来说,最安全的做法就是跟随大多数人的选择。

在大型组织内部,有一个专门的术语描述这种跟随大多数人的选择的做法,叫做“业界最佳实践”。这个词出现的原因其实就是为ฦ了让你的经理可以推卸责任。既然我选择的是“业界最佳实践”,如果不成功,项ำ目失败了,那么你也无຀法指责我,因为做出选择的人不是我,而是整个“业界”。

我认为这个词原来是指某种会计方法,大致意思就是不要采用很奇怪的处理方แ法。在会计方法中ณ,这可能是一个很好的主意。“尖端”和“核算”这两ä个ฐ词听上去就不适合放在一起。但是如果你把这个标准引入技术决策,你就开始要出错了。

技术本来就应该是尖端的。正如伊拉恩·加内特所说,编程语言的所谓“业界ศ最佳实践”,实际上不会让你变成最佳,只会让你变得很平常。如果你选择的编程语言使得你开软件的度只有选择更激进技术的对手的几分之一,那么“最佳实践”真的起错了名字。

所以,我们就有了两点结论,我认为它们非常有价值。事实上,这是我用自己的经历换来的。第一,不同语言的编程能力不一样。第二,大多数经理故意忽视第一点。你把这两点事实结合起来,其实就得到เ了赚钱的诀窍。ita软件公司是运用这个诀窍的典型例子。如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。

附录:编程能力

为了解释我所说的语言编程能ม力不一样,请考虑下面的问题。我们需要写一个函数,它能够生成累็加器,即这个函数接受一个参数n,然后返回另一个函数,后者接受参数i,然后返回n增加in9t了i后的值。这里说的是增加,而不是n和i的相加plus。累加器就是应该完成n的累็加。

摸nlisp

的写法如下:

defunfoon

laທmbdaiin9๗i

‘下面是一些lisp方言生成累加器函数的写法:

scheme:๘

definefoon

lambdai色t!ำn+nin

goo:dffoonopin9_

ar9_’

ruby的写法几乎完全相同:

deffoon

lambda{|i|n+=i}end

perl5的写法则是:

subfoo{

my$n=๡@_;

subຘ{$n+=shift}

}

这比lisp和ruby的版本有更多的语法元素,因为在perl语言中必须手工ื提取参数。

smalltalk的写法比lisp和ruby的稍微长一点:

foo:n

|s|

s:=n

:i|s:=๡s+i

因为在smalltalk中,词法变量lexicນalvariabຘle

是有效的,但是你无法给一个ฐ参数赋值,因此不得不设置了一个新变量,接受累加后的值。

‘词法变量,指的是变量的作用域由代码结构决定,不取决于运行时的调用顺ิ序。也就是说,作用域在代码文本的词法分析阶段就决定了,而不在代码执行时决定。注意将这个概念与“局部变量”的概念相区分。——译者注’

javascript的写法也๣比lisp和ruby稍微长一点,因为javascript依然区分语句和表达式,所以需要明确指定return语句来返回一个ฐ值:

fun9{

returnfun9i{

returnn+=i}}

实事求是地说,perl也๣保留了语句和表达式的区别,但是使用了常规的perl方แ式处理,因此可以省略๓return。

↑返回顶部↑

书页/目录

黑客与画家推荐阅读: 明魂术是不是双全手 芦苇在风中摇曳 金庸群侠传5白首太玄经 天上钩钩云 龙行天地在永和是什么歌曲 通风管道安装图片 全职相师 小说 妾居一品全文txt下载 异族入侵攻略 千面六公主 小说