昨日冬游,车上闲聊公司未来的产品方向、HTML5潮流、如此等等。Leader突然说“你js怎么那么NB”。耳风刚过,不知是受夸若惊,还是自觉水平太low。似乎有点惊喜也有点压力。要知道,哥一直以服务端码农的身份混迹江湖,心想“要靠js混饭,还得努力啊”。
然而,Leader无意一句话,倒让我不禁思索一番。Leader出身于NB的后端码农,像绝大部分后端工程师一样。或许对前端不太感冒,或是js坑爹的伪OO、拐弯抹角的运行机制困惑了他们。在哥看来掌握js绝非难事,我曾经也是个对js一窍不通的java农,当年对面js,我也不知道:这玩儿怎么去实现OO?this到处是,代表的是什么?到底什么原型链?如此等等,用java、c#那套高级完整的OO词法去琢磨js实在难以理解接受。为此,我希望以java农的身份,有的放矢,写几篇blogs,或许文笔笨拙,但仍期望对后端同学有所帮助。
上面扯那么多,无非是找点写感,料想当年毕业论文一过,洋洋洒洒一百字以上的文章都没写过,现在更甚,哄妹子都不会,以至于单身至今。废话了,下面重点来了!
想必,同学你已经看了标题《JavaScript的前世今生》,不是说写点有助于同学的blogs吗,怎么搞个history了?我告诉你:学习得以追女那劲头去实践,今天你想要将js"玩弄"在手,你就得像追妹子一样,先了解妹子的history。这妹子是来自哪里的?都在哪儿念过书?有过多少个男友等等,这样才能全面点了解妹子的各种"特性"。当然这里没有要玩弄妹子的意思\(^o^)/~。
人类的进步都是在各种各样的需求中推进的。JavaScript的出现也是需求使然。说JavaScript诞生之前,得先说说internet是怎么搞出来的。上世纪60年代,老美搞了个国防通信网,为的是win the war;到了80年代,还是老美的砖家,不过这回的主角是善良的科学家与教育砖家。他们为了方便遍布各地的科研机构、学校能够快速进行数据交换共享,于是搞了全国性的网络,将这些机构连接起来。这个时候,互联网出生了。但是还只局限高砖们使用,他们进行数据交换的格式也只是高砖们开个会议、拍拍脑袋就定调的各种文本格式。
到了90年代,internet开始走出科研机构、实验室,开始了商用的路程,即老百姓也用得了。但这个时候,问题来了,老百姓不是砖家,他们可不能开会定数据交换的格式。是的,老百姓的需求来了!于是各大软件公司、如NetScape、microsoft纷纷推出了基于超文本传输协议(HTTP,HyperText Transfer Protocol)数据交换格式的NB软件!它就是今天我们天天都用到的的浏览器!
啊!浏览器来了!这牛B的软件,能将正确解析通过internet传输的文字、图片;能够接收键盘的输入,将我们想要表达的意思传输给另一方。但是,你看准了!这NB的软件当时很傻,只能做接收数据、呈现数据的事情,无法对输入数据进行任何校验。比如你本想给妹子转账100美金,但是手贱多按了几个0,浏览器毫无提示就将数据提交到服务器了,当然服务器会有校验。但是当时的internet慢得像绿皮火车,好不容易将你转账这个信息运到了目的地(服务器),才进行检验,才发现你不能转那么多钱。于是绿皮车又像蜗牛一样将你不能转账的信息运回去,告诉你可能输入的金额错误了!你懂的,绿皮车慢得让人受不了!这一来回,你已经喝了几杯咖啡,才得到提示“我不能转那么多钱”!砖家们更受不了!于是,需求又来了!大牛们又挤在一起喝咖啡,商讨怎么解决这个问题。大约在1995年,NetScape里面有个NB的程序员布兰登-艾奇,他搞了个liveScript脚本语言,直接集成到Navigator2浏览器上。是的,这个liveScript能够满足解决前面遇到的问题。但你看准了,它的名字叫“liveScript”,那时候的它还不叫javascript。那现在叫的“JavaScript”又是怎么来的呢?这事情还得扯到曾经伟大得像太阳的sun公司。那时,sun公司那个牛b得“一次编译、到处运行”的java已经被热炒。Navigator的老大们也懂点营销策略,为了给即将推出的Navigator2增加筹码,于是找上了sun的大门。询问能不能借用“java”的头衔。sun也是够伟大的,二话不说,拿去用吧!要是放到现在,这个词估计要花上好几百元亿美金(sun之死,是不是由于太慷慨了呢?)。于是乎,原来的liveScript变成了现在的JavaScript。鞋同们,看到这里你应该知道JavaScript与java是什么关系了吧?可别再想JavaScript和java有可能是同一条船的了!
到此,你现在终于知道JavaScript是怎么来的了吧!好!很好!但是你还得深入了解它当时的出生景况,这才是决定了JavaScript特性的重要因素。话说199x年那段日子,java还是个婴儿,编程界还是c、c++这类言语当道,虽然c++这种改良的c跟当代oo思想靠上了边。但是各大高手们,都已经深受c言语的毒害。布兰登-艾奇也不列外,这家伙在设计liveScript的时候,明显受到了c言语的影响。所以你看到的JavaScript没有namespace(在java里面叫pakeage)、没有class的概念、更没有继承、重写、重载的设计特性。那现在的javascript面向对象编程是怎么回事,那都利用了奇淫技巧、拐弯抹角去实现的。不过我们都是幸运的,JavaScriptES6版本的面向对象特性已经进一步完善,以后不会那么别扭了。
是的,JavaScript应运而生了,但是自出生以来,它的地位一直不高,它被设计为简单的浏览器数据校验角色。说白了可有可无,如果不采用JavaScript进行客户端验证,无非是要发回服务器验证而已,只是由于网络传输,使用体验差而已。并不是离开了它就活不了。JavaScript的尴尬地位从出生那天就已经注定了。
俗话说“留得青山在不愁没柴烧”,JavaScript撑着这可有可无的身份混到了二十一世纪初。internet出现了影响深远的Ajax技术(异步JavaScript和XML技术),也拯救了JavaScript。要说感谢,JavaScript得感谢两个伟大的公司,一个是microsoft、一个是google。二十一世纪初那会,webservice兴起,你懂的,websercie的传输协议文本格式其实就是一个xml。微软为此率先以ActiveXObject的形式在自己浏览器里搞了个XMLHTTPRequest。一看名字就知道,这玩儿当时是为了在浏览器上实现与服务端的webservice应用通信。结果微软此举甚是成功,各大浏览器厂商纷纷跟进,效仿微软(不要喷得太多国内的互联网抄袭之风,有能力才能抄袭,无能力只能出钱买)。于是乎现代浏览器都实现了XMLHTTPRequest,为Ajax技术提供了实现基础。那为何,JavaScript要感谢google呢?XMLHTTPRequest的出现算是挽救了JavaScript,但是真正让JavaScript摆脱可有可无地位的是google。众所周知,google是个创新型的伟大公司,其实google的创新并不都是创造了新的事物,更多是的利用现有的东西来进行组合创新,现在的安卓系统如此,当年对Ajax的应用也是如此。正当那会XMLHTTPRequest火热的时候,google将这个新事物应用到了Gmai、google地图等热门应用上,大获得成功。JavaScript由此翻身,成为了web开发领域必杀技!
虽然JavaScript已经翻身做了web端开发的主人,但历史还在演进,技术还在不停更新。时至今日,软件应用已经深入老百姓生活的方方面面。这几年,移动互联网的迅猛发展,更是将javascript技能推向前所未有的高地。JavaScript的身影也不只局限于当时设计的应用范围。其已经出现在服务端编程中,尤其是移动跨平台开发,更是一门高效的赚钱技能。君不见现在的前端JavaScript工程师,薪水并不亚于自命清高的后端工程师。更甚好些公司开出可观的薪水还找不到一个NB的JavaScript工程师。
鞋同们!看了它的history,你是不是急着想掌握这门高效的赚钱技能?不要急,敬请期待下一篇博文!