人物:Brendan Eich
对我来说,从小时候起就是一个书呆子,当然这是一场诅咒与玩笑。
Brendan Eich在Netscape上说服了他的尖头老板,我们应该有个自己的脚本语言,并且是一种新的语言。
我不知道Doug为什么要编故事,他并没在Netscape呆过,在Ajax会议的主题演讲中,他已经听到了我关于JavaScript诞生的回忆,他是为了在Web开发者中推广C#么?
谁知道呢,不过本周是我参与创建mozilla的第十个年头,我想聊一点历史。
我是以在浏览器中搞Scheme的名头被招募到Netscape的,至少客户工程管理包括Tom Paquin,Michael Toy和Rick Schell以及叫做Marc Andreessen的那些家伙,认为Netscape应该以HTML格式在源代码中嵌入编程语言,所以并非是我说服的“尖头老板”。
javascript是否是Scheme,那就仁者见仁,智者见智了,不过我加入Netscape却是因为Scheme的。(Brendan Eich的主要方向和兴趣是函数式编程)
当时需要一个有说服力的例子(也就是一个demo),我完成了它,而它随即变成了事实。
1995年Sun公司将Oak语言改名为Java,Netscape决定与Sun公司结成联盟,希望将其包含在浏览器中。
因此,Netscape的大辩论成为“为什么要用两种语言?为什么不只是Java?“答案是需要两种语言来服务于编程,在编程领域有两类不相干的受众用户,他们最需要专门的编程语言,一类是组件作者,他们用C ++或Java,另外一类是那些编写“scripters”的作者,他们可能是业余或专业的,那么谁将来编写直接嵌入HTML的代码呢。
是否可以使用现有的语言,而不是去发明新的语言,这不是我决定的,因为整个管理层希望这种语言必须看起来像Java,但要比Java简单,这个决策导致排除了Perl,Python和Tcl以及Scheme。
我不骄傲,但我很欣慰将Scheme中的function作为第一等公民以及借鉴Self将原型作为继承机制,但受到Java的影响,数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了Y2K问题,这真是不幸啊。
回到1995年春天,记得在那段时间里我遇到了比尔·乔伊,并与他讨论了垃圾收集,从一开始Bill就将这个脚本语言作为Java的小兄弟来看,类似于VB在Microsoft平台中与C ++的关系。
Kipp Hickman和我在1995年4、5月期间一直在研究Java,Kipp已经开始编写自己的JVM,Kipp和我写了第一版NSPR,作为他的可移植性JVM底层,在5月初至5月中旬我开始制作“摩卡车”并将其用于相同的目的。
Bill相信我们删除Kipp的JVM,因为它将减少Sun在JVM中的兼容性Bug。在这一点上,“摩卡”已经通过快速原型设计和嵌入到Netscape Navigator 2.0中,NetView Navigator 2.0处于其前alpha开发阶段。
其余的是反常的,无情的历史, JS在客户端上打败了Java,只有Flash才能支持JS,ActionScript的后代。
回到JavaScrip,我们知道某些Ajax图书馆很受欢迎, JavaScript受欢迎吗很难说,一些Ajax开发人员自称喜欢它,还有许多人诅咒它,包括我。我觉得它就像是C语言和Self语言的一夜产物,不免想到约翰逊博士的一句话:“它的优秀之处并非原创,它的原创之处并不优秀。”
经历
布兰登·艾奇1964年生于美国加州的森尼维尔市,毕业于伊利诺伊大学香槟分校。1995年任职于 网景期间,为 网景浏览器开发出 JavaScript,之后成为 浏览器上应用最广泛的 脚本语言之一。1998年布兰登协助成立 mozilla,2003年在美国线上决定结束网景浏览器的开发后,布兰登协助成立了 Mozilla基金会。
开发JavaScript
1994年, 网景公司( Netscape)发布了Navigator浏览器0.9版,这是世界上第一款比较成熟的 网络浏览器, 轰动一时。
但是这是一款名副其实的浏览器--只能浏览页面,浏览器无法与用户互动。比如你登录一个网站输入完用户名点击提交的时候。浏览器并不知道你是否输入了,也无法判断。只能传给服务器去判断。
网景急于解决浏览器与用户交互这个问题。当时解决这个问题有两个办法,一个是采用现有的语言,比如 Perl、 Python、 Tcl、Scheme等等,允许它们直接嵌入网页。另一个是发明一种全新的语言。
这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。
就在这时发生了一件大事,1995年Sun公司将Oak语言改名为 Java,正式向市场推出。Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。
网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以 applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将 Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。
总之,当时的形势就是,网景公司的整个管理层,都是 Java语言的信徒,Sun公司完全介入网页脚本语言的 决策。 因此,Javascript后来就是 网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。
此时,34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他。
Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将 Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道
仅仅一个月之后,1995年5月, 网景公司做出决策,未来的网页脚本语言必须"看上去与 Java足够相似",但 是比Java简单,使得非专业的 网页作者也能很快上手。 这个决策实际上将Perl、 Python、 Tcl、 Scheme等非 面向对象编程的语言都排除在外了。
Brendan Eich被指定为这种简化版Java语言的设计师。
但是,他对 Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。
由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?
总的来说,他的设计思路是这样的:
(1)借鉴C语言的基本语法;
(2)借鉴 Java语言的数据类型和 内存管理;
(3)借鉴 Scheme语言,将函数提升到第一等公民的地位;
(4)借鉴 Self语言,使用基于原型( prototype)的继承机制。
所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。 这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。
如果不是公司的决策,Brendan Eich绝不可能把 Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:
"与其说我爱Javascript,不如说我恨它。它是C语言和Self语言YYQ的产物。十八世纪英国文学家约翰逊博士说得好: '它的优秀之 处并非原创,它的原创之处并不优秀。
出任CEO与辞职