前言
作为一个程序员,我其实一直是抵触JavaScript的,一直无法理解为什么JavaScript能存活至今,而且还有越来越火的趋势。
JavaScript作为一门编程语言,经常被吐槽有诸多不足,比如补丁式的面向对象设计,弱类型的不安全性,傻大的DOM模型,奇怪的==和===运算符,等等。
但是,这些种种不足,却并没有妨碍它成为一门越来越热的编程语言。
看一下刚刚过去的2019年8月份的编程语言排行榜,JavaScript比2018年同期还提升了一个名次。
再看看过去20年的数据,JavaScript居然从来没有跌出过Top20(对比Pascal)。
甚至,JavaScript还被评为2014年的年度编程语言:
如果再仔细看一下Top20语言,我们会发现,JavaScript是唯一一个弱类型、但是有很强通用性的脚本语言。
提通用性,是为了把JavaScript和SQL区分开来,毕竟,SQL是几乎不被程序员们看成是一门编程语言的,而且它的使用场景也非常局限。
我一直很困惑,JavaScript的江湖地位为什么这么高,直到最近看到一篇文章,勾起了种种回忆,并解答了我的这个困惑。
《How JavaScript Grew Up and Became a Real Language》
https://medium.com/young-coder/how-javascript-grew-up-and-became-a-real-language-17a0b948b77f
以下是这篇文章的笔记和一些备注。
1. 起源
1995年,Netscape在与微软进行激烈的市场竞争中,进入到一个很尴尬的阶段,他们与Sun公司的战略合作伙伴关系即将结束,而Sun公司的Java和applet,是当时Web编程人员使用的最多的工具。
Netscape公司决定雇佣Brendan Eich来发明一门编程语言,作为Java的替代品。
他们给了Brendan Eich ……10天的时间……去发明一门语言。
然后,Brendan Eich完成了这个不可能任务,赶在Netscape浏览器发布之前完成了JavaScript第一个版本。
【阿斌】此处应该有配乐
出于商业的考虑,Natscape要求Brendan Eich把这门新语言命名为JavaScript,虽然它跟Java一毛钱关系都没有。多年来,这个名字一直都困扰这人们。
2. 前五年
作为一门不严肃的编程语言,在它诞生后的前5年里,JavaScript的主要使用者,是那些无法使用Java的人,主要是一些业余编程人员、爱好者以及需要赶工的人,其中,有一些人主要从事网页设计。
JavaScript被用来制作网页上的一些动效,比如可翻动的按钮:当鼠标指针移动到按钮上时,显示另一个图标,像这样:
这就是当时JavaScript的主要使用场景。
虽然JavaScirpt有很多不足,但是,作为唯一一个被浏览器直接支持的语言,它刚好诞生在一个正确的时间和正确的地点:互联网大爆发。
很多跟它一样丑陋、有着各种不足的语言(比如BASIC、COBOL、SQL、PHP等等)一样,都在正确的时间、正确的地点发挥着至关重要的作用。
在当时,真正限制JavaScript发展空间的是:JavaScript的运行方式。
JavaScript只能运行在网页里,就像在一个沙盒中一样,它被严格地与电脑隔离开,无法直接访问电脑的文件系统、显示器和其他任何硬件设备,更糟糕的是,它还与服务器隔离,无法访问服务器上的任何数据。
3. 突破限制
值得一提的是, 作为Netscape的老对手,微软拯救了JavaScript。
当整个世界还沉迷于用JavaScript制作一些带有翻动特效的按钮时,微软决定为Outlook开发一个更加便捷的网页前端。然后,他们开发出了Outlook Web Access(Outlook网页访问接口):
他们发明了一种技术,让网页可以不需要刷新页面,也能从后台收取新邮件。
注意,当时Google的Gmail还没有被发明。
他们为此开发了一个叫XMLHTTPRequest的ActiveX组件。这个组件给了JavaScript从后台向服务端发起请求获得数据的能力。
随后,别的浏览器也增加了各自的XMLHTTPRequest实现,这样这个接口就不再是微软的ie浏览器的专属功能了。
但是,真正把XMLHTTPRequest的潜能发挥出来、并让整个Web开发界震惊的,不是微软,而是Google。
2004年,Google发布了Gmail,然后2005年发布了Google Maps。
它让世界感受到了基于Web也能开发出像桌面软件一样的交互式Web应用的可能。
【阿斌备注】如果你还记得,这种技术叫做:AJAX。
4. 走进新时代
XMLHTTPRequest无疑是改变JavaScript中最重要的元素之一,但是,并不是唯一。
在那之后,JavaScript的发展又停滞了很多年。
占据市场垄断地位的ie浏览器,它的版本迭代非常慢,而且由于是随着操作系统发布,所以市场上同时存在着大量不同版本的ie。
于是,Web开发者不得不在代码中检查浏览器的版本,以防止出现代码不兼容的问题。
2006年,jQuery的出现,一举解决了浏览器的兼容性问题,让开发者可以专注于开发产品的功能。
2008年,Google发布了V8 JavaScript引擎,大大提高了JavaScript的运行速度。
而且,由于V8引擎是一个独立的开源组件,可以被任何项目所使用,它打开了新世界的大门,诞生了很多想象力之作,比如Node.js(一个用JavaScript开发服务器的框架),Electron(一个用JavaScript开发桌面App的框架)。
2008年底,HTML5的第一个可用版本诞生。H5并不是关于JavaScript的规范,但是它提供了很多新的JavaScript 编程接口。
突然之间,JavaScript开发者获得了一系列工具:存储本地数据、管理浏览器历史、使用声音、运行后台任务等等。
Web应用和桌面应用之间的差距被大大缩小了。
5. 现代的JavaScript
JavaScript的成功,到底是它诞生于浏览器的特殊地位的必然结果,还是一系列不可思议的巧合?我们无法断言。
回顾JavaScript历史,我们知道,它从来都不是任何人的最爱。
相比JavaScript,人们的偏爱,首先是Java applets,然后是Flash,甚至Silverlight。
【阿斌备注】这三个里,Flash算是存活最久的了,不过也将于2020年终止它的命运。
但是,JavaScript战胜了所有的对手,笑到了最后。
所以,也许,更公平的说法是,JavaScript证明了一点,一个所有开发者都知道的一个道理:reach (可实现性?)。
如果一项技术,具有足够的可实现性,你并不需要一开始就是最好的,只要足够好,就已经足够了。
【阿斌备注】原文用的词是reach,文艺的翻译,大概就是小扎喜欢说的:完成胜于完美。
我觉得,作者想表达的意思是,够用,能够完成需要它完成的任务。
现在,JavaScript已经为未来开辟了足够宽的道路:服务端开发(Node.js),桌面开发(Node.js 和 Electron)。而且TypeScript的出现,让开发者可以在编译时就进行类型检查。
【阿斌备注】大爱TypeScript,值得单独写一篇。
未来,WebAssembly也许会打破语言的边界,开发者可以使用任何高级语言编写可以跑在JavaScript引擎上的应用。
现在,我们可以承认,JavaScript,尽管它有很多古怪和矛盾,它依然是最伟大的发明之一。
Brendan Eich把JavaScript塞进了Netscape浏览器,然后,我们把整个世界塞进了浏览器,最后,我们获得了现代互联网。
【阿斌备注】Always bet on JavaScript,这个梗,意思是说,这20年来,面对无数挑战,JavaScript最后都赢了。所以,如果你不知道该支持哪个语言,那就支持JavaScript。
后记
很多程序员,比如我,有一种精神洁癖,完美主义,我们经常看不上一些看起来很不咋地的东西(编程语言也好,工作也好,项目也好,职务也好,等等),总觉得太low。
JavaScript的逆袭,给了我很大的启发,希望对你也有帮助。
欢迎关注,一起看看IT男眼中的世界,顺便做个游戏。
领取专属 10元无门槛券
私享最新 技术干货