JavaScript在如今的Web领域正发挥着无与伦比的重要作用。但它又是一门饱受误解与非议的语言。这其中很大程度的误解来源于它奇怪的历史,和它的命名 —— 国内常有人戏称,Java和JavaScript的区别,就像雷锋和雷峰塔的区别。而Douglas Crockford,做为JavaScript语言的泰斗,同时也是QCon北京2013大会确认参会的国际嘉宾,在去年年底,接受了《German-language PHP Magazin》编辑Wießeckel的采访,发表了他对 JavaScript、jQuery 、CoffeeScript、Dart语言、Web的历史,以及移动互联网等内容的真知灼见。
编者后注:2月13日,Opera宣布将使用WebKit作为自己浏览器的新内核,在网络上掀起不小的波澜,而Douglas在这篇去年的访谈里就已经很有预见性的谈到了WebKit的胜利,同时还肯定了jQuery等框架的工作,实在令人折服。
关于Opera切换到WebKit引擎的决定,InfoQ做了系列报道,请见:
下面是Douglas的采访内容:
作为《JavaScript语言精粹》(《JavaScript:The Good Parts》)的作者,在谈及它的“bad parts”,甚至是“worst parts”时,Douglas表示:
最坏的部分是JavaScript的依赖关系和全局变量。我们在浏览器中看到的各种安全问题全是这两个部分引起的。
对于CoffeeScript,Douglas这么看:
CoffeeScript是一种可被编译成JavaScript的新语言,它把JavaScript当作一种可执行语言。CoffeeScript的语法简洁优雅,非常可爱。我希望JavaScript可以像CoffeeScript一样。不过我并不推荐CoffeeScript,因为它仍然处于实验阶段,而我不想在生产环境中冒险。但是对于自己感兴趣的小项目,用CoffeeScript是挺不错的选择。但是需要注意,CoffeeScript的唯一优势只是语法,它的语意和JavaScript完全一样,没有什么你能用CoffeeScript能行而JavaScript不行的事。只是在很多时候CoffeeScript写法会更加方便。
谈到jQuery的时候,Douglas表示了非常肯定的态度:
jQuery非常棒。它运行在DOM的顶层,直接调用浏览器为JavaScript提供的API。DOM本身非常糟糕,是我见过的最烂的API。而JavaScript是一门强大的语言 —— 只需要一个相对小体积的JS库就可以将DOM变得非常有用,jQuery实现了这一点。Yahoo!的YUI从这方面看来并没有做的更好。我会建议所有人使用一种JS库来操纵DOM,而不要使用原生API,因为那的确非常痛苦。库的使用不但会让事情变得愉悦,也会提高工作效率。
对不同的JavaScript引擎,比如V8、JaegerMonkey,Douglas表示:
其实这都没什么关系。JavaScript是一项有超强移植性的语言,在不同的JavaScript引擎表现的并没有太多差别,这些引擎其实都挺不错。Microsoft的引擎(Trident)表现的也挺好。这是JavaScript的优点之一。值得一提的是,Microsoft还花了不少功夫让Web工程师可以在Windows8的桌面端创建WebApp,这看上去也还不错。
对Google发布的用于取代JavaScript的Dart语言,Douglas肯定了尝试新语言的行为,但是对这门语言本身,他持保留的看法:
JavaScript的确有很多问题,但JavaScript不会是最后一门编程语言。我鼓励大家在新编程语言上的实验。因为对于程序员来说,编程语言是最重要的创作工具。但其实我们很明显还没有把JavaScript了解透彻,而JavaScript自己也并没有表现的足够好。所以我们需要继续新编程语言的实验。我也很高兴看到这些新语言的尝试。但对于Google Dart来说,问题在于他们甚至还未完成语言的设计工作,就已经宣称胜利了。Dart对我没有意义。Google应当为尝试新语言的行为获得表扬,但是取代JavaScript看上去更像是一个阴谋,但看起来又不太可能。
对JavaScript过去多年的恶劣名声,以及最近一些年的迅速崛起,Douglas回顾了整件事情的历史:
这都是因为Ajax。在2001年的时候,Gartner预测Web将像WAIS和Gopher那样死去,Web将会被Ex-Internet取代,包括Microsoft在内的许多人相信这种说法。所以Microsoft扩张了IE团队,并开始着手研究下一代英特网。
在2005年,Jesse James Garrett发表的关于Ajax的论文所有人大吃一惊。Microsoft突然间又被Web打了个措手不及。可能因为浏览器在安全问题上表现的还不错,用户在面对Web应用的时候不至于总面对恐怖的,不知所以然的权限提示对话框,加之Ajax的能力,Web开始发挥起它的威力。它比其他任何平台都更容易的将应用传递到客户端。由此,Web开始腾飞。
Web火热发展的另一个原因,是除Web以外的其他尝试都失败了。过去曾有很多试图取代Web的尝试。Adobe尝试了很多次,Microsoft也是。Google如今仍在努力。但迄今为止他们都失败了。Java曾被认为最可能去统治Web,但Java失败了。之后Java又去尝试接管消费电子设备和其他场景,但是也都不怎么成功。在移动电话终端上,他们几乎试遍了所有的方法。他们试过专利,试过开源,但他们都没能成功。
现在人们正努力将JavaScript运行在移动平台,看起来好像挺不错。这并不是任何人希望或预言的,但事情就这么发生了。JavaScript正在胜利,因为它凑效了。同时,JavsScript的流行让其它只能勉强运行的方式显得又傻又非主流。
对于移动互联网的应用入口之争,和将Web构建为OS平台的FirefoxOS,以及WebKit的话题,Douglas认为:
Web看起来正在占领移动互联网,但是一切并未尘埃落定。这是一场比赛:各种App Store正在试图取代Web,他们在用垄断的方式控制所有应用的入口。但Web的哲学之一是“人人平等”。垄断的方式会胜利吗?我认为最终开放一定会赢得胜利,因为大家可以从每个人都自由交付应用的系统中获得更多好处。但是总有一股力量在试图封闭它,比如DRM,所以让我们关注事情将会如何发展,并一起希望Web的开放性会保持下去。
FirefoxOS并不会成为一个大事件,因为看上去移动平台上Web的胜者会是WebKit。Mozilla曾做过不错的东西,而WebKit做的更好。但我希望市场可以保持一种竞争环境,而不要有一个绝对的胜利者出现。所以我希望Mozilla可以更强大。
Web的困境之一在于它从不属于任何一家单独的公司:它不源自Adobe,也不源自Microsoft,也不是Sun或者Oracle。开发者必须处理Web平台上各种不同的因素,而这些不同的因素不但没有消减,还越来越多。同时,W3C标准也还非常不充分。这让开发者们的日子很不好过。但我并不想为此走另一条路,说“好吧,有个统一平台就好了”这样的话。因为相比之下,平台的多样化是整个生态系统健康的表现,如果失去这样的多样性,那必然会是一件坏事。