第8章(1 / 2)

加入书签 本章报错

黑客与画家强烈推荐:

以永不过时作为ฦ目标也๣是一种避开时代风潮的影响的方แ法。“风潮”这个ฐ词,从字面上就可以看出,它就是一阵风似的,随着时间经常改变。如果一件东西长盛不衰,那么เ它的吸引力一定来自本身的魅力,而不是来自风潮的影响。

事实上,财富与金钱๥是两个概ฐ念。金钱๥只是用来交易财富的一种手段,财富才是有价值的东西,我们购买的商品和服务都属于财富。你到เ海外旅行时,不用看当地人的银行账户就会知道你来到的是富国还是穷国。你只要看看他们的财富就行了:建筑、街道、服装、健康状况等。

‘eb怀特eb9hite,1899—19๗8๖5,美国当代着名作家、散文家,常年担任《纽约客》杂志的主要撰稿人,以优美的语体风格着称于世。——译者注’

软件的布

为了在全社会制造出一个ฐ禁忌,负责实施的团体必定既不是特别强大也不是特别ี弱小。如果一个团体强大到无຀比自信,它根本不会在乎ๆ别ี人的抨击。美国人或者英国人对外国媒体的诋毁就毫不在意。但是,如果一个ฐ团体太弱小,就会无力推行禁忌。有一种行为怪癖叫做“嗜粪症”cນoprophila,它的患者人数以及影响势力眼下似乎就不太强大,无法把自己的观点推广给其他人。

‘在英语中ณ,“建筑师”architect和“架构师”arcນhitecນt是同一个ฐ词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中ณ的“建筑学”architecture也๣是这种双关用法,同时指“架构学”aທrcນhitecture。一译者注’

想要把握这个时代,就必须理解计算机。理解计算机的关键,则是要理解计算机背后的人。表面上这是一个ฐ机器的时代,但是实际上机器的设计者决定了我们的时代。程序员的审美决定了你看到的软件界ศ面,程序员的爱好决定了你有什么样的软件可以使用。

但是,真正的问题๤在于,并行计算到底能达到哪个ฐ抽象层次?一百年后它就会影响到开应用软件的程序员吗?或者,它还只是编译器作者需要考虑的事情,在应用软件的代码中根本就无处寻觅?

一种可能是,大多数可以用到เ并行计算的场合,人们都会放弃使用并行计算。虽然我总的预测是未来的软件会挥霍掉大部ຖ分新า增的硬件性能ม,但是并行计算是一个ฐ特例。我估计随着硬件性能ม得到เ惊人的提升,如果你明确地说想要并行计算,那么เ肯定可以得到เ它,但是通常情况下你不会用到เ它。这意味着,除了一些特殊的应用程序,一百年后的并行计算不会是那ว种大规模的并行计算massivepaທraທllelism。我预料,对于普通程序员来说,一切更像对进程进行分叉,然后让多个进程在后台并行运行。

这是编程进行到很后期才要做的事情,属于对程序的优化,类似于你想开一种特定的数据结构来取代现有的数据结构。程序的第一个ฐ版本通常会忽略๓并行计算的各种好处,就好像编程开始时会忽略某种特定的数据结构给你带来的好处一样。

除了某些特定的应用软件,一百年后,并行计算不会很流行。如果应用软件真的大量使用并行计算,这就属于过早优化了。

一百年后会有多少种编程语言?从最近来看,出现了大量的新语言。硬件性能提高是一个ฐ原因,这就允许程序员根据使用目的在运行度和编程便利性之间做出不同的取舍。如果这就是未来的趋势,那ว么一百年后强大的硬件只会使得语言数目变得更多。

伹是,另一方แ面,一百年后的常用语言可能只有很少几种。部分原因是基于我的乐观主ว义,我相信在未来,如果你的作品确实很出色,你可能选择的是一种开起来很方แ便的语言。使用这种语言写出来的软件第一版的运行度很慢,只有对编译器进行优化设置后运行度才会提升。既然我抱有这种乐观主义,那ว么我还要做一个预ไ言。有些语言可以达到机器的最高效率,另一些语言的效率则慢到刚刚可以运行而已,两者之间存在巨大的差ๆ距。我预言一百年后,这段差ๆ距之间的各个点上都会有对应的编程语言存在。

因为这段差距正在变得越来越大,所以性能分析器profiler将变得越来越重要。目前,性能ม分析并没有受到重视。许多人好像仍然相信,程序运行度提升的关键在于开出能够生成更快代码的编译器。代码效率与机器性能ม的差ๆ距正在不断加大,我们将会越来越清楚地看到เ,应用软件运行度提升的关键在于有一个ฐ好的性能ม分析器帮助指导程序开。

我说将来可能只有很少几种常用语言,但没有把用于特定领域的“小众语言”little浪ฐuage算进去。我觉得,这些嵌入式语言的想法很不错,一定会蓬ศ勃展。但是我判断ษ这些“小众语言”会被设计成相当薄的一层,使得用户可以一眼看出在底下作为基础的通用型语言,这样就减少了学习๤时间,降低了使用成本。

谁来设计这些未来的语言?过去1้0年最激动人心的趋势之一就是开源语言的崛起,比如perl、python和ruby。语言设计已๐经被黑客接管。到目前๩为止这样到เ底是好是坏还看不清楚,但是展势头令人鼓舞。比如,perl就有一些绝妙的创新。不过,它也๣包含了一些很糟糕的想法。对于一种充满进取心、大胆探索的语言来说,这也๣是很正常的事。以它现在这种变化的率,大概只有上帝ຓ才知道一百年后perl会变成什么เ样。有一句俗话说,如果你自己做不到เ,那就去当老师。这在语言设计领域不成立,我认识的一些最出色的黑客就在当教授。但是,当老师的人确实有很多事情不能做。研究性职位给黑客带来了一些限制。在任何学术领域,都有一些题๤目是可以做的,另一些题目是不可以做的。不幸的是,这两类题目的区别通常取决于它们写成论文后看上去是不是很高深,而不是取决于它们对软件业的展是否重要。最极端的例子可能ม就是文学,文学研究者的任何成果几乎对文学创作者都毫无影响。

虽然科学领域的状况要稍好一点,但是研究者可以做的题目与能够对设计优秀语言有所帮助的题目之间的交集小得令人沮丧。奥林·希弗斯曾经对这一点表达不满,而且说得头头是道。比如,研究变量类型的论文好像多得无຀穷无尽,尽管事实上静态类型语言看来无຀法真正支持宏在我看来,一种语言不支持宏,那ว就不值得使用了。

新语言更多地以开源项ำ目的形式出现,而不是以研究性项ำ目的形式出现。这是语言的一种展趋势。另一种展趋势是,新า语言的设计者更多的是本身就需要使用它们的应用软件作者,而不是编译器作者。这似乎是好的趋势,我期待它继续保持下去。

一百年后的物理学基本上不可能ม预ไ测。但是计算机语言不一样,现在就动手设计一种一百年后可以吸引使用者的新语言,这在理论上似乎是可能的。

设计新า语言的方法之一就是直接写下你想写的程序,不管编译器是否存在,也不管有没有支持它的硬件。这就是假设存在无限的资源供你支配。不管是今天还是一百年后,这样的假设好像都是有道理的。

你应该写什么程序?随便什么,只要能让你最省力地写出来就行。但是要注意,这必须是在你的思维没有被当前๩使用的编程语言影响的情况下。这种影响无处不在,必须很努力才能克服。你也许觉得,对于人类这样懒惰的生物,喜欢用最省力的方แ式写程序是再自然不过的事情。但是事实上,我们的思想可能往往会受限于某种现存的语言,只采用在这种语言看来更简单的形式,它对我们思想的束缚作用会大得令人震惊。新语言必须靠你自己้去现,不能依靠那ว些让你自然而然就沉下去的思维定势。

采用程序的长度作为它耗费工作量的近似指标是个很有用的技巧。这里的程序长度当然不是指字符的数量,而是指各种句法元素的总长度,基本上就是整个ฐ解析树的大小。也许不能ม说最短的程序就是写起来最省力的程序,但是当你一心想把程序写得简洁而不是松松垮垮时,你就更接近省力这个目标,你的日子也会变得好过得多。所以,设计语言的正确做法就变成了,看着一段程序,然后问自己้是不是能把它写得更短一点?

实际上,用想象出来的一种一百年后的语言来写程序,这件事情的可靠程度,取决于你对语言内核的估计是否足够正确。常规的排序,你现在就可以写出来。但是,想要预ไ测一百年后的语言使用什么เ函数库就很难了。很可能ม许多函数库针ฤ对的领域现在还根本不存在。比如,如果色ti@๤home计划

成功,我们就需要与外星人联系的函数库了。当然,如果外星人的文明高度达,已经到了用xml格式交换信息的地步,那ว就不需要新า的函数库了。

‘色ti@home是一个寻找地球以外智慧生命的科学实验、由á加州ะ大学伯克利ำ分校起并主持。它使用射电望远镜监听太空中的无线电信号,然后用计算机进行数据分析,如果现有些信号不可能自然产生,就可以证明外星文明的存在。199๗5๓年,该项ำ目决定向志愿者开放,使用全球联网的大量计算机进行分布式计算,1้9๗99年5月开始正式运行。详细情况参见色tiathomeberkeleyedu。——译者注’

另一个极端是,我觉得今天你就能ม设计出一百年后的语言内核。事实上,在有些人看来,大部分语言内核在1้9๗58年就已๐经设计出来了

‘lisp语言的第一版规格说明书是1958๖年布的。——译者注’

如果今天就能使用一百年后的编程语言,我们会用它编程吗?观古而知今。如果1้96๔0年就能使用今天的编程语言,那ว时的人们会用它们吗?

在某些方面,回答是否定的。今天的编程语言依赖的硬件在1้96๔0年并不存在。比如,python这样的语言,正确的缩进indentation在编写时很重要,但是196๔0年的计算机没有显示ิ器,只有打印机终端,所以编写起来就不会很顺利。但是,如果把这些因素排除在外你可以假设,我们只在纸上编程,2๐0่世纪6๔0年代的程序员会喜欢用现在的语言编程吗?

我想他们会的。某些缺乏็想象力、深受早ຉ期编程语言思想影响的人可能会觉得不可能。没有指针ฤ运算,如何复制数据?没有goto语句,如何实现流程图?但是我想,那时最聪明的程序员一定能轻松地使用今天的大多数语言,假定他们能得到的话。

如果我们现在就能ม拥有一百年后的编程语言,那ว就至少能用来写出优秀的伪码

。我们会用它开软件吗?因为一百年后的编程语言需要为某些应用程序生成快代码,所以很可能它生成的代码能ม够在我们的硬件上运行,度也还可以接受。相比一百年后的用户,我们也许不得不对这种语言做更多的优化,但是总的来看,它应该仍然会为ฦ我们带来净收益。

‘伪码又称虚拟代码,用来抽象地描述算法,而不是现实存在的编程代码。——译者注’

现在,我们的两ä个ฐ观点就是:1一百年后的编程语言在理论上今天就能设计出来;2๐如果今天真能设计出这样一种语言,很可能现在就适合编程,并且能够产生更好的结果。如果我们把这两个ฐ观点联系起来,那ว就得出了一些有趣的可能性。为什么เ不现在就动手尝试写出一百年后的编程语言呢?

当你设计语言的时候,心里牢牢记住这个目标是有好处的。学习๤开车的时候,一个需要记住的原则ท就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远处的某个点。即使你的目标只在几米开外,这样做也是正确的。我认为ฦ,设计编程语言时,我们也应该这样做。

1้2๐拒绝平庸

1้9๗95๓年,罗伯特·莫里斯和我一起创น办了via9๗eb。我们打算开软件,让用户可以自己้搭建网上商店。当时,我们的创意是把软件放在服务器端,使用普通的网页作为ฦ用户界ศ面。

当然,那个时候许多人可能都想到过这个ฐ主意。但是,就我所知,via9ebຘ是第一个互联网应用程序。在我们看来,这真的是很新颖๢的想法,所以我们就把公司命名为viaທ9eb,意即我们的软件通过网络使用,而不是运行在你的桌面电脑แ上

‘在英语中ณ,via是一个ฐ介词,意为“经过……”,所以viaທ9eb的意思就是经过网络。——译者注’

另一个ฐ特别之处是,这个ฐ软件主要采用lisp语言开

。它是最早的用lisp语言开的大型应用程序,在此之ใ前๩,lisp语言主ว要用于大学和实验室中ณ。

‘一开始的时候,viaທ9ebຘ有两个ฐ部分——编辑器和订单处理系统。前๩者用摸nlisp开,主ว要供用户搭建自己้的网站。后者用c语言开,主要用来处理订单。在via9๗eb的第一版中ณ,lisp是最主ว要的开语言,因为订单处理系统非常小,占用的代码很少。20่0่3年1月,yaທhoo布了viaທ9eb编辑器的新า版本,采用c++ใ和perl开。但是,为ฦ了把原始程序翻译成c++ใ,他们可能ม不得不专门写一个lisp解释器,因为ฦ据我所知,viaທ9eb所有的页面生成模板还没变,都是使用lisp代码。参见greenspun写的tenthrule一书第1้9๗8页ษ。’

秘密武器

埃里克·雷蒙德写过一篇文章《如何成为ฦ一个黑客》ho9tobຘeeaທhaທcker。文中ณ有一部分专门谈到เ,在他看来,如果你想当一个黑客,应该学习哪些语言。他建议从python和java入手,因为ฦ它们比较容易学。想当高级一点的黑客,还应该学习9ix系统,后者用来系统管理和开cgi脚本。最后,真正非常严肃地把黑客作为ฦ人生目标的人,应该考虑学习lisp:

lisp很值得学习。你掌握它以后,会感到它给你带来的极大启。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到lisp。

在讨论学习拉丁语有何价值时,你往往也๣会听到这一类的话。拉丁语无຀助于你找工ื作也许古典文学教授的工作除外,但是它可以训练你的思维,帮助你更好地运用母语比如英语进行写作。

但是且慢,拉丁语的比喻并不完全适合lisp语言。拉丁语无助于你找工作的原因是因为没有人说拉丁语。如果你用它写作,没有人能ม看懂。但是,lisp是一种计算机语言,无论我们程序员使用哪一种语言与计算机交谈,它都能听懂。

如果埃里克·雷蒙德没有说错,lisp语言确实可以使你成为更好的程序员,那么为ฦ什么你不使用它编程呢?如果画家有一支让他画得更好的画笔,我觉得他应该会用这支笔完成所有的画作,对不对?我在这里不是想证明埃里克·雷蒙德错了。他的观点整体上非常正确,他对lisp语言的看法确实是大多数人的看法,但是这里面就是有一个ฐ矛盾:lisp语言能ม让你成为更好的程序员,但你却不用它,这难道不奇怪吗?

为什么เ不用呢?编程语言毕竟是一种工具。如果lisp语言真的能ม开出更好的程序,你就应该用它。如果它无助于编程,那么เ就不会有人需要它。

这不仅仅是一个ฐ理论问题。软件业是竞争非常激烈的行业,而且容易出现垄断。在不考虑其他情况的条件下,某家公司的软件更快更好用,就会把竞争者赶出这个市๦场。一旦你开始创น业,你就会更深切地感受到这一点。一般情况是,创น业公司要么赢得一切,要么彻底失败。你要么成为ฦ富翁,要么一无所获。创业的时候,如果你选择了错误的技术,竞争对手就会一举打败你。

罗伯特·莫里斯和我都很了解lisp语言,我们相信自己้的直觉,找不出任何不使用它的理由。我们知道其他人都用c+ใ+或perl开软件,但是我们不觉得这说明了什么问题。如果别人用什么技术,你也用什么技术,那么เ你大概只能ม使用9indo9๗s了。选择使用哪一种技术的时候,你不能ม考虑别ี人的做法,只能ม考虑什么样的技术能最好地完成工作。

图12-1้我和罗伯特·莫里斯在via9ebຘ,1996年年初ม

创业公司尤其如此。大公司可以互相模仿,但是创น业公司就不行。我觉得很多人没有意识到这一点,尤其是一些创น业者。

大公司每年平均成长大约10%。所以,如果你掌管一家大公司,只要每件事都做到大公司的平均水准,你就能ม得到เ大公司的平均结果,也就是每年成长大约10่%。

如果你掌管创น业公司,当然也๣可以这样。你把每件事都做到平均水准,就能得到平均结果。问题๤在于,小公司的平均结果就意味着关门倒闭。创业公司的生存率远低于50%ื。所以,如果你掌管创业公司,最好做一些独特的事情,否则ท就会有麻烦。

回到1้995年,我们懂得一些竞争对手不懂的事情至少在我们看来是如此,这些事情甚至直到今天都很少有人懂:如果开只在自己服务器上运行的软件,这意味着你想用什么เ语言就能用什么语言。如果开桌面软件,就完全不一样了,大多数情况下你只能ม使用操作系统所用的开语言。10่年前,开桌面软件就意味着要使用c语言。但是,对于互联网软件,你能使用任何你想用的语言。如果你还同时拥有操作系统和语言的源码,那么เ你的自由就更大了。

但是,这种新出现的自由á是一把双刃剑。既ຂ然你可以使用任何语言,你就不得不思考到底使用哪一种语言。如果你的公司对这种选择的自由á视而不见,而竞争对手看到了,那么你就有被击败的危险。

如果选择哪种语言都行,你到底使用哪一种语言?我们选择lisp。先,很明显,对于这个市๦场来说,快开出产品是很重要的。我们所有人都是从零开始,所以能够快做出新า功能的公司就会取得巨大的竞争优势。我们知道lisp语言真的非常合适快开软件,而且我们的软件运行在服务器端,你一写完代码就能ม布๧出去,所以这又进一步放大了快开的效果。

如果其他公司不想使用lisp语言,那ว就更好了。这会让我们拥有技术优势。我们不能放过任何有利ำ的因素。创น办viaທ9eb的时候,我们对于如何经营一家公司毫无经验,对市场推广、雇用员工ื、融资、展新客户等都一无所知。在此之ใ前,我和莫里斯甚至连一夭正式上班的经历都没有。我们唯一擅长的事情就是开软件。我们希๶望这一点可以弥补我们的劣势。任何在软件开上面有助于我们获得优势的事情我们都不能ม放过。

可以这样说,我们使用lisp只是一个大胆的冒险。我们设想如果用lisp语言开自己的软件,就能ม比竞争对手更快地写出新功能ม,还能ม做到他们做不到的事情。同时,因为lisp是一种抽象层次非常高的语言,所以就不需要非常庞大的开团队,这会降低成本。如果我们的设想是正确的,那么我们就能用更少的钱做出一个更好的产品,从而获得利润๰。最终,我们将独占市场,竞争对手什么เ也得不到,到เ头来只能退出这个行业。我们当时心里就是这么盘算的。

这次冒险的结果如何?多少有点出人意料,它竟然达到了我们的设想。我们前前๩后后遭遇到很多竞争对手,一共大概ฐ有二三十个,但是他们的软件没有一个能ม与我们竞争。我们的软件运行在服务器端,用户可以“所见即所得”地搭建网上商店,感觉就像在操作桌面软件。我们的竞争对手使用cນgi脚๐本。我们在功能上总是遥遥领先于他们。有时,他们出于绝望,试图引入我们没有的功能ม。但是,有了lisp语言的帮助,我们的开周期很短。有时候,竞争对手刚刚布新闻稿宣布将引入新功能,我们就能在一两天内做出自己้的版本。当对手找来的记者抽出时间打电话过来想了解我们的反应,我们就会告诉他我们已经有了这个ฐ功能ม。

竞争对手一定觉得我们好像拥有了某种秘密武器,能ม够破解他们内部的通信或者其他机密。事实上,我们的确拥有秘密武器,但是没他们想的那么复杂。从来没有人向我们泄露他们的内部ຖ机密,只是我们的开度比别人想象的更快而已。

9岁时,我碰巧ู读过弗雷德里克·福赛思的《刺杀戴高乐่》thedayofthejackaທl。的主角是一个刺๐客,有人雇他暗杀法国总统。那个ฐ刺客必须通过警察的岗哨才能ม到เ达可以俯视总统行进路线的公寓。他扮成柱着拐杖的老头从警察身边经过,没有引起任何人的怀疑ທ。

我们的秘密武器很类似上面的情景。我们使用一种奇特的人工ื智能语言开软件,它的语法非常古怪,大量使用括号。多年来,要是听到别ี人这样描述lisp语言,我会勃然大怒。但是现在,这却成了我们的优势。在竞争中ณ,你的对手无法理解你的技术优势,这可是再宝贵不过了。商场如战场,对手摸不透你,你的胜算就增加了。

虽然有些令人难为ฦ情,但是我必须承认,就是因为ฦ这个ฐ原因,在via9๗ebຘ创业期间我从来没有公开谈论过lisp语言。我们对新闻媒体闭口不谈lisp,如果你在我们的网站上搜索lisp,只会现我在个ฐ人介绍中ณ提到เ过两次,那ว是我写的两ä本关于lisp的书。这是故意的,创业公司对竞争对手应该越保密越好。如果他们不知道或者不关心我们的软件用什么语言开,我就要把这个秘密保持下去

‘莫里斯觉得不用这么เ保密,因为即使竞争对手知道我们使用lisp语言,对他们也๣不会有帮助:“如果他们真的聪明,早ຉ就已经在用lisp编程了。”’

最了解我们技术的人就是客户。他们不关心viaທ9ebຘ用什么语言开,但是现它真的很好用。via9๗ebຘ可以让用户在几分钟็内搭建起漂亮的网上商店。因此,主ว要通过口碑效应,我们得到了越来越多的新客户。19๗96๔年年底,我们支持的网上商店大约是7๕0家。1997年,变成了500家。6๔个月后,雅虎收购我们的时候,我们有1070่个用户。更名为yahoostore之后,这个软件继续主导市๦场,它是雅虎获利最丰厚的业务之一,用它搭建的商店成为“雅虎购物”yahooshopping的基础。我在199๗9年离开了雅虎,所以不知道现在的准确用户数量,但是我上一次听到的数字是过了2万。

blub困境

lisp语言到เ底好在什么เ地方?如果它真的这么เ好,为ฦ什么没有得到广泛使用呢?这种问题听起来有点像绕口令,但是实际上回答起来很简单。lisp语言的好处不在于它有一些狂热爱好者才明白的优点,而只在于它是目前๩最强大的编程语言。它没有得到广泛使用的原因就是因为编程语言不仅仅是技术,也๣是一种习惯性思维,非常难于改变。当然,上面两句话都需要进一步解释。

我先从一个争议极大的命题开始讲起:编程语言的编程能力有差异。至少不会有人反对高级语言比机器语言更强大这一观点。今天的大多数程序员通常情况下都不会想用机器语言编程,而是使用一种高级语言,然后再让编译器帮你把它翻译成机器语言。这种观念甚至已经移植到เ了硬件,从2๐0世纪8๖0่年代开始,硬件的指令集都是针对编译器而不是针对程序员设计的。

大家都知道,徒手用机器语言写出整个ฐ程序是一件很蠢的事。但是,把这个观点推广到一种更普遍的情况,知道的人就不多了。如果你有好几种语言可以选择,在不考虑其他因素的情况下,你不选择最强大的那种语言就是一件很蠢的事

‘如果从图灵等价turing-equivatent的角度来看,所有语言都是一样强大的,但是这对程序员没有意义。没人想为图灵机编程。程序员关心的那种强大也许很难正式定义,但是有一个ฐ办法可以解释,那ว就是有一些功能在一种语言中是内置的,但是在另一种语言中ณ需要修改解释器才能做到,那ว么前๩者就比后者更强大。如果a语言有一个运算符,可以移除字符串ธ中的空格,而b语言没有这个ฐ运算符,这可能不足以称a语言比bຘ语言强大,因为你可以在b语言里写一个ฐ函数实现这个ฐ功能。但是,如果a语言支持某种高级功能假定是递归,而bຘ语言不支持,你就不可能ม通过自己้编写函数库解决了,所以这就代表a语言比bຘ语言更强大。’

上面这个观点有许多例外情况。如果在开的程序必须与另一个程序紧ู密配合,那么可能ม最好还是使用后者的开语言。如果你的程序只是要做一些很简单的事比如整数运算或者位操作,那ว就不妨使用一种比较靠近机器的低层次语言,主ว要原因是这样运行起来会更快一些。如果你的程序很短,只是为了特定场合一次性使用,那ว么你最好根据自己้要解决的问题选择具有最强大函数库的语言,不过,总的来看,对于应用程序来说,还是应该选择总体最强大、效率也在可接受范围内的编程语言,否则ท都是不正确的选择,就好像你选择机器语言编程一样,只是程度上有差异而已๐。

大家都公认机器语言属于非常低层次的语言。但是,至少在社会上很多人眼里,高级语言其实也差ๆ不多。但事实并非如此,高级语言与机器语言的差别ี很大。从技术上看,“高级语言”并不是一个定义แ很清晰的名词。在高级语言与机器语言之ใ间并不存在一条明确的分界ศ线。语言的抽象性是一条连续曲线,从最强大的语言一直到เ最底层的机器语言,每一种语言的能ม力都有差异

‘语言之ใ间的关系或许还可以比喻成栅格结构latticນe,从下往上朝着顶端慢慢收窄。具体的形状在这里并不重要,重点是语言之间至少存在着一种偏序关系paທrtialorder。’

以cobol语言为例,通过编译器,它可以被编译成机器语言。从这个角度来说它是一种高级语言。但是,有谁会真的把9—样强大的语言?比起python,它可能ม更接近机器语言。

perl4๒如何?与perl5相比,它不支持闭包。所以,大多数perl的黑客都认为perl5比perl4๒更强大。如果你同意这一点,就意味着你也认可一种高级语言可以比另一种高级语言更强大。因此,必然能够接着推导出,除了某些特殊情况,你就是应该使用目前๩最强大的语言。

不过在现实中这个结论很少能落实。到了一定年龄之后,程序员极少主ว动更换自己的编程语言。不管习๤惯使用的是哪一种语言,他们往往认为这种语言已๐经足够好了。

程序员非常忠于他们心爱的语言,我不想伤害任何人的感情,所以为ฦ了解释我的观点,我假设有一种bຘlub语言。它的抽象程度正好落在编程能力曲线的中点。它不是最强大的语言,但是要比cobol或机器语言更高级。

我们假设blubຘ程序员既不使用机器语言也不使用cobຘol语言。他认为前๩者是编译器的工作,后者他不知道有什么เ用cobຘol语言甚至连xx功能也๣没有,blub语言就具备这个功能ม。

只要这位程序员向曲线下方望去,他就肯定知道自己正在看的是一些比较低层次的语言。因为那ว些语言明显不如blubຘ语言强大,缺少他习惯使用的某些功能。但是,当他向曲线上方แ望去,他不会意识到自己正在看更高层次的语言,而是仅仅觉得自己้正在看某些奇怪的语言。他可能ม认为那些语言也许与blub一样强大,但是加入了不少怪东西。他觉得blub语言已经够用了,不用再考虑那ว些语言了。这时,他的思维就是已经被blubຘ同化了。

但是,当我们转换视角,把自己้想象成使用曲线更上方แ某一种语言的程序员并往下看的时候,我们就会现,自己也同样轻视blub语言。你怎么用bຘlub语言完成工作呢?它甚至连yy功能都没有!

↑返回顶部↑

书页/目录

黑客与画家