JavaScript:从最受误解的编程语言演变为最流行的语言

作者:Douglas Crockford 08.3.3
原文:http://javascript.crockford.com/popular.html

 

《计算机语言:历史与基石》一书由Jean Sammet写于1969年。此书的内容是对120种编程语言的考查,其中一些语言有详尽的简介。Sammet这本语言编年史写在随后的结构化编程革命(Structured Programming Revolution)、面向对象编程之前。书籍以一张巴别塔(Tower of Babel,又译通天塔。见译注)的图片作封面。塔身由砖块围成,围在里面的是各种名称的编程语言。

译注:巴别塔,《圣经》中的通天塔,大洪水之后诺亚的子孙繁衍,并试图建造通天塔直通天界,上帝不爽,于是给他们创造了不同的语言,语言隔阂、交流障碍,通天塔轰然倒塌。

这是大家熟知的《圣经Genesis》[11:1-9]的故事:

耶和华降临,要看看世人所建造的城和塔。耶和华说,看哪,他们成为一样的人民,都是一样的言语,如今既作起这事来,以后他们所要作的事就没有不成就的了。 我们下去,在那里变乱他们的口音,使他们的言语彼此不通。于是,耶和华使他们从那里分散在全地上。他们就停工,不造那城了。因为耶和华在那里变乱天下人的 言语,使众人分散在全地上,所以那城名叫巴别(巴别就是变乱的意思)。

这段意思有时理解为做人不能太傲慢;有时理解为一个寓言故事,告诉你为什么人们在说不同的语言:耶和华为防止人们达到自己的潜能而制造了i18N 问题。不过我想把这个道理放到编程语言上去理解也是如此。编程根本问题在于对复杂问题的掌控能力。如果语言在需求变化时未能帮助我们处理复杂的系统,而最 终令人感到混乱,自然离失败不远。

为何有如此之多的编程语言?不计Sammet当时的数量,过去四十年已经有大量的新语言或方言问世。虽说我们已经在好长的时间内是在一个高级(High Level)的环境下编程了,但真正能跨域边界,达致完备的地方还不是很多。那么我们应不应该就遵循某种恰当的方式来做,更幛显计算机的优势呢?毫无疑 问,能够以同一种绝佳的语言进行设计所带来的效率是很明显的。因为我们可以更有效地集中资源来配合来培训或工具的研发。为什么我们还不这样子做?

我们已经努力过。现在已经有几种语言尝试构建起大规模的、通用的语言,结果却是失败了。随着语言设计的不断更新,加入更多的功能,从而使语言本身变得越来越复杂。

因此我们看到取而代之的是许多的专用语言。在完成一些任务的领域中,专用语言可以非常高效地解决,而且本身是不错的。对于要完成此类任务的人而言,选择好的语言,自然是如虎添翼。

一门编程语言从某些表达式的语法的运算得到模型的修正。大多数语言有一组常用的值如数字和文本(numbers、texts 在大多数语言中,奇怪地称作字符串),和若干的操作,如改变和合成值,或一些变量和循环的操作,还有就是把一些常用的操作打包到命令中。

变化是行如幻影,变化莫测,就像一道菜和一首乐曲每一次都不尽相同。语言设计的艺术在于清楚哪些是舍的(leave out)。一门良好语言,它里面的功能应该是和谐地工作在一起,帮助我们更好地明白问题和找出解决方案的最佳表达方式(the best expression of its solutio)。

一门好的语言有几组功能所构成,但是哪一项的功能才是最好的就永远没有结论。程序员可以不断地讨论这个话题和是否比其他的语言优秀。这里不是说功能不重要。功能它非常重要。只不过我们还没清楚它真的这么重要。

 时髦与技术之间语言设计需要做更多的是在时髦方面。时髦是nerdliest艺术中一种主要的因素,可能看起来很奇怪,但的确是一点不假。无论语言的设 计有多么精巧,若以一个另类的语法出现的话,是没有希望得到广泛使用的。这样会约束了语言的进化。

像音乐和食物一样,编程语言也属于时间的产物。语言设计的深层问题不是技术上的,是心理上的问题。一门编程语言应该与我们认知的结构相吻合,以便更高效率地帮助我们判断问题。

编程语言像猫这种动物,换一只猫总比把一只旧的猫驯化容易些。按照常理,大多数语言成功后由后来的升级版所取缔。重新规划的语言几乎很少到达旧版那种成就。Fortan曾经是语言翘楚,好些年在不断改进,但Fortran IV的声誉非现代化后的Fortran方言所能及。类似地,Pascal是结构化编程的流行语言,但其OO的版本难盖原Pascal之光芒。结果,它渐渐被取代。

专用语言做起来挺有意思的,这也解释了它们的数量为什么是如此地多。如果一门语言结构不太庞大,那么一个程序员就可以掌控它了。大多数语言可以由一个设计师自己创造出来。Pascal:Wirth。C: Ritchie。C++: Stroustrup。Java: Gosling. C#:Hejlsberg。Rebol: Sassenrath。Python:van Rossum.PHP: Lerdorf. Perl:Wall. Ruby: Matsumoto。Lua: Ierusalimschy. E:Miller。JavaScript:Eich。

大多数语言失败之处在于不够清晰。而剩下不多的语言能够一直在单个项目或公司中使用下去。也只有极少数量的语言成为重要的语言。

有两种途径会使某种语言变得更重要。第一是它能让思想光辉发射光芒。Smalltalk和Scheme都具备这种特质,虽然这些语言并不广泛使用,现在看也是过时的,但它们公认为是杰出的语言,并对后来的语言设计带来深远的影响。

第二是他本身的流行程度怎么样,体现了语言的重要性。

程序员在选择一门编程语言的时候,很多东西必须再三考虑,不过到了编写web浏览器的时候当前唯一的选择便是JavaScript。

JavaScript可算是一种乖张、亦正亦邪的语言,其貌不扬。它这种乖张的特性给它带来极其糟糕的声誉。DOM文档对象模型也与JavaScript 同休公戚,是一个让人不太讨好的API。在理清了JavaScript的概念之后关于DOM各种乱七八糟的东西又随着来(译注:跨浏览器的障碍)。有许多 人嚷着要改进JavaScript,但就目前web开发的状况而言可改善的余地很少。JavaScript语言的功能不够清晰,包括别扭的交互操作或失败 的设计。正如Emperor Joseph所说的,这语言搞太多花样了。

嗯,那这个JavaScript的缺失之处这么多,怎么还能做Web的龙头编程语言?Brendan Eich就有这个本事,能够说服当时Netscape的秃头老板,要做Navigator自己的脚本语言,还要不是新的语言不去做,——就这样,匆匆忙忙 地设计出一门新的语言并实现出来,还真的没有别的语言能代替这种需求。为了能蚕食Netscape的市场份额,微软的IE团队通过逆向工程小心翼翼地得到 Netscape的语言,明显有许多不足但也不管三七二十一了。其他浏览器厂商亦效仿微软的做法,因此不存在web浏览必须实现的是标准的 JavaScript之说法。除了JavaScript外,没有其他语言的实现可以在浏览器内全部行得通。互联网发展一切充满着未知,因此不存在对语言仔 细地调研,并从没有什么前期性的调研或周密的设计。它只是出自Netscape之手,然后不断被复制而已。若我们刻意、费煞苦心地创造一个类似 JavaScript的东东而且为它过早地去建立一个标准,那么说不定这不是我们想要的。

尽管JavaScript充满着缺点,但深入其内核是有许多地方错有错着的。当你一步一步慢慢到内部了解,会发现这个一个精练和强大的编程语言。许多 Ajax库现在用JavaScript来处理DOM,以网页的形式来生成应用程序的交互平台。Ajax变得更为流行正因JavaScirpt还算可以的, 而且还超乎我们的想象。世界上最为流行的JavaScript曾经是世界上最受误解的语言。以其明显的缺陷、不时髦的编程模型、令全世界都误导的简介与它 那个不相称的名字,曾经让大多数聪明的程序员觉得毫无价值而遭到抵制。但是Ajax给了JavaSciprt第二次的机会。

正因为JavaScript是浏览器的语言,正因为web浏览器渐渐成为传送消息程序中的重要部分,正因为JavaScript并不是太糟 糕,JavaSciprt已经成为世界上最流行的编程语言。由于流通性在加大,同时也被应用在一些嵌入式程序中,——JavaScript已经越来越重要 了。

It is better to be lucky than smart..

你可能感兴趣的:(JavaScript,编程,Ajax,浏览器,pascal)