Javascript传奇


这是一个深刻的话题,也许我们学某一样语言时都要顾问一下布道者,但我这里给出一个Javascript大致的发展轨迹,最后给出客观中肯的评价。

 

Javascript出生史

 

Javascript是由网景和Sun合作制定的标准,在1995年间由Brendan Eich设计并几乎独立完成引擎工作的,刚开始决定命名为Livescript,后来由于Java特别火,网景市场部决定沾些光、给力一些,命名为Javascript,这是最初的Javascript。在那个浏览器纷争的年代,Javascript成为越来越多的浏览器脚本语言,但实现起来都有各自的一套,较为混乱,后来一个组织把Javascript标准化了,就是所谓的ECMAscript。当今所有的浏览器应当都是基于ECMAscript标准化的Javascript实现,此时的Javascript和当初粗糙的Javascript不可同日而语,变得更加强大,但其设计的核心思想和基本语法已经比较稳固,在构建程序时显示出强大的生命力和对程序员无限的吸引力(此句话绝不是我特意的吹嘘,后面有足够的事实让读者惊叹!)

 

(下面是他的一张图像)这家伙很厉害,现在是Mozilla的首席技术官,也是公司的决策者和财政管理者之一,实际上网景倒闭后他是Mozilla的重要创始人之一。

 

Brench Eich其人

 

Brendan Eich在演讲和与人交往中发现他更多的是带有一种学者的严肃类型(做研究的当然要这样)。做商业的活动对他来说有点赶鸭子上架的味道,但又不得不说他的确不乏商业才能,他似乎对做研究比对发挥他的商业才能有更强烈的兴趣和执着,这就造就了他既不同于纯粹的研究型学者,又不同于浓厚商业化的人。

Brenda Eich是在26岁之时开发设计出Javascript语言的,对于这个年龄,也许我们还在读研究生,也许我们刚毕业踏入社会不久,但Brenda Eich已经踏出校园参加工作发明了Javascript,它究竟是一门怎样的语言呢?当今所有浏览器的通用脚本;编程语言排行榜中稳居前十名;Web 2.0Ajax的基石

 

究竟怎样?

 

当今所有浏览器的通用脚本。当今的浏览器最给力的几种说法:

速度最快的浏览器:Opear

插件最多的浏览器:Firebox

标准支持最好的浏览器:Chorme

移动设备占有率最高的浏览器:Opear

当今世界占有率最高的浏览器:IE

Javascript支持最好的浏览器:Firebox

程序员最喜欢用的浏览器:Firebox

测试必须用的最多浏览器:IE

兼容性最差的浏览器:IE

….

…..

但是,这些浏览器却无一意外的把Javascript做为自己的脚本语言,也就是说Javascript语言一统客户端脚本天下,单凭这一点就可以彪名青史了!Javascript出道之时,强大的微软为了抗争,推出了VBscript,失败收场。后来又推出所谓Jscript,又是不免一场失败

 

编程语言排行榜中稳居前十名。进入了前十,犹如军人晋升了元帅一般,前十的都是一些什么样的语言呢?(这是某一段时间统计的占有率,前十大名次基本稳定)

JavaCC++Object CPHPC#VBPythonPerlRuby,至于JavaCC++C#Object C这些C一族的语言,他们的强势我就不说了。至于PHPVB一个是因为快速搭建中小型企业网站而出名、一个是由于历史裙带关系,我也不多说了。而Javascript跟他们相比无论是在语言本身的重量级上还是在语言应用的层次广度和重要性上,都是无法比拟的,它能和C比吗?操作系统都是C开发的;它能和C++比吗?不说别的,浏览器就是C++开发的,Javascript本身就是C++写出来的;它能和Java比吗?Java在数据库和后台框架上的优势,Javascript够不着….但是Javascript就是在客户端的脚本应用上找到了自己的一片天地,这对一门语言来说已经足够了!

 

Web 2.0Ajax的基石。看看我们的QQ空间,上上我们的博客,网上购物,….这些体验是不是越来越好,在看Google Map……不得不说在Web体验和应用上,所谓的富因特网,它的基石就是Javascript

 

这就是Javascript,历史坎坷,前景曲折,现在确是一颗大树。

 

我们姑且称Brenda EichJavascript之父(事实当之无愧),他的这一发明足以可以在计算机IT界名垂青史了,但事实是这对于他来说是一个迟到的荣誉。Javascript之父,他能和C之父,C++之父,STL之父,Java之父,C#之父比吗?当然不能,但Javascript有自己的一片天地并且发挥着自己的优势,这对于一个语言来说已经够了,但现在谁又会过问当初的啼笑皆非呢?

 

其中的辛酸与历程?

 

1995年间,Eich刚到网景之际在非常火的Client团队工作,在当时Web发展的格局中,他敏锐的发现客户端应该有一种“胶水”性质的语言,提出改造一种语言为客户端服务,Client团队惊呼,“这是不可能的”,于是被调到了非常冷清的Server团队研究下一代Http协议。

但是一个偶然的机会,改变了他的轨迹。

他在与当时一位Sun的创始人Bill Joy闲聊之际一拍即合,他们都认为客户端需要这样一种“胶水”性质的语言,这种语言对于新手和业余者来说也会很容易上手,而且这种语言的代码可以直接写在HTML的标记之间,以源代码的形式作为网页的一部分发布,是面向网站的设计者和兼职做网站开发的程序员,以替代Java小程序搭建网站的方式。这种思想无疑体现计算机模块化和减少耦合性的特点,充分把Web界面和后台剥离开来,发挥各自的优势,这对于Web发展有革新性作用,越是在后来越是明显。

于是乎,BillEich的公司一商量,“咱们两个联合开发个客户端‘胶水’性质的语言吧,我出钱,你们出力,我看那个Eich不错,不如就让他组织吧”。网景老板一听乐坏了,于是Eich又调到了Client团队,开始实现他早已深思的Javascript雏形。

但事情并不是像以上所叙述的这样平滑,不然话就称不上传奇了。

 

Bill JoyBill Gates

 

一个是IT界的商业拿破仑;一个是硅谷最聪明的人

 

这里要说下刚才提到的Sun公司创始人之一Bill Joy,这个人是Unix的重要分支BSD的研发人之一,又成功的推进了Unix的商业化进程,又是第一个在Unix高效实现TCP/IP协议栈,又是Vi的开发着,又是Java语言开发的参与者,………。可见,Bill无论是在技术方面还是在商业才能方面都是造诣很深的。这家伙肯定是了不得,在和AT&TIBMUnix三方争霸中稳居领先,在Web风靡时Sun的服务器工作站那是响当当的,不过由于公司战略发展的屡次失误,导致在与微软的竞争中了江河日下,后来被甲骨文公司收购,这些都是后话。

既然当时的Bill看到需要这么一种客户端的“胶水”脚本语言,他自己的公司怎么不开发?为什么要自己出钱和网景合作开发?

其实自己不开发是真,而合作也是真,但唯一重要的出钱是假。就当时的情况来看,所谓Java applet在也是意义非凡的,但后来却完完全全失败了。当Java applet推出后,谁也不知道它将来究竟会怎样?但Bill敏锐的感觉到一点,Web动态的同时也复杂化了。实际上是Javascrip兴起后才引起Java applet才走向彻底衰败的,而不是Java applet衰败后引起Javascript兴起的,知道这个前后因果时间差很重要。如此看来,Bill不是犯傻吗?--资助别人开发打败自己的产品。其实不然,虽然Bill察觉到Java applet使Web动态的同时也增加了复杂化,但他绝没料想到Java applet产品会在以后失败,他只是以此为借口来说服忽悠网景公司开发脚本语言罢了,他是醉翁之意不在酒,在乎----

 

网景的Server团队

 

还记的上面提到的网景Server团队吗?对,Bill在乎的就是这个,这个团队在研究下一代的Http协议。Bill为什么这么在乎?在当时的Web市场,Web的应用日益强大,没有更新和数据库的网站几乎是无用的,而传统的所谓CGI脚本编程无论在性能、安全、还是程序的操作和可维护性上是无法满足当时的动态Web发展,此时,Java横空出世,推出JSP动态网页技术,一举暂时领先霸占Web服务器领域。正当JSP凌空出世之际,网景公司竟然组成什么Server团队来开发下一代Http协议,动态网页的核心就是封装Http协议以及如何动态的生成html代码。这种举动不是在战略上挑战Sun吗?精于商业的Bill怎能坐视不管。于是就有了Sun和网景合作开发脚本语言的前缘,目的就是扰乱网景的发展战略。

 

设计开发之路

 

Eich回到Client团队后,就开始了设计。设计当然是艰辛的,要考虑诸多的问题,本质上要采取那种编程模式,但实际上你要考虑到语言的方方面面,比如语法上,复杂程度上等等。当时的编程模式无怪乎这么几种:命令式、声明式、过程式、面向对象、函数式、泛型设计。他当时的选择令大家大吃一惊,放弃流行的面向对象不用(面向对象在软件工程中的理论较为流行广用),却选择古怪难以理解的函数式,大家说,“这哪行呀,一个现代语言没有继承机制是难以想象的”。实际上设计开发的也就主要是Eich自己,大家讨论时不过这么一说而已,但使Eich感觉到确是如此----没有继承机制不行,于是考虑是不是弄个关键字class什么的(事实是class被当作Javascript预存保留字,Eich在后来也多次认为应在Javascript中添加类机制),但他却灵机一动弄了个基于原型的机制实现代码的重用,然后借用了C语言的语法,最终,Javascript就成型了。

设计成型后就这样固定了下来,然后就是一个实现问题。可是,大家都无法实现它,为什么?因为大家不理解,对于Eich这种设计思想不理解,感觉到什么函数和所谓的原型混杂在一起真是太乱了。EichC++和世界上的高手比着的确不怎么样,但实现自己设计的脚本语言还是可以的,他就写一个粗糙的Javascript引擎向大家讲自己的设计思想(事实证明ChormeV8引擎是由于FireboxIEJS引擎)。也就是这个刚从实验室出来,还没经过严格的测试,就开始了自己的实际商业应用了。

 

由衷的敬佩

 

就这样,年仅26岁的Eich成功设计和开发了Javascript语言。确切的讲,Javascript是借鉴了Self的思想和C的语法,而Self完全是而Smalltalk借鉴而来的,而Smalltalk是早期比较成熟的面向对象语言(只是指思想上,和当今面向对象的语言已经形式上大相径庭),而Self是一种基于原型的面向对象语言(它彻底抛弃了类),这在形式上和Javascript的基于原型的特点已经大相径庭(只是思想上的一点借鉴而已)。不过从Javascript的设计过程来看,它借鉴SchemeLisp的似乎是核心性的,有人干脆称Javascript为披着外衣的Lisp,但恰恰它的原型机制又令人比较迷惑不解,它到底本质上是函数还是基于原型?

从当初的设计过程来看,它应该是基于函数的;

Javascript语言本身来看,函数和原型已经糅合了,分不清谁主谁次,谁因谁果了(从语法上看对象是一切的本质,但从引擎实现下看Javascript的一切都是有函数实现的)

Javascript的形式灵活性和应用层面上讲,函数的活性绝对比原型高;

从底层功能的通用性和设计底层核心数据结构上看,原型是唯一的途径;

从构建程序的健壮性和可重用性上讲,原型对于程序绝对必不可少;

就是这样一种设计思想的语言,如今却备受瞩目和关注,偏偏习惯了过程式和基于类式继承的程序员却迷恋于Javascript函数式和基于原型式继承的独特方式,而有的人干脆把Javascript做为入门语言学习的(我不尽赞同)。如果把2005(大规模Ajax应用的起始点)做为一个分割点,10年之前的Javascript是那样苍白、让人误解、滥用,而10年后的Javascript却又是那样的健壮、让人陶醉、迷离。这样一种传奇语言,让人由衷的敬佩!!!

 

 

最欣慰的是?

 

EichJavascript设计开发之路完成了,但他自己对此却很沮丧,认为Javascript将来会是一个失败的产品,被Eich解读为世界上误解最多的语言。看看那些所谓的弹窗,专业程序员的蔑视,非专业人员的随意书写。总之,被大家当做一种玩偶语言。但随着Web2.0Ajax的兴起,越来越多优秀年轻的程序员开始构建强大、健壮、可重用继承的框架程序,把Javascript函数式编程和基于原型继承的思想发挥的淋漓尽致,产生了诸如prototypeYUIjQueryExtjs等一大批优秀的Ajax框架,这些框架展现出Javascript强大的生命力和那种函数编程与基于原型继承设计思想的优美性、健壮性,无外乎当大家问到EichJavascript感到最欣慰的是什么?他的回答就是函数编程与基于原型继承的设计思想得到了应用并展现出强大的生命力!

 此文章来源网络~~~

你可能感兴趣的:(JavaScript)