专门讲软件开发故事的 Podcast 节目 CoRecursive 最近访问了 JSON 之父 —
Douglas Crockford(以下简称 Doug),说他是怎么想出 JSON 这个现在大家都在用的资
料格式,以及他是怎么推广它的。
我觉得这段历史很有趣,就顺手整理一下,翻译成中文,希望可以娱乐到一些人 :)
本文也同时刊载在 https://hackmd.io/@brachiosoft/json
Doug 除了是 JSON 的发明人,也是 JSLint 和 JavaScript 经典名书
“JavaScript: The Good Parts”的作者。
## JavaScript 简介
刚接触 JavaScript 时,Doug 觉得它是他看过最蠢的东西。
JavaScript 最早的名字 Mocha,后来改名成 LiveScript。当时网景(Netscape)和升阳
(Sun)结盟以对抗微软,他们把 Java 放进 Netscape 浏览器,所以才有了 Java Applet。升阳便要求网景:“既然有了 Java,你们应该要拿掉 LiveScript,不然怎么说服大家 Java 是大家最后需要的语言?”
网景不想服从,他们不想抹去多年的努力,于是某个人(传说是 Marc Andreessen)半开
玩笑建议:“我们把 LiveScript 改名成 JavaScript,告诉大家 JavaScript 只是 Java
的一部分,这样不就好了?”升阳同意。于是他们办一场记者会向全世界撒谎,造就了
JavaScript 这个愚蠢又误导人的的名字。
## 从 Java 到 JavaScript
1990 年代 Doug 在 Electric Communities 工作,EC 是当时的一间大公司,他们建造了
个 3D 虚拟世界,玩家可以在虚拟世界谈话、走路、传送,有点类似第二人生
(Second Life)或现在的元宇宙。可惜这个虚拟世界是 Java 写成的,Java 带给 Doug
很多问题,其中一个问题是加载时间太长,加载整个环境要三分钟。
EC 当时一个客户是 Turner Broadcasting,他们要做一个小孩的卡片游戏。一个方式是
做成 Java applet,但 Doug 已经吃过 Java 的亏了,他决定这次不要重蹈覆辙。
Doug 不知从那里得到的灵感,觉得可以完全用 JavaScript 来写。他找来了
Dave Flanagan 的书 “JavaScript: The Definitive Guide”,然后就开始试着写一个
demo:浏览器画面上有一个人物,你可以拖曳它移动,这在那个年代是前所未见,很少人
知道 JavaScript 可以做到那种效果。
自此,Doug 开始懂得欣赏 JavaScript,他学到了很多 JavaScript 的运作方式。
JavaScript 与 Java 无关,它是一个完全不同的语言,它有一些好东西是 Java 做不到
的。例如:函式在 JavaScript 是头等公民(first-class function),它还有类似
Schema 才有的 closure,这些都是当时主流语言没有的。
Doug 写了一篇文章 “The World's Most Misunderstood Programming Language”,开
始了他的 JavaScript 职涯人生。
## JSON 的起源
时间来到 2001 年,Doug 和一些同事创立了一间公司叫 State Software。他想要试试单
页式应用程式(single-page application)的可行性,做一个 proof-of-concept (POC)
去募款。
当时是 XML 的天下。所有大公司,像是微软、HP、IBM、升阳都是 XML 的拥护者。XML
功能齐全但很复杂,Doug 完全不想碰它,他想到可以利用 JavaScript 本身的语法来交
换资料,因为浏览器本来就可以读 JavaScript,他们就不用再浪费时间写 parser。
他们拿着这个 POC 去募款,但当时 dot com 泡沫才破灭,他们根本拿不到什么钱。例如
投资人会说“啊,抱歉,我们已经在用 XML 了,很难再改用其他技术”、“我们只用业
界标准”,Doug 回答:“这是标准啊,这是 ECMAScript 里的标准”,但他们只摇头说
:“这不算标准”。
于是 Doug 决定要让这个东西变成标准。首先,要帮它取一个名字。他们最先想到
JSML - JavaScript Message Language,但升阳当时已经有东西叫 JSML 了(好险)。
然后他们想了一会,JavaScript Object Notation - JSON 。Doug 注册了 json.org 网
域名,放上一个简单的网页,JSON 就这样誔生了。
Doug 的公司 State Software 很快因为没钱就收掉了。虽然 json.org 留下来了,但没
人在乎。Doug 好似朝着网络大海丢了一封瓶中信,等待对的时机点被人打开。
2004 年 Gmail 出现了,突然间大家都在讨论 AJAX,一堆原本没在做浏览器应用的人都
跑来做浏览器应用。AJAX 里的 X 本来是代表 XML,但一般人进来看到 XML 就会觉得太
复杂,然后转头采用 JSON。于是 JSON 开始起飞。
## 雅虎与 YUI
在前同事的介绍下,Doug 去了雅虎工作,当时雅虎还是一间很酷的公司。Doug 有一个最
棒的工作 — 他不需要负责专案,他的唯一任务是教公司的人怎么写 JavaScript。
JSON 成为主流的同时,Doug 在推广如何正确使用 JavaScript,例如:每行结尾都要有
分号、不要用 eval、用 JSLint 等。Doug 成为了 JavaScript 的传教士。
当时他推广的还有一样东西:YUI,一个雅虎的开源专案。但推广过程也遇到相同的阻碍,
有人会说“我们应该要用标准的东西”。Doug 又使出同一招:“好,那我再把它变成标
准,大家才会用。”
Doug 开始教全世界正确使用 JavaScript,同时也要大家用 YUI,因为只要外面的世界开
始用 YUI,公司内部也会 YUI。“在雅虎没有管理层的人在乎这些,我们就只能使一些手
段诱导大家做去对的事。”
## JSON 标准化
2008 年 Doug 出版了 JavaScript: The Good Parts 这本书后,他回过头来要让 JSON
正式标准化。
他去找了 IETF(制定各种互联网标准的组织),要求他们保留一个 MIME 类别名称给
JSON。申请过程很冗长,经过 IEFT 无数次来来回回,最后 IETF 给了 Doug 一个不是他
本来想要的类别名:application/json。Doug 本来想要的是 text/json,因为 JSON 不
是应用程式,是一种文字格式。没人知道为什么 IETF 为什么要这样搞,Doug 猜想:“
可能是因为里面有 XML 的粉丝,他们怀恨在心,所以他们觉得 XML 可以 text/xml,但
JSON 就得是 application/json。这不是什么大问题,只是有点丑。”
之后 IETF 要求 Doug 再写一份 RFC 文件,来制定 JSON 标准。但过程太痛苦,Doug 离
开 IETF,去找了 ECMA(制定 JavaScript 语言标准的组织)为 JSON 再制定标准。ECMA
的人友善多了,最终 ECMA 404 成为 JSON 的正式标准。
## 建言
不要太执著于你现在开发软件的方式,要对新技术抱执接纳的态度。Doug 本来是 OOP 的
死忠信奉者,但他后来改变想法。现在他甚至不再推广 JavaScript,他在推广下一个新
语言。这个新语言要有分散的特性。现在程式都是在多台机器上跑,主流语言像是 Java
和 C++ 原先是设计在一台机器上跑,但现在的世界不一样了。Doug 觉得下一个新东西是
actor。Actor 的概念已经在 Erlang 行之有年,用在并行处理上。
被问到现今的 XML 的什么?Doug 说:“我不知道,大概是 JavaScript 框架吧。这些框
架变得肥大又奇怪,我不懂为什么大家会喜欢。过去浏览器不稳定,我才会建议使用
JavaScript 框架,但现在浏览器都进步了,大致遵循标准,所以我现在写浏览器应用都
是纯 JavaScript,不用框架。”
## JSON 成功的原因
Doug 说 JSON 的成功完全是偶然,但关键是 Doug 是一个孜孜不倦的传教士,他多次被
拒绝也能找到方法(例如让它变成标准)说服人。此外,Doug 没有利用 JSON 赚钱
JSON 是完全免费的,这大概也是原因之一。