一门科学的历史,就是这门科学本身。
——歌德
时至今日,JavaScript 对前端工程师的重要性已无需多言。甚至有些同学已经达到了通读语言标准,对 ECMA-262 规范熟捻于心的水平。
然而即便如此,很多同学仍然将编程语言作为一种源自权威的、教条式的、纯应用层面的工具来看待,对背后所能延伸出的广阔领域不求甚解,更不认为自己有条件参与到这项技术的演化之中。这其实是颇有些遗憾的。
那么,怎样才能做到对语言规范祛魅,用发展的眼光来看待 JavaScript 呢?
显然,此时单纯地知道某项语言特性「是什么」是不够的,我们更要理解这背后许多的「为什么」。
这需要知道的除了编程语言的基础知识外,更有一项不可或缺的部分,亦即 JavaScript 的演化历史——规范为什么要这么定义?TC39 为什么要这样决策?
要解答这些问题,我们必须回到当时的历史背景下,方能理清来龙去脉,看透个中取舍。
要讲述这样的历史,无疑需要真正深度参与过 JavaScript 演化的前辈。
幸运的是,这样的人一来就来了两个。
他们一位是JavaScript 的发明者,前端祖师爷 Brendan Eich;另一位是 ES5 和 ES6 标准的主编兼首席作者,堪称 JavaScript 甘道夫的 Allen Wirfs-Brock——论起对 JavaScript 的贡献和对历史标准的理解,他们认第二,恐怕就没人敢认第一了。
可是,这两位早已在前端江湖归隐的老神仙,为什么会突然相聚一堂,联名回忆起 JavaScript 的峥嵘岁月呢?
这里的渊源同样极有来头,乃是原定于 2020 年举行的 History of Programming Languages(HOPL)学术会议。
这项会议是编程语言界「华山论剑」级的顶会,每隔十年以上才举行一次,只有极少数重要编程语言的核心贡献者有资格主笔。像 C、C++、Lisp、Smalltalk、Haskell 等如雷贯耳语言的作者,都曾是会议的座上宾。
所以,两位大佬这次讲的故事,就是他们为此次会议所提供的 JavaScript 历史研究成果——尽在名为《JavaScript 二十年》(JavaScript the First 20 Years)的新书之中。
以两位作者的履历和 HOPL 会议的背景,相信我们已经无需担心本书的权威性了。
但提到学术著作,我们往往会下意识地将其与晦涩难懂联系起来。所幸 HOPL 毕竟不同于狭义的编程语言学术研究,它鼓励作者除了技术细节之外,一并尽可能多地写进那些影响语言演化的非技术部分(俗称八卦)。
在这种驱动力之下,本书的题材与传统的《JavaScript 入门指南》式语言教科书几乎全然不同。它别具一格地以 JavaScript 二十年来的几个主要发展阶段为界,分四大部分梳理出了语言的发展历程。
下面就为大家简单介绍一下吧。
首先是第一部分「语言诞生」,它讲的是 JavaScript 发明之初的故事。
如果把现在的 JavaScript 当作一家上市公司,那么这部分就是创业期从零到一的打拼历程,大致解答了这么些问题:
然后是第二部分「创立标准」,它介绍的是从 JavaScript 到 ECMAScript 标准的历程。这部分介绍了很多标准化组织的运作方式,同时也解答了很多问题:
对了,在第二部分的尾声,两位作者还提出了一个名为「浏览器博弈论」的理论,它能很好地解释 JavaScript 诞生以来,围绕它各项技术创新的成败缘由。
接下来是第三部分「改革失败」,它复盘了一段经典的历史公案,也就是 ES4 的失败。这段故事既牵扯到了当时前沿的编程语言学术研究,又涉及到了微软、Adobe、雅虎等巨头背后的商业利益,在技术和商业层面都有许多看点:
在这部分的时间线结束之际,JavaScript 的重要性已经获得了普遍的认可。因此本部分末尾介绍了当时的「新气象」,比如 JavaScript 性能革命、模块系统、Node.js,以及「万物均可编译到 JS」的现象等。
最后的第四部分「继往开来」,讲述了 JavaScript 的现代化之路。它介绍了 2009 年 ES5 与 2015 年 ES2015 这两个成功标准背后的故事。这一部分详细地介绍了很多对现代 JS 而言重要的技术内容,相对而言是更需要「啃」的:
作为一本兼备技术细节与历史八卦的书籍,《JavaScript 二十年》的阅读体验是奇妙的。
阅读它的感受就像是在听一位技术功底深厚的前辈分享过往经历一样,表面上平铺直叙,但时不时总能穿插着引出各种专业的技术概念。
对于基础扎实的同学,相信本书在阅读时既能让你保持着听故事时的畅快感,又能给你串联起技术点时的惊喜。
当然,就算对于偏入门阶段的同学,阅读本书时应当也不会遇到多少阻碍。
这是因为作为一份严谨的研究作品,本书附带了不少辅助资料,比如专业术语表。这份术语表相当于一份简易的「JavaScript 词典」,连续回答了 100 个左右的「什么是函数」和「什么是 JS 引擎」一类的灵魂拷问式问题,对这些概念作出了直接的科普式定义。另外,本书中还有近 500 条参考文献、加入了约 100 条脚注,以及附带了约 400 项的 JavaScript 演化时间线表格。这也算是内容严谨度的一种体现吧。
顺便一提,《JavaScript 二十年》的推荐阵容也是相当强大的。
如《JavaScript 语言精粹》的作者 Douglas Crockford(老道)其实就是两位作者当年在 TC39 的老熟人,他为本书撰写了推荐语。
而《JavaScript 语言精髓与编程实践》的作者周爱民老师也为本书作了序。
另外还有 @justjavac、@死月、@月影、@李玉北、@张云龙、@顾轶灵、@黄轶、@于航、@沈毅、@黄玄、@工业聚、@小爝、@一丝、@题叶、@染陌、@叶俊星、@侯策、@寒雁、@太狼、@敖天羽、@xcatliu、@Himself65 等国内前端社区知名的开发者们撰写推荐语力荐,不容错过噢。
最后,作为这本书的中文版译者,我很希望本书所讲述的 JavaScript 演化故事,能帮助大家对技术与标准有更好的理解。
毕竟今天的 JavaScript 标准已经是集体智慧的结晶,其未来并不掌握在某个权威个体手中,是由社区的共识所决定的。
而即便不在标准委员会中,我们每一次有价值的技术讨论,也都在无形中影响着社区的共识。
在这个日新月异的领域,我很期待未来能看到更多来自中国的声音。
上一个二十年已经尘埃落定,该由我们这一代开发者们来书写自己的故事了。
让我们一同见证 Web 在下一个二十年里的发展吧!
▊《JavaScript 二十年》
Allen,Wirfs-Brock,Brendan,Eich 著
王译锋 译
跟随当事人穿梭于 JavaScript 二十年发展史之间,从十天发明 JavaScript 的历史故事再到 ES1 标准化的合纵连横,再到 ES4 的失意、ES5 的妥协与 ES6 的成功,本书将为你解答种种“语言为什么要设计成这样”的问题。