JavaScript之父-Brendan Eich

Brendan Eich在1995年在Netscape发明了JavaScript语言,
这个语言在过去的一些年里曾是一个最被误解的语言,随着AJAX和Web 2.0的发展,人们逐渐正视JavaScript。
这是一篇Computerworld对Brendan Eich的一次采访,对JavaScript的过去、现在和未来都做了阐述。
我在1995年4月4日加入了Netscape,当时的目标是把Scheme语言或者类似的语言嵌入到Netscape的浏览器当中。
由于申请没 有通过,我加入了Netscape的Server团队,这个团队负责Web服务器和代理服务器方面产品的开发,
我在这里工作了一个月,主要进行下一代 HTTP的研发。
到了五月份的时候,我就被调回当初想加入Client团队,从此我就开始了对JavaScript雏形的开发。
Marc Andreessen和我,连同在Sun工作的Bill Joy,
坚信HTML需要一种脚本化的语言,这种语言就算对于新手和业余者来说也会很容易上手,
而且这种语言的代码可以直接写在HTML的标记之间,以源 代码的形式作为网页的一部分发布。
这种信念同时成为了我们的动力。我们打算开发一个”胶水语言“,
面向网站的设计者和兼职做网站开发的程序员,以替代以前 那种通过图片、插件和Java小程序搭建网站的方式。
我们把Java看成是由高薪程序员使用的组件语言,而胶水程序员,也就是那些网页设计师,将通过 JavaScript把组件组合起来实现交互。
JavaScript应该和Visual Basic是类似的,而Java和C++类似。
从这个意义上说,纵观在微软的操作系统和应用程序中使用的编程语言家族中,
贯穿在编程语言金字塔的分工差别促进了更多的创新,使我们除了可以选择像Java和C++那样”真正“的编程语言以外,
还可以选择一些”小巧“的脚本式语言,比如JavaScript。
遇到过什么特别的需要解决的问题么?

不可编程的网页是静态的,堆砌着文字,充其量把图片放到表格里或者干脆浮动在网页的两侧。
通过JavaScript这样的脚本语言,我们可以控制网页上的元素,更改他们的属性并响应事件。
可以设想这样一个更具有活力的网络,只通过一些网页就可以实现以前应用程序才能实现的效果。

实际上,一些早期的开发者从1995年下半年就开始通过JavaScript和framesets中的框架来构建Web应用程序,
这应该是最早的 ”Ajax“或者”Web 2.0“风格的Web应用程序,但是采用这种方式开发会导致机器速度变慢。
JavaScript在最初的时候就有一个操作浏览器的函数库,但这个库的功能 很有限。
和服务器之间的通讯方法也仅限于重新加载整个网页。

JavaScript和Java在本质上是不相干的,但为什么要给他取这个名字呢?
通过上面的链接,在我的博客中可以找到答案。

JavaScript最初的名字Mocha和LiveScript是根据什么起的?
Mocha是Marc Andreessen起的项目名称,但Netscape的市场部发现这个名字存在潜在的商标冲突,
所以对外决定启用新的名称,他们为Netscape的产品名称启用了Live这个前缀,比如LiveWire、LiveScript等。
但在1995-1996这个时间,Java的发展势头太猛了,所以大家决定沾沾光,把名字修改为JavaScript。

JavaScript和ECMAScript有什么不同?
ECMA-262第三版是ECMAScript标准的最新版本。
第一版的制定建立在我在Netscape时的工作成果,
同时吸收了JScript(微软在IE平台上对JavaScript进行反向工程的成果)的内容,还包括Borland和少数其他公司的成果。

ECMA-262第三版明确允许对之进行各种扩展,JavaScript所能作的就比标准多得多,这门语言的演化已经赶在了当前执行标准的前面。
比如Mozilla的SpiderMonkey(SpiderMonkey也是Firefox中的JavaScript引擎)和Rhino引擎。
Ecma标准只是描述了核心的语言,不包括DOM,大家还是会把DOM当成JavaScript的一部分看待。

你认为JavaScript和JScript是两个可以或者应该互相被替换的术语么?
在跨浏览器的文档和书籍中,当提到这门语言,没有人会使用JScript。
JavaScript才是这些书籍、文档、参考手册等中使用的名字,无论你认为这个名字好还是坏,JavaScript就是这个语言的真实名字。

在JavaScript的开发过程中,遇到过什么必须面对而且特别困难或者讨厌的问题么?
在语言的设计阶段冻结以后,每一个小的开发周期主要就是在检验设计时的想法。
我在1995年的5月,用了大概10天的时间开发解释器,包括除了 Date对象以外的其它内置对象。
在这期间,Netscape的Ken Smith用C语言重写了Java的java.util.Date类,这个类的千年虫Bug也在无意间被带进了JavaScript。

1995年剩下的日子,我的工作就是把这个引擎嵌入到Netscape浏览器中,
并建立那个后来十分著名的DOM(文档对象模型),准确的说应该是第0级DOM,
这时候已经可以在JavaScript中通过一系列函数接口控制窗口、文档、链接、图片等对象了,并可以响应事件和通过定时器运行代码。

在1996年中期以前,在Netscape只有我一个人在做JavaScript的开发。

你认为JavayScript在Web 2.0中扮演什么样的角色?
JavaScript对于“Ajax”或者“Web 2.0”这场革命来说,是必不可少的组成部分。
我还要说,Firefox、Safari和其他新浏览器之间的竞争,以及由于这些竞争所催生的新标准,同样很重要。
真正的程序都可以运行在浏览器中,而且这些程序都是用JavaScript写的。
这就使JavaScript不得不变得十分强大,作为可以运行在现存所有浏览器中的前提。
这些浏览器甚至包括微软在新千年的头五年勉强维护的IE 5.5和IE 6.0。因此可以用支柱(tap root)来形容JavaScript。
因此,使用 JavaScript和DOM进行开发,曾经是一个很困难的经历。
另一方面,很多开发者都声称自己喜欢做JavaScript的开发,
而且自从2004年以后,伴随着“Ajax”和“Web 2.0”的出现,JavaScript正迎来自己的新生。

你怎样看待JavaScript对未来的影响?你认为在网络上是否会出现新的客户端脚本语言?
我认为JavaScript暂时还是默认的,也是唯一需要的浏览器编程语言。
但是其它语言也会在浏览器中被支持,开始的时候可能只在某个浏览器中被支持,最终会演变为跨浏览器的标准形式。
Mozilla的浏览器,包括 Firefox,现在已经有选择的整合了C-Python,但是有很多工作还是要由你自己来做,
你还要确保你的用户已经安装了C-Python运行库。我们现在正致力于通过安全地、
可兼容地以及可以自动更新的运行库来支持更多流行的语言。

现在已经很清楚,Web的客户端是很值得进行编程的,这与1995年Marc Andreessen和我预料的一样。
现在世界上的台式电脑和笔记本有足够强大的运算能力和存储空间,和以往任何时间相比,
都可以做更多有用的任务,不限制他们的自动化能力,把表单或者消息提交给Web服务器上真正的程序。
真正的程序同样可以运行在浏览器中,而且他们是用JavaScript写的。
JavaScript的影响在不断增长,它不仅已经成为浏览器中脚本的标准,还会成为台式机和其他设备(比如iPhone)中脚本的标准。

你怎样看待最近发布的JavaScript框架,比如SproutCode和Objective-J/Cappuccino?
你认为他们会给未来的Web应用程序带来什么影响?
Apple的炒作机器无疑使一些人把这个产品当成了Ajax的第二代。
对我来说,他们只是进化在不同阶段的JavaScript库和框架而已。
包 括 Google GWT和一些比较流行的库,比如Dojo、JQuery、YUI以及Prototype。
我不大想看到某个框架或者库过于强大,至少不希望会持续很多年,最好他们只是在Web的某个领域很流行。
在某些特定的设备上开发,你当然没有什么选择的余地,但在Web上就不一样,因为它涵盖的范围非常广,
这是无论多么流行的设备都无法比拟的。

你认为我们有可能会看到桌面应用程序最终走向灭亡么?
我认为不会,但你会看到更多使用Web技术构建的桌面应用程序,他们甚至是安装在本地的,而不是储存在某个Web服务器主机中。
当然Web应用程序也会持续不断的发展。
伴随着JavaScript的成长和其他基于浏览器的Web标准的诞生,我们将能看到Web应用程序可以做更多的互动行的工作,
而这些工作以前都是必须使用桌面应用程序来完成的。我们已经在前沿的浏览器中看到离线应用、二维和三维渲染等已经变为事实。

你怎样看待像Flash这样不断流行的插件对JavaScript的流行度带来的影响?
Flash在尽力做到完善的支持Ajax,可以编写脚本,可以在外部访问,和其他插件、
像图片和表格这样的内置对象、纯粹的JavaScript 对象一样,以组件的方式嵌入到网页中。
开放的网络对待每项技术都是一视同仁的,这也确实妨碍了单一厂商的一枝独秀。
你可以通过Flash怎样在Web 2.0的世界中畅游,和微软的Silverlight也瞄准了现代Web世界这个大蛋糕看出一些端倪。
人们不想回到一家厂商的插件充斥着整个网页的时代,所有的网站也会这么想。
首先,展示在最前沿浏览器中的Web标准正在不断进化,并努力与Flash和Silverlight在视频、动画、高性能JavaScript等方面分庭抗争。
其次,没有网站愿意为了“bling”而牺牲“reach”。
和插件始终存在不足相比,浏览器天生就会支持各种Web标准,比如JavaScript。
用户不会经常更新他们的插件,用户也会拒绝使用某个插件,但会信任并继续使用浏览器。

你认为JavaScript将来会在哪些地方延伸?
首先自然会在浏览器中,但以后可能会更广,比如在服务器端,或者成为一个端到端的编程语言

JavaScript的不断发展和流行给你带来过什么惊喜么?
JavaScript的流行给了我不小的惊喜。我在很长一段时间里,心里已经默认JavaScript是不会流行的了。
原因当然包括那些讨厌的弹出窗口,但更多是由于这种自由组合的函数和基于原型的对象编程的传统。
但后来结果发现,很多程序员本来就是从JavaScript开始学习编程的,还有一些擅长面向对象编程的程序员,很喜欢这种非传统的组合。

JavaScript从最初的开发到现在,什么是让你最骄傲的?
应该是把优秀的函数和对象原型结合到了一起。
对于一个已经标准化的产品,我不会说他有多么完美,因为标准化的过程中扩充了不少的内容,其中包含一些错误。
但抛出一些小失误和人为原因,核心的思想完全经住了时间的考验。

你认为编程语言会朝什么方向发展?尤其是在接下来的5-20年间?
未来的编程语言必须在我们都要面对的两个方面做得更好:
* 多核/大规模并行计算机现在已经出现在大家的身边,现在只是出现在台式机上,不久移动设备也会具有相应的能力。
计算机科学家们在最近的十五年里,正在努力使并行计算可以做更多有用的事情,也更加容易使用。
JavaScript在多核的世界里面有自己的角色需要扮演,从相对简单的扩展开始,
Google Gear的工作池,“零共享(shared nothing)”的后台线程,通过浏览器中的JavaScript互相发送和接收消息进行通讯。
* 安全。一个编程语言无法用自身建立起来的安全体系保证安全,因为安全是一套系统属性,涵盖所有层次的抽象,包括上游和下游的语言。
但一个编程语言当然可以向用户提供各种更好或者更差的工具来构建安全系统,并证明这些安全属性可以在这个编程语言中得到保证。