返回

黑客与画家

关灯
护眼
第8章(1 / 2)
强烈推荐: (魔幻)帝国的末日 圣狩 兔子的征途 老师,请接招 圣灵仙魔传 疯狂机械时代 网王之越前家的丑小鸭 八哥不是一只鸟 兵痞帝皇

‘为什么เ财富的分配问题๤引起这么เ多争论?

由á于孩子们接触到钱๥的方式,你一定很熟悉这种现象:桌面软件开之中的许多棘手问题๤。如果你在酒吧里听过大家议论体育赛事,很多人都少有创น。部分原因是反对声最大的人当中,都是源自于它的那&#x,

我们的大多数。他们认为财富的总量是不变的,某个权威负责分配财富所以理应平均分配,没有意识到เ财富是创造出来而且创造得不太均等。

一旦采用了这种新模式,你就会知道布方แ式对软件开的影响有多么重大。大学生、继承人、教授、政客,他们往往会误解财富。把财富与钱混为一谈,这使得他们的软件明显不如我们,因为ฦ不考虑其他原因他们无຀法解决cgi脚本不能识别用户状态的问题。你不得不把表单的所有内容都放在同,如果用户想要修改表单的部ຖ分内容,然后在最下面放一个“更新”按钮。正如我将在第12章中ณ解释的,我们使得viaທ9eb编辑器更接近桌面软件带,通过使用lisp这种许多人眼中的教学语言。

把不同类型的工ื作捆绑在一起,可能是为了行政管理的方便,但是却容易引起混淆。这是我不喜欢“计算机科学”这个ฐ词的又一个原因。中ณ间部分“计算机科学家”的工作,也๣许还可以被称为计算机的实验科学。但是,两ä端的数学家和黑客,并不是在做计算机的科学研究。

有时,黑客做的事情被称为“软件工程”soft9areengineering,但是这个词也是误导的。与其说优秀的软件设计师是工ื程师,还不如说是建筑师

。建筑学和工程学之ใ间的区别并不是很严格的,但就是存在区别。这表现在“做什么”和“怎么做”:建筑师决定做什么เ,工程师๲想出怎么เ做。

但是,真正的问题在于,并行计算到เ底能达到哪个抽象层次?一百年后它就会影响到开应用软件的程序员吗?或者,它还只是编译器作者需要考虑的事情,在应用软件的代码中根本就无处寻觅?

一种可能ม是,大多数可以用到并行计算的场合,人们都会放弃使用并行计算。虽然我总的预测是未来的软件会挥霍掉大部ຖ分新增的硬件性能,但是并行计算是一个特例。我估计随着硬件性能得到惊人的提升,如果你明确地说想要并行计算,那么肯定可以得到它,但是通常情况下你不会用到它。这意味着,除了一些特殊的应用程序,一百年后的并行计算不会是那种大规模的并行计算massivepaທraທllelism。我预料é,对于普通程序员来说,一切更像对进程进行分叉,然后让多个进程在后台并行运行。

这是编程进行到很后期才要做的事情,属于对程序的优化,类似于你想开一种特定的数据结构来取代现有的数据结构。程序的第一个版本通常会忽略并行计算的各种好处,就好像编程开始时会忽略某种特定的数据结构给你带来的好处一样。

除了某些特定的应用软件,一百年后,并行计算不会很流行。如果应用软件真的大量使用并行计算,这就属于过早优化了。

一百年后会有多少种编程语言?从最近来看,出现了大量的新语言。硬件性能提高是一个原因,这就允许程序员根据使用目的在运行度和编程便利ำ性之间做出不同的取舍。如果这就是未来的趋势,那么เ一百年后强大的硬件只会使得语言数目变得更多。

伹是,另一方面,一百年后的常用语言可能只有很少几种。部ຖ分原因是基于我的乐观主义แ,我相信在未来,如果你的作品确实很出色,你可能选择的是一种开起来很方便的语言。使用这种语言写出来的软件第一版的运行度很慢,只有对编译器进行优化设置后运行度才会提升。既然我抱有这种乐่观主义,那么เ我还要做一个预言。有些语言可以达到机器的最高效率,另一些语言的效率则慢到刚ธ刚可以运行而已,两者之间存在巨大的差距。我预言一百年后,这段差距之间的各个点上都会有对应的编程语言存在。

因为这段差距正在变得越来越大,所以性能分析器profiler将变得越来越重要。目前,性能分析并没有受到重视。许多人好像仍然相信,程序运行度提升的关键在于开出能够生成更快代码的编译器。代码效率与机器性能的差距正在不断加大,我们将会越来越清楚地看到,应用软件运行度提升的关键在于有一个好的性能分析器帮助指导程序开。

我说将来可能只有很少几种常用语言,但没有把用于特定领域的“小众语言”little浪ฐuage算进去。我觉得,这些嵌入式语言的想法很不错,一定会蓬ศ勃展。但是我判断这些“小众语言”会被设计成相当薄的一层,使得用户可以一眼看出在底下作为基础的通用型语言,这样就减少了学习๤时间,降低了使用成本。

谁来设计这些未来的语言?过去10年最激动人心的趋势之一就是开源语言的崛起,比如perl、python和ruby。语言设计已经被黑客接管。到目前为止这样到底是好是坏还看不清楚,但是展势头令人鼓舞。比如,perl就有一些绝妙的创น新。不过,它也包含了一些很糟糕的想法。对于一种充满进取心、大胆探索的语言来说,这也是很正常的事。以它现在这种变化的率,大概只有上帝ຓ才知道一百年后perl会变成什么เ样。有一句俗话说,如果你自己做不到,那就去当老师๲。这在语言设计领ๆ域不成立,我认识的一些最出色的黑客就在当教授。但是,当老师的人确实有很多事情不能ม做。研究性职位给黑客带来了一些限制。在任何学术领域,都有一些题目是可以做的,另一些题๤目是不可以做的。不幸的是,这两ä类题目的区别ี通常取决于它们写成论文后看上去是不是很高深,而不是取决于它们对软件业的展是否重要。最极端的例子可能ม就是文学,文学研究者的任何成果几乎对文学创作者都毫无影响。

虽然科学领域的状况要稍好一点,但是研究者可以做的题๤目与能够对设计优秀语言有所帮助的题目之ใ间的交集小得令人沮丧。奥林·希๶弗斯曾经对这一点表达不满,而且说得头头是道。比如,研究变量类型的论文好像多得无穷无尽,尽管事实上静态类型语言看来无法真正支持宏在我看来,一种语言不支持宏,那就不值得使用了。

新า语言更多地以开源项目的形式出现,而不是以研究性项目的形式出现。这是语言的一种展趋势。另一种展趋势是,新语言的设计者更多的是本身就需要使用它们的应用软件作者,而不是编译器作者。这似乎是好的趋势,我期待它继续保持下去。

一百年后的物理学基本上不可能预测。但是计算机语言不一样,现在就动手设计一种一百年后可以吸引使用者的新า语言,这在理论上似乎ๆ是可能的。

设计新语言的方法之一就是直接写下你想写的程序,不管编译器是否存在,也不管有没有支持它的硬件。这就是假设存在无限的资源供你支配。不管是今天还是一百年后,这样的假设好像都是有道理的。

你应该写什么程序?随便什么,只要能让你最省力地写出来就行。但是要注意,这必须是在你的思维没有被当前๩使用的编程语言影响的情况下。这种影响无处不在,必须ี很努力才能ม克服。你也๣许觉得,对于人类这样懒惰的生物,喜欢用最省力的方แ式写程序是再自然不过的事情。但是事实上,我们的思想可能ม往往会受限于某种现存的语言,只采用在这种语言看来更简单的形式,它对我们思想的束缚作用会大得令人震惊。新语言必须靠你自己去现,不能依靠那些让你自然而然就沉下去的思维定势。

采用程序的长度作为ฦ它耗费工ื作量的近似指标是个很有用的技巧ู。这里的程序长度当然不是指字符的数量,而是指各种句法元素的总长度,基本上就是整个解析树的大小。也许不能说最短的程序就是写起来最省力的程序,但是当你一心想把程序写得简洁而不是松松垮垮时,你就更接近省力这个目标,你的日子也๣会变得好过得多。所以,设计语言的正确做法就变成了,看着一段程序,然后问自己是不是能把它写得更短一点?

实际上,用想象出来的一种一百年后的语言来写程序,这件事情的可靠程度,取决于你对语言内核的估计是否足够正确。常规的排序,你现在就可以写出来。但是,想要预测一百年后的语言使用什么函数库就很难了。很可能许多函数库针对的领域现在还根本不存在。比如,如果色ti@home计划

成功,我们就需要与外星人联系的函数库了。当然,如果外星人的文明高度达,已经到了用xml格式交换信息的地步,那ว就不需要新的函数库了。

‘色ti@home是一个寻找地球以外智慧生命的科学实验、由加州大学伯克利分校起并主持。它使用射电望远镜监听太空中的无຀线电信号,然后用计算机进行数据分析,如果现有些信号不可能自然产生,就可以证明外星文明的存在。199๗5年,该项ำ目决定向志愿者开放,使用全球联网的大量计算机进行分布式计算,1้99๗9年5月开始正式运行。详细情况参见色tiathomeberkeleyedu。——译者注’

另一个极端是,我觉得今天你就能设计出一百年后的语言内核。事实上,在有些人看来,大部分语言内核在195๓8年就已经设计出来了

。

‘lisp语言的第一版规格说明书是1้958年布的。——译者注’

如果今天就能使用一百年后的编程语言,我们会用它编程吗?观古而知今。如果1960่年就能使用今天的编程语言,那时的人们会用它们吗?

在某些方面,回答是否定的。今天的编程语言依赖的硬件在196๔0年并不存在。比如,python这样的语言,正确的缩进indentation在编写时很重要,但是19๗60年的计算机没有显示器,只有打印机终端,所以编写起来就不会很顺利。但是,如果把这些因素排除在外你可以假设,我们只在纸上编程,20世纪60年代的程序员会喜欢用现在的语言编程吗?

我想他们会的。某些缺乏想象力、深受早期编程语言思想影响的人可能会觉得不可能。没有指针ฤ运算,如何复制数据?没有goto语句,如何实现流程图?但是我想,那时最聪明的程序员一定能轻松地使用今天的大多数语言,假定他们能得到的话。

如果我们现在就能ม拥有一百年后的编程语言,那就至少能用来写出优秀的伪码

。我们会用它开软件吗?因为一百年后的编程语言需要为ฦ某些应用程序生成快代码,所以很可能它生成的代码能够在我们的硬件上运行,度也还可以接受。相比一百年后的用户,我们也许不得不对这种语言做更多的优化,但是总的来看,它应该仍然会为我们带来净收益。

‘伪码又称虚拟代码,用来抽象地描述算法,而不是现实存在的编程代码。——译者注’

现在,我们的两个观点就是:1一百年后的编程语言在理论上今天就能设计出来;2如果今天真能设计出这样一种语言,很可能现在就适合编程,并且能够产生更好的结果。如果我们把这两个观点联系起来,那ว就得出了一些有趣的可能性。为什么不现在就动手尝试写出一百年后的编程语言呢?

当你设计语言的时候,心里牢牢记住这个目标是有好处的。学习开车的时候,一个需要记住的原则ท就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远处的某个点。即使你的目标只在几米开外,这样做也๣是正确的。我认为,设计编程语言时,我们也应该这样做。

12拒绝平庸

1995๓年,罗伯特·莫里斯和我一起创办了via9eb。我们打算开软件,让用户可以自己搭建网上商店。当时,我们的创意是把软件放在服务器端,使用普通的网页作为用户界面。

当然,那个时候许多人可能都想到过这个ฐ主意。但是,就我所知,via9๗eb是第一个互联网应用程序。在我们看来,这真的是很新颖๢的想法,所以我们就把公司命名为via9ebຘ,意即我们的软件通过网络使用,而不是运行在你的桌面电脑上

‘在英语中,viaທ是一个介词,意为“经过……”,所以via9๗eb的意思就是经过网络。——译者注’

另一个特别之处是,这个软件主要采用lisp语言开

。它是最早的用lisp语言开的大型应用程序,在此之前,lisp语言主要用于大学和实验室中。

‘一开始的时候,viaທ9๗eb有两个部ຖ分——编辑器和订单处理系统。前者用摸nlisp开,主要供用户搭建自己的网站。后者用c语言开,主要用来处理订单。在via9๗eb的第一版中,lisp是最主ว要的开语言,因为订单处理系统非常小,占用的代码很少。2๐003๑年1月,yahoo布๧了via9๗eb编辑器的新版本,采用c++ใ和perl开。但是,为了把原始程序翻译成c++,他们可能不得不专门写一个ฐlisp解释器,因为据我所知,via9๗ebຘ所有的页面生成模板还没变,都是使用lisp代码。参见greenspun写的tenthrule一书๰第198页。’

秘密武器

埃里克·雷蒙德写过一篇文章《如何成为ฦ一个黑客》ho9tobeeahacນker。文中有一部分专门谈到,在他看来,如果你想当一个黑客,应该学习哪些语言。他建议从python和java入手,因为它们比较容易学。想当高级一点的黑客,还应该学习9๗ix系统,后者用来系统管理和开cgi脚本。最后,真正非常严肃地把黑客作为ฦ人生目标的人,应该考虑学习lisp:

lisp很值得学习。你掌握它以后,会感到เ它给你带来的极大启。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到lisp。

在讨论学习拉丁语有何价值时,你往往也会听到这一类的话。拉丁语无助于你找工ื作也许古典文学教授的工作除外,但是它可以训练你的思维,帮助你更好地运用母语比如英语进行写作。

但是且慢,拉丁语的比喻并不完全适合lisp语言。拉丁语无助于你找工作的原因是因为ฦ没有人说拉丁语。如果你用它写作,没有人能看懂ฦ。但是,lisp是一种计算机语言,无论我们程序员使用哪一种语言与计算机交谈,它都能听懂。

如果埃里克·雷蒙德没有说错,lisp语言确实可以使你成为更好的程序员,那ว么为什么เ你不使用它编程呢?如果画家有一支让他画得更好的画笔,我觉得他应该会用这支笔完成所有的画ฑ作,对不对?我在这里不是想证明埃里克·雷蒙德错了。他的观点整体上非常正确,他对lisp语言的看法确实是大多数人的看法,但是这里面就是有一个ฐ矛盾:lisp语言能让你成为更好的程序员,但你却不用它,这难道不奇怪吗?

为什么不用呢?编程语言毕竟是一种工具。如果lisp语言真的能ม开出更好的程序,你就应该用它。如果它无助于编程,那么就不会有人需要它。

这不仅仅是一个ฐ理论问题๤。软件业是竞争非常激烈的行业,而且容易出现垄断。在不考虑其他情况的条件下,某家公司的软件更快更好用,就会把竞争者赶出这个ฐ市๦场。一旦你开始创业,你就会更深切地感受到这一点。一般情况是,创น业公司要么赢得一切,要么彻底失败。你要么成为富翁,要么一无所获。创业的时候,如果你选择了错误的技术,竞争对手就会一举打败你。

罗伯特·莫里斯和我都很了解lisp语言,我们相信自己的直觉,找不出任何不使用它的理由。我们知道其他人都用c+ใ+或perl开软件,但是我们不觉得这说明了什么问题๤。如果别人用什么技术,你也用什么技术,那么你大概只能使用9indo9s了。选择使用哪一种技术的时候,你不能ม考虑别人的做法,只能考虑什么样的技术能ม最好地完成工作。

图12-1我和罗伯特·莫里斯在viaທ9eb,1996๔年年初ม

创业公司尤其如此。大公司可以互相模仿,但是创น业公司就不行。我觉得很多人没有意识到เ这一点,尤其是一些创业者。

大公司每年平均成长大约10่%。所以,如果你掌管一家大公司,只要每件事都做到大公司的平均水准,你就能ม得到大公司的平均结果,也就是每年成长大约10%ื。

如果你掌管创业公司,当然也可以这样。你把每件事都做到平均水准,就能得到平均结果。问题在于,小公司的平均结果就意味着关门倒闭。创业公司的生存率远低于50%。所以,如果你掌管创น业公司,最好做一些独特的事情,否则就会有麻烦。

回到1995年,我们懂ฦ得一些竞争对手不懂的事情至少在我们看来是如此,这些事情甚至直到เ今天都很少有人懂:如果开只在自己服务器上运行的软件,这意味着你想用什么语言就能ม用什么语言。如果开桌面软件,就完全不一样了,大多数情况下你只能使用操作系统所用的开语言。10年前๩,开桌面软件就意味着要使用c语言。但是,对于互联网软件,你能ม使用任何你想用的语言。如果你还同时拥有操作系统和语言的源码,那么เ你的自由就更大了。

但是,这种新出现的自由是一把双刃剑。既然你可以使用任何语言,你就不得不思考到底使用哪一种语言。如果你的公司对这种选择的自由á视而不见,而竞争对手看到了,那么你就有被击败的危险。

如果选择哪种语言都行,你到底使用哪一种语言?我们选择lisp。先,很明显,对于这个市场来说,快开出产品是很重要的。我们所有人都是从零开始,所以能够快做出新功能的公司就会取得巨大的竞争优势。我们知道lisp语言真的非常合适快开软件,而且我们的软件运行在服务器端,你一写完代码就能布出去,所以这又进一步放大了快开的效果。

如果其他公司不想使用lisp语言,那就更好了。这会让我们拥有技术优势。我们不能放过任何有利ำ的因素。创น办via9eb的时候,我们对于如何经营一家公司毫无经验,对市๦场推广、雇用员工、融资、展新客户等都一无຀所知。在此之前,我和莫里斯甚至连一夭正式上班的经历都没有。我们唯一擅长的事情就是开软件。我们希望这一点可以弥补我们的劣势。任何在软件开上面有助于我们获得优势的事情我们都不能放过。

可以这样说,我们使用lisp只是一个大胆的冒险。我们设想如果用lisp语言开自己的软件,就能比竞争对手更快地写出新功能ม,还能做到เ他们做不到เ的事情。同时,因为ฦlisp是一种抽象层次非常高的语言,所以就不需要非常庞大的开团队,这会降低成本。如果我们的设想是正确的,那么我们就能用更少的钱๥做出一个更好的产品,从而获得利ำ润。最终,我们将独占市场,竞争对手什么也得不到,到头来只能退出这个ฐ行业。我们当时心里就是这么盘算的。

这次冒险的结果如何?多少有点出人意料,它竟然达到了我们的设想。我们前前๩后后遭遇到很多竞争对手,一共大概ฐ有二三十个ฐ,但是他们的软件没有一个能与我们竞争。我们的软件运行在服务器端,用户可以“所见即所得”地搭建网上商店,感觉就像在操作桌面软件。我们的竞争对手使用cນgi脚本。我们在功能上总是遥遥领先于他们。有时,他们出于绝望,试图引入我们没有的功能。但是,有了lisp语言的帮助,我们的开周期很短。有时候,竞争对手刚ธ刚ธ布新闻稿宣布将引入新า功能ม,我们就能在一两天内做出自己的版本。当对手找来的记者抽出时间打电话过来想了解我们的反应,我们就会告诉他我们已经有了这个功能。

竞争对手一定觉得我们好像拥有了某种秘密武器,能够破解他们内部的通信或者其他机密。事实上,我们的确拥有秘密武器,但是没他们想的那么เ复杂。从来没有人向我们泄露他们的内部机密,只是我们的开度比别ี人想象的更快而已。

9岁时,我碰巧读过弗雷德里克·福赛思的《刺杀戴高乐》thedayofthejackal。的主角是一个刺客,有人雇他暗杀法国总统。那个ฐ刺客必须通过警察的岗哨才能到达可以俯视总统行进路线的公寓。他扮成柱着拐杖的老头从警察身边经过,没有引起任何人的怀疑。

我们的秘密武器很类似上面的情景。我们使用一种奇特的人工智能语言开软件,它的语法非常古怪,大量使用括号。多年来,要是听到别人这样描述lisp语言,我会勃然大怒。但是现在,这却成了我们的优势。在竞争中ณ,你的对手无法理解你的技术优势,这可是再宝贵不过了。商场如战场,对手摸不透你,你的胜算就增加了。

虽然有些令人难为情,但是我必须ี承认,就是因为ฦ这个ฐ原因,在via9๗ebຘ创业期间我从来没有公开谈论过lisp语言。我们对新闻媒体闭口不谈lisp,如果你在我们的网站上搜索lisp,只会现我在个人介绍中提到เ过两次,那ว是我写的两本关于lisp的书。这是故意的,创业公司对竞争对手应该越保密越好。如果他们不知道或者不关心我们的软件用什么เ语言开,我就要把这个秘密保持下去

‘莫里斯觉得不用这么保密,因为即使竞争对手知道我们使用lisp语言,对他们也不会有帮助:“如果他们真的聪明,早就已经在用lisp编程了。”’

最了解我们技术的人就是客户。他们不关心via9eb用什么语言开,但是现它真的很好用。via9ebຘ可以让用户在几分钟内搭建起漂亮的网上商店。因此,主要通过口碑效应,我们得到了越来越多的新客户。1้996年年底,我们支持的网上商店大约是70家。1้997年,变成了500家。6个月后,雅虎收购我们的时候,我们有1070个ฐ用户。更名为ฦyaທhoostore之后,这个软件继续主导市场,它是雅虎获利ำ最丰厚的业务之一,用它搭建的商店成为ฦ“雅虎购物”yahooshopping的基础。我在1999๗年离开了雅虎,所以不知道现在的准确用户数量,但是我上一次听到的数字是过了2万。

blubຘ困境

lisp语言到底好在什么地方?如果它真的这么好,为什么没有得到เ广泛使用呢?这种问题听起来有点像绕口令,但是实际上回答起来很简单。lisp语言的好处不在于它有一些狂热爱好者才明白的优点,而只在于它是目前๩最强大的编程语言。它没有得到广泛使用的原因就是因为编程语言不仅仅是技术,也是一种习惯性思维,非常难于改变。当然,上面两句话都需要进一步解释。

我先从一个争议极大的命题开始讲起:编程语言的编程能力有差异。至少不会有人反对高级语言比机器语言更强大这一观点。今天的大多数程序员通常情况下都不会想用机器语言编程,而是使用一种高级语言,然后再让编译器帮你把它翻译成机器语言。这种观念甚至已经移植到了硬件,从2๐0世纪80年代开始,硬件的指令集都是针对编译器而不是针ฤ对程序员设计的。

大家都知道,徒手用机器语言写出整个ฐ程序是一件很蠢的事。但是,把这个观点推广到一种更普遍的情况,知道的人就不多了。如果你有好几种语言可以选择,在不考虑其他因素的情况下,你不选择最强大的那种语言就是一件很蠢的事

‘如果从图灵等价turing-equivatent的角度来看,所有语言都是一样强大的,但是这对程序员没有意义。没人想为ฦ图灵机编程。程序员关心的那种强大也๣许很难正式定义แ,但是有一个办法可以解释,那就是有一些功能在一种语言中是内置的,但是在另一种语言中需要修改解释器才能做到,那么前者就比后者更强大。如果aທ语言有一个运算符,可以移除字符串中的空格,而b语言没有这个运算符,这可能不足以称a语言比bຘ语言强大,因为ฦ你可以在b语言里写一个函数实现这个功能。但是,如果a语言支持某种高级功能ม假定是递归,而b语言不支持,你就不可能通过自己编写函数库解决了,所以这就代表a语言比b语言更强大。’

上面这个观点有许多例外情况。如果在开的程序必须ี与另一个程序紧密配合,那ว么可能最好还是使用后者的开语言。如果你的程序只是要做一些很简单的事比如整数运算或者位操作,那就不妨使用一种比较靠近机器的低层次语言,主要原因是这样运行起来会更快一些。如果你的程序很短,只是为ฦ了特定场合一次性使用,那么你最好根据自己要解决的问题选择具有最强大函数库的语言,不过,总的来看,对于应用程序来说,还是应该选择总体最强大、效率也在可接受范围内的编程语言,否则都是不正确的选择,就好像你选择机器语言编程一样,只是程度上有差ๆ异而已。

大家都公认机器语言属于非常低层次的语言。但是,至少在社会上很多人眼里,高级语言其实也๣差不多。但事实并非如此,高级语言与机器语言的差别ี很大。从技术上看,“高级语言”并不是一个ฐ定义很清晰的名词。在高级语言与机器语言之ใ间并不存在一条明确的分界线。语言的抽象性是一条连续曲线,从最强大的语言一直到最底层的机器语言,每一种语言的能力都有差异

‘语言之ใ间的关系或许还可以比喻成栅格结构laທttice,从下往上朝着顶端慢慢收窄。具体的形状在这里并不重要,重点是语言之间至少存在着一种偏序关系partialorder。’

以cobol语言为例,通过编译器,它可以被编译成机器语言。从这个角度来说它是一种高级语言。但是,有谁会真的把9—样强大的语言?比起python,它可能更接近机器语言。

perl4如何?与perl5相比,它不支持闭包。所以,大多数perl的黑客都认为perl5比perl4更强大。如果你同意这一点,就意味着你也认可一种高级语言可以比另一种高级语言更强大。因此,必然能ม够接着推导出,除了某些特殊情况,你就是应该使用目前๩最强大的语言。

不过在现实中这个结论很少能落实。到了一定年龄之ใ后,程序员极少主ว动更换自己้的编程语言。不管习惯使用的是哪一种语言,他们往往认为这种语言已经足够好了。

程序员非常忠于他们心爱的语言,我不想伤害任何人的感情,所以为了解释我的观点,我假设有一种blub语言。它的抽象程度正好落在编程能力曲线的中点。它不是最强大的语言,但是要比cນobol或机器语言更高级。

我们假设blub程序员既不使用机器语言也๣不使用cobol语言。他认为前๩者是编译器的工ื作,后者他不知道有什么用cobຘol语言甚至连xx功能也没有,blub语言就具备这个功能。

只要这位程序员向曲线下方望去,他就肯定知道自己正在看的是一些比较低层次的语言。因为ฦ那些语言明显不如bຘlub语言强大,缺少他习๤惯使用的某些功能。但是,当他向曲线上方望去,他不会意识到自己้正在看更高层次的语言,而是仅仅觉得自己้正在看某些奇怪的语言。他可能认为ฦ那些语言也๣许与blub一样强大,但是加入了不少怪东西。他觉得blub语言已๐经够用了,不用再考虑那ว些语言了。这时,他的思维就是已经被blub同化了。

但是,当我们转换视角,把自己想象成使用曲线更上方某一种语言的程序员并往下看的时候,我们就会现,自己也๣同样轻视bຘlub语言。你怎么เ用blub语言完成工作呢?它甚至连yy功能ม都没有!

书签 上一章 目录 下一章 书架s
推荐阅读: 武林外传演员表 嫡华小说 英雄坟前无人问 一男四女情头图片动漫 杀手弃妃毒逆天txt下载 动物荷尔蒙万岁!txt下载百度云书包网 乱世之召唤猛将怎么不更新了 短发少女 一寸甜蜜 镜中影 俄乌胜负手