01|JavaScript 最有名的出身,不是优雅,是仓促
如果一门语言的出身要靠一句话传世,那 JavaScript 大概已经赢了。
那句话就是:
十天写出来。
这句太有戏。
它短,狠,带点传奇味,也带点嘲讽味。
好像只要一说出口,后面的情绪就已经自动跟上了:
- 难怪这门语言毛病这么多
- 难怪它一身历史包袱
- 难怪大家一边离不开,一边总想骂它
可如果你真把 JavaScript 的历史只理解成“某个工程师在十天里写出了一门后来统治互联网的语言”,那你其实只看到了这出戏最热闹、却也最浅的一层。
因为真正值得追问的,不是:
“它到底是不是十天写完的?”
而是:
“为什么这样一个明显带着时间压力和市场妥协痕迹的东西,没有很快夭折,反而一路活成了整个 Web 的底座?”
这才是第一篇真正要回答的问题。
02|Netscape 当时想要的,不是一门伟大的语言,而是一门来得及的语言
今天回头看,很容易把 JavaScript 的诞生写成某种技术史名场面:
- Brendan Eich 出场
- Netscape 给任务
- 十天交货
- 历史从此改写
可当时 Netscape 的心态,其实一点都不浪漫。
它最先面对的不是“我们要不要创造一门伟大的新语言”。
而是:
浏览器竞争已经开始了,网页需要更强的交互能力,而我们得赶紧拿出东西。
1995 年的 Web 还很早。
页面大体上还是静的。
HTML 能做的事情有限。
可需求已经开始往前顶:
- 表单想更聪明一点
- 页面想有点动态行为
- 作者想做一点“不用整页重载”的交互
- Web 设计者想要一种比 Java applet 更轻、更快上手的办法
这时候 Netscape 其实是两条线一起押。
一条线押的是 Java。
那是当时带着巨大声量的新语言,适合讲“大型、正式、跨平台、企业级”那套未来。
另一条线押的,则是一个更现实也更俗的需求:
网页作者能不能直接在浏览器里写一点小脚本,让页面活起来。
这个需求没有 Java 那么光鲜。
但它更贴近现实。
因为不是每个做网页的人都想成为“高能程序员”。
很多人只是想:
- 让按钮有反应
- 让表单会检查
- 让页面别那么死
所以从 Netscape 的角度看,真正关键的不是“理想语言长什么样”。
而是:
有没有一门足够轻、足够快、足够能嵌进浏览器里的语言,能立刻接住这批需求。
这是 JavaScript 整条历史最早的底色。
它一开始面对的就不是纯设计问题。
它面对的是市场时机。
03|Brendan Eich 原本想带进浏览器的,不是 Java 味,而是 Scheme 味
这也是 JavaScript 起源里最容易被后来的名字掩盖掉的一层。
很多人今天一听它叫 JavaScript,会自然以为:
它一开始就是冲着“做个 Java 的轻量版”去的。
其实不对。
Brendan Eich 后来回忆得很明确:他被招进 Netscape 时,谈的是要在浏览器里“做 Scheme”。
也就是说,他脑子里最自然的那套语言气质,并不是:
- 冗长类层级
- 强类型仪式感
- 企业级重型风格
而更接近:
- 一等函数
- 更轻的表达
- 更适合快速拼装和胶水工作的语言感觉
问题是,工程师脑子里的理想,不等于公司最终要卖出去的东西。
当时 Netscape 已经在和 Sun 合作推进 Java。
Java 的品牌热度也正在往上冲。
所以真正落到产品决策上,问题就变成了:
浏览器里的这门“小语言”,可以有一点 Scheme 的魂,但不能长得太不像这个时代市场最容易理解的样子。
于是后来的 JavaScript 从一开始就带着一种非常典型的混血气质:
- 底下有一点函数式语言和
Self风格对象模型的影子 - 表面却得尽量显得别那么吓人
- 最终还要服务一群未必受过系统编程训练的网页作者
这就解释了它为什么从第一天起就那么别扭,又那么特别。
它不是一门从头到尾都忠于单一设计哲学的语言。
它更像一门在多股力量夹击下,被硬拧出来的东西。
04|所以“十天”最该强调的,不是天才神话,而是时间压力
关于那场著名的十天冲刺,最容易写歪的方式,就是把它写成天降神迹。
好像 Brendan Eich 关上门,十天之后拿着一门完整、成熟、注定改变世界的语言走出来。
真实情况当然没这么神。
更准确的说法是:
十天更像一次把可工作的原型硬拉出来的冲刺,而不是一门语言从此彻底定型的全部过程。
后面当然还有继续修补、嵌入、命名、发布、适配。
可这十天依然重要。
因为它把 JavaScript 身上最关键的一种命运感压得特别实:
这门语言从一开始就不是在宽松条件下慢慢设计的。
它是在一个非常具体的倒计时里被逼出来的。
而在这种条件下,语言设计会天然优先几件事:
- 先能跑
- 先能嵌进产品
- 先能让人用起来
- 先赶上市场窗口
至于那些更优雅、更一致、更想清楚的部分,很多都只能往后放。
这不是 JavaScript 独有的命。
但它在 JavaScript 身上尤其明显。
因为 Web 平台后来最大的宿命之一,就是:
先部署出去的东西,很容易比后来更完美的替代方案活得更久。
一旦你抢先进入浏览器,一旦开发者开始复制它的写法,一旦网站开始依赖它,一旦用户开始习惯“网页可以这样动起来”,事情就会迅速从“设计问题”变成“既成事实”。
而 JavaScript 赶上的,恰恰就是这样的时刻。
05|它为什么没有直接用现成语言替代?因为 Netscape 要的不是更纯粹,而是更好嵌进 Web
从今天回头看,很多人会自然产生一个疑问:
既然时间这么赶,为什么不干脆把现成语言塞进去?
这个问题听起来很合理。
但你把当时的使用场景放回去,就会发现 Netscape 真正需要的东西,其实非常挑剔:
- 它得能直接嵌进浏览器
- 它得尽量轻
- 它得适合写小脚本
- 它得让网页作者有机会学得会、抄得会、改得动
- 它最好还能和页面对象、表单、窗口这些浏览器世界直接接上
也就是说,Netscape 需要的不是一个“理论上更成熟”的通用语言。
它需要的是一门:
刚好适合 Web 当时那个位置的胶水语言。
这也是为什么后来 Brendan Eich 在访谈里会不断强调,最初目标之一就是让 Web 设计者、哪怕编程训练不那么系统的人,也能加一点动画、加一点表单逻辑、加一点页面智能。
这句话非常重要。
因为它等于说明:
JavaScript 最初不是为了把浏览器变成大型软件平台而造的。
它更像是为了回答一个很朴素的问题:
“网页作者能不能自己往页面里塞一点行为?”
它出生时的角色,更接近:
- 页面胶水
- 表单小工
- 交互补丁
- 作者侧的轻量脚本
可很多历史里最有戏的地方就在这儿。
一开始被当成小工的东西,后来反而最容易因为“谁都在用”而越长越大。
06|从 Mocha 到 LiveScript 再到 JavaScript,这门语言的命运其实早就写在名字里
很多语言的命名只是命名。
JavaScript 的命名却几乎像一份历史判词。
因为它把这门语言最早的市场定位、后来几十年的误解,甚至整个 Web 产业的宣传气质,都压进去了。
这条线大致是:
- 最初内部原型常被叫作
Mocha - 到 Netscape Navigator
2.0beta 时,产品里出现的是LiveScript - 到
1995-12-04Netscape 和 Sun 联合发新闻稿时,它正式变成了JavaScript
这件事最值得看的,不是八卦感。
而是它赤裸裸地说明:
这门语言从一开始就不是只按技术逻辑命名的。
它是按市场传播逻辑命名的。
当时 Java 的声量极大。
Sun 和 Netscape 又在合作。
所以把 LiveScript 改成 JavaScript,本质上是在向外界讲一个更容易被听懂的故事:
Java 很强,JavaScript 是它的轻量搭档; Java 负责更正式的大活,JavaScript 负责网页里的轻量行为。
你去看那份 1995 年的联合新闻稿,语气就特别明显。
它把 JavaScript 定义成:
“an open, cross-platform object scripting language”
而且反复强调它是 Java 的补充。
这当然帮助它迅速被市场记住。
可代价也非常长远。
因为从这一刻开始,世界就被鼓励去误会一件事:
JavaScript 和 Java 好像是一家人。
事实上,它们从语言设计谱系到使用方式,都不是一回事。
只是市场需要它们暂时被摆成一对。
所以我一直觉得,JavaScript 这个名字本身就是这门语言命运的一部分:
它不是纯技术命名。
它是市场命名。
而市场命名最擅长干的事,就是让一个东西迅速流行,同时也让它背上会拖很多年的误解。
07|JavaScript 真正抢到的,不是“更好设计”,而是“更好部署的位置”
到这里,第一篇最关键的问题就应该能更清楚了。
为什么 JavaScript 没有像很多仓促产物那样,很快被更“正规”的东西淘汰?
答案不神秘。
因为它抢到的不是语义上的优势。
它抢到的是:
浏览器里的部署位置。
这点特别重要。
一门语言是不是能活下来,很多时候不只看它写得多漂亮。
更看它是不是:
- 已经进了用户机器
- 已经随着浏览器分发
- 已经能直接碰到页面
- 已经让作者开始复制粘贴自己的片段
Java applet 当年当然也被寄予厚望。
它更正式、更像“真正编程语言”、更适合讲宏大未来。
但对于大量网页作者来说,JavaScript 更贴身。
因为它更像网页的一部分。
你不用另起一整套重型开发流程。
你不用先把自己变成“专业程序员”。
你可以就在页面旁边写一点点逻辑。
可以改。
可以抄。
可以很快见效。
这在 Web 早期非常致命。
因为早期 Web 爆炸式扩张最需要的,往往不是最工整的技术体系。
而是:
传播摩擦够不够低。
JavaScript 在这点上几乎踩中了一切关键条件:
- 随浏览器一起扩散
- 和 HTML 天然贴近
- 容易抄范例
- 容易做小修小补
- 足够轻,足够“像网页作者能碰的东西”
这就是为什么它会活下来。
不是因为它一开始最完美。
而是因为它一开始最容易被整个 Web 生态复制。
08|所以 JavaScript 身上的很多“怪”,从第一天起就不是失误,而是环境账单
今天很多人骂 JavaScript,常会集中在这些地方:
- 设计不够整齐
- 历史包袱明显
- 一些语义看着像时代遗留物
- 很多地方不像“学院派会好好设计出来的语言”
这些判断并不全错。
可如果你只停在“它设计得怪”,就还是漏掉了真正关键的那层:
这些怪,很多不是孤立缺陷,而是诞生环境留下来的账单。
当一门语言是在下面这些条件里出生:
- 时间紧
- 市场窗口逼人
- 公司要它马上能嵌进产品
- 目标用户不只是职业程序员
- 外部还要借 Java 热度做传播
那它最后长出来的东西,当然不会像一篇从容打磨多年的语言设计论文。
它会更像一种现实折中物。
而现实折中物一旦先进入平台,再往后就很难整体重来。
所以 JavaScript 最值得记住的,不是“它居然十天写出来”。
而是:
它在那样的条件下被做出来之后,整个 Web 又刚好太需要这样一种东西,结果这门本来像临时搭起来的语言,反而被历史推成了承重结构。
09|为什么这门十天写出来的语言,最后没按“短命脚本”那条路走
把前面几层叠起来看,你会发现 JavaScript 江湖 第一篇最重要的判断,其实不是“十天”。
而是这句:
JavaScript 一开始就不是为了伟大而生的。
它不是冲着“做一门最优雅的新语言”去的。
它也不是冲着“把浏览器变成大型应用平台”去的。
它最初更像一门:
- 为了赶市场窗口而做出来的语言
- 为了让网页作者更容易上手而压低门槛的语言
- 为了让浏览器尽快长出一点行为能力而塞进去的语言
可也正因为如此,它后来才会变得这么重要。
因为 Web 最早缺的,不是一门更纯的语言。
它缺的是一门:
足够轻、足够近、足够容易进入页面现实的语言。
JavaScript 刚好站在了那个位置上。
而一旦它先站住,后面的事情就开始变得和语言设计本身没那么有关了。
接下来推动它往前走的,会是另外几股更大的力量:
- 浏览器大战
- 标准化止血
- 网页应用化
- 引擎性能竞赛
- Node.js 和工具链外扩
也就是说,第一篇讲的不是“英雄登场”。
第一篇讲的是:
一个本来像临时方案的东西,是怎么先混进了平台心脏。
后面整套 JavaScript 江湖,都会建立在这个前提上继续往下走。
10|JavaScript 最早先要活下来,才谈得上后来的一切
JavaScript 最早的问题,从来不是“语法能不能设计得更漂亮”。
它最早的问题是:
浏览器里到底能不能赶紧有一门人人都摸得到的脚本语言。
而它之所以后来活成整个 Web 的底座,也不是因为它天生最正确。
而是因为在 1995 年那个时间点上,它比很多理论上更漂亮的方案都更接近现实。
所以第一篇如果只记一句,就记这句:
JavaScript 不是因为完美才活下来,它是因为先进入了浏览器、先进入了网页作者手里、先进入了 Web 的现实,才活成了后来这副谁也绕不开的样子。
编者注(事实核对):文中关于“十天”与 JavaScript 起源的叙述,主要依据 Allen Wirfs-Brock / Brendan Eich 合写的 JavaScript: The First 20 Years、Brendan Eich 2008 年博文 Popularity、以及 2008 年 InfoWorld 对 Eich 的访谈。正文把“十天”处理为 1995 年 5 月形成可工作原型的高压冲刺,而非“十天内彻底完成后续全部语言历史”。关于 Mocha -> LiveScript -> JavaScript 的命名变化,以及 1995-12-04 Netscape / Sun 联合新闻稿中“JavaScript 是 Java 的补充型脚本语言”的定位,均来自当事人回忆与当年发布材料的互证。
关键人物速览
- Brendan Eich:JavaScript 的直接创造者。第一篇里他最重要的身份,不是“天才语言设计师”,而是一个在极短时间压力里,把可工作原型硬做出来的人。
- Marc Andreessen:Netscape 的关键人物之一。JavaScript 为什么会被定位成“给网页作者用的轻量脚本”,和他的产品判断关系很大。
- Bill Joy:Sun 的关键人物之一。JavaScript 为什么能最终用上这个名字,并被包装成 Java 的互补搭档,他这条线很重要。
参考与延伸阅读
JavaScript: The First 20 Years
https://dl.acm.org/doi/10.1145/3386327作者修订版 PDF:JavaScript: The First 20 Years
https://www.wirfs-brock.com/allen/jshopl.pdfBrendan Eich: Popularity
https://brendaneich.com/2008/04/popularity/JavaScript creator ponders past, future (InfoWorld, 2008)
https://www.infoworld.com/article/2653798/javascript-creator-ponders-past-future.htmlNetscape and Sun Announce JavaScript (1995 Press Release, Archive)
https://web.archive.org/web/20070916144913/http://wp.netscape.com/newsref/pr/newsrelease67.html