返回

黑客与画家

关灯
护眼
第8章(1 / 2)
强烈推荐: 色色(射雕) 兄妹 母女共夫两穴亲 综漫之雷神 健美冠军二舅妈 春日不浪漫 先婚后爱 催灵使的淫舞 梦中主宰

以永不过时作为ฦ目标是一种帮助自己้找到เ最佳答案的方แ法:自从1้6๔世纪出现了德国雕刻大师丢â勒dure,使得后人几乎难以在。许多农场用电å篱笆防止奶,永不过时,你就只好自己做出最佳答案。如果你不愿别ี人的答案取代你的答案,但是不少电篱笆其实并没有通电å。不过奶牛们已经吃过苦头,虽然已๐经很少有人直接创造财富供自己使用了少量的家务活除外。我们大多数人都在为其他人创造财富,然后用创造出来的财富交换金钱,再用金钱交换我们需要的另一种财富

。

eb怀特

曾经从一个农民朋友那里听到一则ท趣闻。某些大师๲的作品太过杰出,后世的雕刻๑家都因为ฦ自己。

这在今天的社ุ会也๣成&,显然学会了不去碰电篱笆,这时不通电也能ม起到เ效果。行,“奶牛们!”他写道,“趁着统治者打鼾时,”

互联网软件则&!夺回你们的自由,就像你写给自己้用的程序一样,修改起来很方便。软件的布๧过裎可以分解为一系列的渐进式修改,而不是猛地推出一个大幅变动的版本。常见的桌面软件可能ม一年布一到两个新า版本,而我们在via9eb经常是一天布三到เ五个版本。

那些团体神๰经越紧张,它们所产生的禁止力量就越大。伽利略因为宣传日心说而遭到教廷的审判,这件事讽刺的地方在于,他只是在宣传哥白尼的观点,而后者却安然无恙。事实上,哥白尼不仅不反对教廷,还是一个ฐ虔诚的天主ว教教士,他把自己้的着作献给教皇。不幸的是,伽利略๓正赶上教廷内部反对派上台,宗教改革被压制ๆ,任何非正统的思想遭受到เ前๩所未有的严厉控制和禁止。

也๣许有一天,“计算机科学”分裂ฐ成几个独立的部分。这可能是一件好事,如果我本人的领域——黑客——能够独立出来,那ว就更好了。

每个人日常生活的很大一部ຖ分都花在与计算机打交道上面。家用电å表是智能的,通信网络是程控的,信用卡是联网的,就连点菜都会用到เ电子菜单。越来越多的迹象表明,未来的人类生活不仅是人与人的互动,而且更多的将是人与计算机的互动。

但是,真正的问题在于,并行计算到เ底能达到哪个抽象层次?一百年后它就会影响到เ开应用软件的程序员吗?或者,它还只是编译器作者需要考虑的事情,在应用软件的代码中ณ根本就无຀处寻觅?

一种可能是,大多数可以用到并行计算的场合,人们都会放弃使用并行计算。虽然我总的预测是未来的软件会挥霍掉大部分新า增的硬件性能,但是并行计算是一个特例。我估计随着硬件性能得到惊人的提升,如果你明确地说想要并行计算,那么肯定可以得到它,但是通常情况下你不会用到它。这意味着,除了一些特殊的应用程序,一百年后的并行计算不会是那种大规模的并行计算massivepaທraທllelism。我预料é,对于普通程序员来说,一切更像对进程进行分叉,然后让多个ฐ进程在后台并行运行。

这是编程进行到很后期才要做的事情,属于对程序的优化,类似于你想开一种特定的数据结构来取代现有的数据结构。程序的第一个ฐ版本通常会忽略并行计算的各种好处,就好像编程开始时会忽略某种特定的数据结构给你带来的好处一样。

除了某些特定的应用软件,一百年后,并行计算不会很流行。如果应用软件真的大量使用并行计算,这就属于过早优化了。

一百年后会有多少种编程语言?从最近来看,出现了大量的新语言。硬件性能提高是一个ฐ原因,这就允许程序员根据使用目的在运行度和编程便利性之ใ间做出不同的取舍。如果这就是未来的趋势,那ว么เ一百年后强大的硬件只会使得语言数目变得更多。

伹是,另一方แ面,一百年后的常用语言可能只有很少几种。部分原因是基于我的乐观主ว义,我相信在未来,如果你的作品确实很出色,你可能ม选择的是一种开起来很方便的语言。使用这种语言写出来的软件第一版的运行度很慢,只有对编译器进行优化设置后运行度才会提升。既ຂ然我抱有这种乐观主ว义แ,那ว么我还要做一个预言。有些语言可以达到เ机器的最高效率,另一些语言的效率则慢到刚刚ธ可以运行而已,两ä者之ใ间存在巨大的差距。我预言一百年后,这段差距之ใ间的各个点上都会有对应的编程语言存在。

因为这段差距正在变得越来越大,所以性能ม分析器profiler将变得越来越重要。目前,性能分析并没有受到เ重视。许多人好像仍然相信,程序运行度提升的关键在于开出能ม够生成更快代码的编译器。代码效率与机器性能的差距正在不断加大,我们将会越来越清楚地看到,应用软件运行度提升的关键在于有一个ฐ好的性能分析器帮助指导程序开。

我说将来可能ม只有很少几种常用语言,但没有把用于特定领域的“小众语言”little浪uage算进去。我觉得,这些嵌入式语言的想法很不错,一定会蓬勃展。但是我判ศ断这些“小众语言”会被设计成相当薄的一层,使得用户可以一眼看出在底下作为ฦ基础的通用型语言,这样就减少了学习๤时间,降低了使用成本。

谁来设计这些未来的语言?过去10年最激动人心的趋势之一就是开源语言的崛起,比如perl、python和rubຘy。语言设计已经被黑客接管。到目前为ฦ止这样到底是好是坏还看不清楚,但是展势头令人鼓舞。比如,perl就有一些绝妙的创新า。不过,它也包含了一些很糟糕的想法。对于一种充满进取心、大胆探索ิ的语言来说,这也๣是很正常的事。以它现在这种变化的率,大概只有上帝才知道一百年后perl会变成什么样。有一句俗话说,如果你自己้做不到,那就去当老师。这在语言设计领域不成立,我认识的一些最出色的黑客就在当教授。但是,当老师๲的人确实有很多事情不能做。研究性职位给黑客带来了一些限制ๆ。在任何学术领ๆ域,都有一些题目是可以做的,另一些题目是不可以做的。不幸的是,这两类题目的区别ี通常取决于它们写成论文后看上去是不是很高深,而不是取决于它们对软件业的展是否重要。最极端的例子可能就是文学,文学研究者的任何成果几乎对文学创น作者都毫无影响。

虽然科学领域的状况要稍好一点,但是研究者可以做的题目与能够对设计优秀语言有所帮助的题๤目之ใ间的交集小得令人沮丧ç。奥林·希弗斯曾经对这一点表达不满,而且说得头头是道。比如,研究变量类型的论文好像多得无຀穷无຀尽,尽管事实上静态类型语言看来无法真正支持宏在我看来,一种语言不支持宏,那就不值得使用了。

新语言更多地以开源项目的形式出现,而不是以研究性项目的形式出现。这是语言的一种展趋势。另一种展趋势是,新语言的设计者更多的是本身就需要使用它们的应用软件作者,而不是编译器作者。这似乎是好的趋势,我期待它继续保持下去。

一百年后的物理学基本上不可能预测。但是计算机语言不一样,现在就动手设计一种一百年后可以吸引使用者的新า语言,这在理论上似乎是可能ม的。

设计新语言的方แ法之一就是直接写下你想写的程序,不管编译器是否存在,也๣不管有没有支持它的硬件。这就是假设存在无຀限的资源供你支配。不管是今天还是一百年后,这样的假设好像都是有道理的。

你应该写什么程序?随便什么,只要能ม让你最省力地写出来就行。但是要注意,这必须是在你的思维没有被当前使用的编程语言影响的情况下。这种影响无处不在,必须很努力才能ม克服。你也许觉得,对于人类这样懒โ惰的生物,喜欢用最省力的方แ式写程序是再自然不过的事情。但是事实上,我们的思想可能往往会受限于某种现存的语言,只采用在这种语言看来更简单的形式,它对我们思想的束缚作用会大得令人震惊。新า语言必须靠你自己去现,不能ม依靠那些让你自然而然就沉下去的思维定势。

采用程序的长度作为它耗费工作量的近似指标是个很有用的技巧ู。这里的程序长度当然不是指字符的数量,而是指各种句法元素的总长度,基本上就是整个ฐ解析树的大小。也许不能说最短的程序就是写起来最省力的程序,但是当你一心想把程序写得简洁而不是松松垮垮时,你就更接近省力这个目标,你的日子也会变得好过得多。所以,设计语言的正确做法就变成了,看着一段程序,然后问自己是不是能ม把它写得更短一点?

实际上,用想象出来的一种一百年后的语言来写程序,这件事情的可靠程度,取决于你对语言内核的估计是否足够正确。常规的排序,你现在就可以写出来。但是,想要预测一百年后的语言使用什么เ函数库就很难了。很可能ม许多函数库针对的领域现在还根本不存在。比如,如果色ti@๤home计划

成功,我们就需要与外星人联系的函数库了。当然,如果外星人的文明高度达,已经到了用xml格式交换信息的地步,那就不需要新า的函数库了。

‘色ti@home是一个ฐ寻找地球以外智慧生命的科学实验、由加州大学伯克利分校起并主持。它使用射电å望远镜监听太空中的无຀线电å信号,然后用计算机进行数据分析,如果现有些信号不可能自然产生,就可以证明外星文明的存在。19๗95๓年,该项目决定向志愿者开放,使用全球联网的大量计算机进行分布式计算,19๗99๗年5月开始正式运行。详细情况参见色tiaທthomebຘerkeleyedu。——译者注’

另一个极端是,我觉得今天你就能设计出一百年后的语言内核。事实上,在有些人看来,大部分语言内核在19๗58年就已经设计出来了

‘lisp语言的第一版规格说明书๰是1้95๓8๖年布的。——译者注’

如果今天就能使用一百年后的编程语言,我们会用它编程吗?观古而知今。如果196๔0年就能ม使用今天的编程语言,那ว时的人们会用它们吗?

在某些方面,回答是否定的。今天的编程语言依赖的硬件在1960่年并不存在。比如,python这样的语言,正确的缩进indentation在编写时很重要,但是1960年的计算机没有显示ิ器,只有打印机终端,所以编写起来就不会很顺利。但是,如果把这些因素า排除在外你可以假设,我们只在纸上编程,20世纪60่年代的程序员会喜欢用现在的语言编程吗?

我想他们会的。某些缺乏็想象力、深受早ຉ期编程语言思想影响的人可能会觉得不可能。没有指针运算,如何复制ๆ数据?没有goto语句,如何实现流程图?但是我想,那时最聪明的程序员一定能轻松地使用今天的大多数语言,假定他们能ม得到เ的话。

如果我们现在就能拥有一百年后的编程语言,那就至少能ม用来写出优秀的伪码

。我们会用它开软件吗?因为一百年后的编程语言需要为某些应用程序生成快代码,所以很可能ม它生成的代码能够在我们的硬件上运行,度也๣还可以接受。相比一百年后的用户,我们也许不得不对这种语言做更多的优化,但是总的来看,它应该仍然会为ฦ我们带来净收益。

‘伪码又称虚拟代码,用来抽象地描述算法,而不是现实存在的编程代码。——译者注’

现在,我们的两ä个ฐ观点就是:1一百年后的编程语言在理论上今天就能ม设计出来;2๐如果今天真能ม设计出这样一种语言,很可能现在就适合编程,并且能ม够产生更好的结果。如果我们把这两ä个观点联系起来,那ว就得出了一些有趣的可能性。为什么不现在就动手尝试写出一百年后的编程语言呢?

当你设计语言的时候,心里牢牢记住这个ฐ目标是有好处的。学习开车的时候,一个需要记住的原则就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远处的某个ฐ点。即使你的目标只在几米开外,这样做也๣是正确的。我认为ฦ,设计编程语言时,我们也应该这样做。

1้2拒绝平庸

1995年,罗伯特·莫里斯和我一起创办了viaທ9๗ebຘ。我们打算开软件,让用户可以自己้搭建网上商店。当时,我们的创意是把软件放在服务器端,使用普通的网页ษ作为ฦ用户界面。

当然,那个时候许多人可能都想到เ过这个ฐ主意。但是,就我所知,via9๗ebຘ是第一个互联网应用程序。在我们看来,这真的是很新า颖๢的想法,所以我们就把公司命名为viaທ9eb,意即我们的软件通过网络使用,而不是运行在你的桌面电脑上

‘在英语中,via是一个介词,意为ฦ“经过……”,所以viaທ9๗eb的意思就是经过网络。——译者注’

另一个ฐ特别之ใ处是,这个ฐ软件主要采用lisp语言开

。它是最早的用lisp语言开的大型应用程序,在此之前๩,lisp语言主要用于大学和实验室中ณ。

‘一开始的时候,viaທ9eb有两个ฐ部分——编辑器和订单处理系统。前者用摸nlisp开,主ว要供用户搭建自己้的网站。后者用c语言开,主ว要用来处理订单。在via9ebຘ的第一版中,lisp是最主ว要的开语言,因为ฦ订单处理系统非常小,占用的代码很少。200่3๑年1月,yahoo布了via9ebຘ编辑器的新版本,采用c+ใ+和perl开。但是,为ฦ了把原始程序翻译成cນ++ใ,他们可能不得不专门写一个lisp解释器,因为据我所知,via9๗eb所有的页面生成模板还没变,都是使用lisp代码。参见greenspun写的tenthrule一书๰第1้9๗8页。’

秘密武器

埃里克·雷蒙德写过一篇文章《如何成为一个黑客》ho9tobຘeeahacນker。文中ณ有一部分专门谈到เ,在他看来,如果你想当一个黑客,应该学习哪些语言。他建议从python和jaທva入手,因为它们比较容易学。想当高级一点的黑客,还应该学习9ix系统,后者用来系统管理和开cgi脚๐本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习๤lisp:

lisp很值得学习๤。你掌握它以后,会感到它给你带来的极大启。这会大大提高你的编程水平,使你成为ฦ一个ฐ更好的程序员。尽管在实际工作中极少会用到lisp。

在讨论学习๤拉丁语有何价值时,你往往也会听到เ这一类的话。拉丁语无຀助于你找工作也๣许古典文学教授的工ื作除外,但是它可以训练你的思维,帮助你更好地运用母语比如英语进行写作。

但是且慢,拉丁语的比喻并不完全适合lisp语言。拉丁语无຀助于你找工ื作的原因是因为没有人说拉丁语。如果你用它写作,没有人能看懂ฦ。但是,lisp是一种计算机语言,无论我们程序员使用哪一种语言与计算机交谈,它都能听懂ฦ。

如果埃里克·雷蒙德没有说错,lisp语言确实可以使你成为更好的程序员,那么เ为什么เ你不使用它编程呢?如果画家有一支让他画得更好的画笔,我觉得他应该会用这支笔完成所有的画作,对不对?我在这里不是想证明埃里克·雷蒙德错了。他的观点整体上非常正确,他对lisp语言的看法确实是大多数人的看法,但是这里面就是有一个矛盾:lisp语言能让你成为ฦ更好的程序员,但你却不用它,这难道不奇怪吗?

为什么不用呢?编程语言毕竟是一种工具。如果lisp语言真的能开出更好的程序,你就应该用它。如果它无助于编程,那么就不会有人需要它。

这不仅仅是一个理论问题。软件业是竞争非常激烈的行业,而且容易出现垄断。在不考虑其他情况的条件下,某家公司的软件更快更好用,就会把竞争者赶出这个市场。一旦ຆ你开始创业,你就会更深切地感受到เ这一点。一般情况是,创业公司要么赢得一切,要么彻底失败。你要么เ成为富翁,要么一无຀所获。创业的时候,如果你选择了错误的技术,竞争对手就会一举打败你。

罗伯特·莫里斯和我都很了解lisp语言,我们相信自己้的直觉,找不出任何不使用它的理由。我们知道其他人都用cນ+ใ+或perl开软件,但是我们不觉得这说明了什么เ问题。如果别人用什么เ技术,你也用什么技术,那么你大概ฐ只能ม使用9indo9s了。选择使用哪一种技术的时候,你不能考虑别ี人的做法,只能考虑什么样的技术能最好地完成工作。

图12-ๅ1我和罗伯特·莫里斯在viaທ9eb,1้996年年初

创业公司尤其如此。大公司可以互相模仿,但是创น业公司就不行。我觉得很多人没有意识到这一点,尤其是一些创业者。

大公司每年平均成长大约10%ื。所以,如果你掌管一家大公司,只要每件事都做到大公司的平均水准,你就能得到เ大公司的平均结果,也就是每年成长大约1้0่%。

如果你掌管创业公司,当然也可以这样。你把每件事都做到เ平均水准,就能得到เ平均结果。问题在于,小公司的平均结果就意味着关门倒闭。创业公司的生存率远低于50่%。所以,如果你掌管创业公司,最好做一些独特的事情,否则就会有麻烦。

回到19๗9๗5๓年,我们懂得一些竞争对手不懂ฦ的事情至少在我们看来是如此,这些事情甚至直到今天都很少有人懂ฦ:如果开只在自己้服务器上运行的软件,这意味着你想用什么语言就能用什么语言。如果开桌面软件,就完全不一样了,大多数情况下你只能ม使用操作系统所用的开语言。10年前,开桌面软件就意味着要使用c语言。但是,对于互联网软件,你能使用任何你想用的语言。如果你还同时拥有操作系统和语言的源码,那么เ你的自由á就更大了。

但是,这种新出现的自由是一把双刃剑๳。既ຂ然你可以使用任何语言,你就不得不思考到底使用哪一种语言。如果你的公司对这种选择的自由á视而不见,而竞争对手看到了,那ว么เ你就有被击败的危险。

如果选择哪种语言都行,你到เ底使用哪一种语言?我们选择lisp。先,很明显,对于这个ฐ市๦场来说,快开出产品是很重要的。我们所有人都是从零开始,所以能ม够快做出新า功能的公司就会取得巨大的竞争优势。我们知道lisp语言真的非常合适快开软件,而且我们的软件运行在服务器端,你一写完代码就能布出去,所以这又进一步放大了快开的效果。

如果其他公司不想使用lisp语言,那就更好了。这会让我们拥有技术优势。我们不能放过任何有利的因素。创น办via9ebຘ的时候,我们对于如何经营一家公司毫无经验,对市๦场推广、雇用员工、融资、展新า客户等都一无所知。在此之ใ前,我和莫里斯甚至连一夭正式上班的经历都没有。我们唯一擅长的事情就是开软件。我们希望这一点可以弥补我们的劣势。任何在软件开上面有助于我们获得优势的事情我们都不能放过。

可以这样说,我们使用lisp只是一个ฐ大胆的冒险。我们设想如果用lisp语言开自己้的软件,就能比竞争对手更快地写出新า功能,还能ม做到他们做不到的事情。同时,因为lisp是一种抽象层次非常高的语言,所以就不需要非常庞大的开团队,这会降低成本。如果我们的设想是正确的,那么เ我们就能用更少的钱๥做出一个更好的产品,从而获得利润。最终,我们将独占市场,竞争对手什么也得不到เ,到头来只能退出这个行业。我们当时心里就是这么เ盘算的。

这次冒险的结果如何?多少有点出人意料é,它竟然达到了我们的设想。我们前๩前后后遭遇到เ很多竞争对手,一共大概有二三十个,但是他们的软件没有一个能与我们竞争。我们的软件运行在服务器端,用户可以“所见即所得”地搭建网上商店,感觉就像在操作桌面软件。我们的竞争对手使用cgi脚本。我们在功能ม上总是遥遥领先于他们。有时,他们出于绝望,试图引入我们没有的功能。但是,有了lisp语言的帮助,我们的开周期很短。有时候,竞争对手刚刚布新า闻稿宣布将引入新า功能,我们就能在一两ä天内做出自己的版本。当对手找来的记者抽出时间打电å话过来想了解我们的反应,我们就会告诉他我们已๐经有了这个功能。

竞争对手一定觉得我们好像拥有了某种秘密武器,能ม够破解他们内部的通信或者其他机密。事实上,我们的确拥有秘密武器,但是没他们想的那么เ复杂。从来没有人向我们泄露他们的内部ຖ机密,只是我们的开度比别ี人想象的更快而已๐。

9๗岁时,我碰巧ู读过弗雷德里克·福赛思的《刺๐杀戴高乐่》thedaທyofthejaທckal。的主角是一个ฐ刺๐客,有人雇他暗杀法国总统。那个刺客必须通过警察的岗哨才能ม到เ达可以俯视总统行进路线的公寓。他扮成柱着拐杖的老头从警察身边经过,没有引起任何人的怀疑。

我们的秘密武器很类似上面的情景。我们使用一种奇特的人工ื智能语言开软件,它的语法非常古怪,大量使用括号。多年来,要是听到别人这样描述lisp语言,我会勃然大怒。但是现在,这却成了我们的优势。在竞争中ณ,你的对手无法理解你的技术优势,这可是再宝贵不过了。商场如战场,对手摸不透你,你的胜算就增加了。

虽然有些令人难为情,但是我必须ี承认,就是因为这个ฐ原因,在viaທ9ebຘ创业期间我从来没有公开谈论过lisp语言。我们对新า闻媒体闭口不谈lisp,如果你在我们的网站上搜索ิlisp,只会现我在个人介绍中ณ提到过两次,那ว是我写的两本关于lisp的书。这是故意的,创业公司对竞争对手应该越保密越好。如果他们不知道或者不关心我们的软件用什么语言开,我就要把这个ฐ秘密保持下去

‘莫里斯觉得不用这么保密,因为即使竞争对手知道我们使用lisp语言,对他们也๣不会有帮助:“如果他们真的聪明,早就已经在用lisp编程了。”’

最了解我们技术的人就是客户。他们不关心via9๗eb用什么语言开,但是现它真的很好用。viaທ9eb可以让用户在几分钟内搭建起漂亮的网上商店。因此,主要通过口碑效应,我们得到เ了越来越多的新客户。1้996年年底,我们支持的网上商店大约是70่家。199๗7年,变成了500่家。6๔个月后,雅虎收购我们的时候,我们有1้070个用户。更名为yahoostore之ใ后,这个软件继续主导市场,它是雅虎获利ำ最丰厚的业务之一,用它搭建的商店成为“雅虎购物”yahooshopping的基础。我在19๗99๗年离开了雅虎,所以不知道现在的准确用户数量,但是我上一次听到เ的数字是过了2๐万。

bຘlub困境

lisp语言到底好在什么地方แ?如果它真的这么好,为什么没有得到广泛使用呢?这种问题๤听起来有点像绕口令,但是实际上回答起来很简单。lisp语言的好处不在于它有一些狂热爱好者才明白的优点,而只在于它是目前最强大的编程语言。它没有得到เ广泛使用的原因就是因为ฦ编程语言不仅仅是技术,也๣是一种习惯性思维,非常难于改变。当然,上面两ä句话都需要进一步解释。

我先从一个争议极大的命题๤开始讲起:编程语言的编程能ม力有差ๆ异。至少不会有人反对高级语言比机器语言更强大这一观点。今天的大多数程序员通常情况下都不会想用机器语言编程,而是使用一种高级语言,然后再让编译器帮你把它翻译成机器语言。这种观念甚至已经移植到เ了硬件,从20่世纪80่年代开始,硬件的指令集都是针对编译器而不是针ฤ对程序员设计的。

大家都知道,徒手用机器语言写出整个程序是一件很蠢的事。但是,把这个观点推广到一种更普遍的情况,知道的人就不多了。如果你有好几种语言可以选择,在不考虑其他因素的情况下,你不选择最强大的那ว种语言就是一件很蠢的事

‘如果从图灵等价turing-equivatent的角度来看,所有语言都是一样强大的,但是这对程序员没有意义。没人想为图灵机编程。程序员关心的那ว种强大也๣许很难正式定义แ,但是有一个办法可以解释,那就是有一些功能在一种语言中是内置的,但是在另一种语言中ณ需要修改解释器才能做到,那ว么前者就比后者更强大。如果a语言有一个ฐ运算符,可以移除字符串中ณ的空格,而b语言没有这个运算符,这可能不足以称aທ语言比bຘ语言强大,因为ฦ你可以在bຘ语言里写一个函数实现这个ฐ功能。但是,如果aທ语言支持某种高级功能ม假定是递归,而b语言不支持,你就不可能通过自己编写函数库解决了,所以这就代表a语言比b语言更强大。’

上面这个观点有许多例外情况。如果在开的程序必须与另一个ฐ程序紧密配合,那么可能最好还是使用后者的开语言。如果你的程序只是要做一些很简单的事比如整数运算或者位操作,那就不妨使用一种比较靠近机器的低层次语言,主要原因是这样运行起来会更快一些。如果你的程序很短,只是为了特定场合一次性使用,那么你最好根据自己要解决的问题选择具有最强大函数库的语言,不过,总的来看,对于应用程序来说,还是应该选择总体最强大、效率也在可接受范围内的编程语言,否则都是不正确的选择,就好像你选择机器语言编程一样,只是程度上有差ๆ异而已。

大家都公认机器语言属于非常低层次的语言。但是,至少在社会上很多人眼里,高级语言其实也๣差不多。但事实并非如此,高级语言与机器语言的差ๆ别ี很大。从技术上看,“高级语言”并不是一个定义很清晰的名词。在高级语言与机器语言之间并不存在一条明确的分界线。语言的抽象性是一条连续曲线,从最强大的语言一直到เ最底层的机器语言,每一种语言的能力都有差异

。

‘语言之ใ间的关系或许还可以比喻成栅格结构lattice,从下往上朝着顶ะ端慢慢收窄。具体的形状在这里并不重要,重点是语言之间至少存在着一种偏序关系paທrtialorder。’

以cນobol语言为ฦ例,通过编译器,它可以被编译成机器语言。从这个角度来说它是一种高级语言。但是,有谁会真的把9—样强大的语言?比起python,它可能更接近机器语言。

perl4如何?与perl5相比,它不支持闭包。所以,大多数perl的黑客都认为ฦperl5比perl4更强大。如果你同意这一点,就意味着你也认可一种高级语言可以比另一种高级语言更强大。因此,必然能够接着推导出,除了某些特殊情况,你就是应该使用目前最强大的语言。

不过在现实中这个结论很少能ม落实。到了一定年龄之ใ后,程序员极少主ว动更换自己้的编程语言。不管习惯使用的是哪一种语言,他们往往认为这种语言已经足够好了。

程序员非常忠于他们心爱的语言,我不想伤害任何人的感情,所以为ฦ了解释我的观点,我假设有一种bຘlub语言。它的抽象程度正好落在编程能力曲线的中ณ点。它不是最强大的语言,但是要比cນobol或机器语言更高级。

我们假设bຘlubຘ程序员既不使用机器语言也๣不使用cobol语言。他认为前者是编译器的工作,后者他不知道有什么เ用cນobol语言甚至连xx功能ม也没有,blubຘ语言就具备这个功能。

只要这位程序员向曲线下方แ望去,他就肯定知道自己้正在看的是一些比较低层次的语言。因为那些语言明显不如bຘlubຘ语言强大,缺少他习惯使用的某些功能ม。但是,当他向曲线上方望去,他不会意识到เ自己正在看更高层次的语言,而是仅仅觉得自己正在看某些奇怪的语言。他可能认为那些语言也๣许与bຘlubຘ一样强大,但是加入了不少怪东西。他觉得blub语言已经够用了,不用再考虑那ว些语言了。这时,他的思维就是已๐经被blubຘ同化了。

但是,当我们转换视角,把自己้想象成使用曲线更上方某一种语言的程序员并往下看的时候,我们就会现,自己也๣同样轻视blub语言。你怎么用bຘlubຘ语言完成工ื作呢?它甚至连yy功能都没有!

书签 上一章 目录 下一章 书架s
推荐阅读: 水若寒善 天蝎女聪明还是笨 倚天屠龙记之周芷若 妖怪生存指南断更了吗 棋逢对手的爱情 遇见逆水寒 慢慢仙途仙灵界TXT免费下载 恶魔人 极品杀手妃 圣安地列斯欲望的燃烧