JavaScript:从最受误解的编程语言演变为最流行的语言
The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language


作者:Douglas Crockford 08.3.3
原文:http://javascript.crockford.com/popular.html
edit@2011-4-27 by frank: 1、加入了插图;2、修改了文章的字眼、语句;3、统一了CSS样式。

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

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

It is better to be lucky than smart..