[心得] 软件考古系列:JSON 的故事

楼主: eliang   2023-04-11 10:45:11
专门讲软件开发故事的 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 是完全免费的,这大概也是原因之一。
作者: sssyoyo (柚子)   2023-04-11 11:02:00
cool 谢谢你的分享,很有趣的小故事
作者: masturbateee (奶头好痒怎么办)   2023-04-11 11:29:00
推 感谢分享
作者: DrizztMon   2023-04-11 11:37:00
作者: zxc8787 (摸斗哈压库)   2023-04-11 11:41:00
推,感谢分享
作者: iitze (ici la lune)   2023-04-11 11:41:00
推,感谢分享很有趣
作者: ggBird (ggBird)   2023-04-11 11:43:00
好文
作者: vencil (vencs)   2023-04-11 12:15:00
作者: y2468101216 (芸)   2023-04-11 12:18:00
作者: gpctv (gpctv)   2023-04-11 12:29:00
好有趣,好好奇那个用java写的虚拟宇宙
作者: ts00328685 (Ryan)   2023-04-11 12:38:00
赞赞
作者: justinbear (justinbear)   2023-04-11 12:39:00
作者: wei115 (ㄎㄎ)   2023-04-11 12:42:00
json真的比xml好看很多
作者: cjtv (小当家)   2023-04-11 12:49:00
原来application/json是这样来的
作者: jackblack   2023-04-11 12:55:00
作者: beryah (因为爱)   2023-04-11 12:56:00
推推推
作者: OhGNM (OhGNM)   2023-04-11 13:14:00
好看
作者: greengg   2023-04-11 13:30:00
推 感谢你
作者: nelley (名字:大便王)   2023-04-11 13:36:00
作者: bchen1222 (小刚)   2023-04-11 13:37:00
作者: kyrie77 (NTU KI)   2023-04-11 13:43:00
作者: leolarrel (真.粽子无双)   2023-04-11 13:59:00
我反而拿来练英听
作者: jecint1707 (Hugo)   2023-04-11 14:45:00
有趣
作者: ppc ( )   2023-04-11 15:04:00
好棒
作者: joe120106   2023-04-11 15:16:00
推按错了QQ
作者: TAKADO (朕没给的你不能抢)   2023-04-11 15:19:00
原来JSON的type后面有这个故事
作者: uglykidjoe (uglykidjoe)   2023-04-11 16:04:00
没想到这么辛苦,真的有信仰
作者: ohsuoh (wei)   2023-04-11 16:53:00
作者: s06yji3 (阿南)   2023-04-11 17:28:00
感谢分享
作者: Beersheep (一心不乱)   2023-04-11 17:45:00
好酷
作者: FrAnKw (hard to believe)   2023-04-11 18:09:00
有趣故事
作者: smartree (阿路)   2023-04-11 18:54:00
好有趣的故事
作者: jej (晃奶大馬桶)   2023-04-11 19:48:00
原po应该有年纪了 这种老故事....
作者: xam (听说)   2023-04-11 19:59:00
这个分享赞
作者: lee457088   2023-04-11 20:08:00
长知识
作者: art1 (人,原来不是人)   2023-04-11 20:12:00
终于懂了要用 application/json 的原因 XD
作者: zegas (电风扇啊啊啊啊啊啊啊)   2023-04-11 20:34:00
作者: yyyyyyyv (vyyyyyyyy)   2023-04-11 21:01:00
推推
作者: lej (认真就输了XD)   2023-04-11 21:45:00
感谢分享
作者: hobnob (hobnob)   2023-04-11 21:55:00
推,谢谢分享
作者: vivapinata (viva)   2023-04-11 22:04:00
推推
作者: Darkmist (阿呆)   2023-04-11 22:04:00
很有趣 翻译也很平易近人
作者: holebro (穴弟弟)   2023-04-11 22:22:00
好听
作者: SirAirPower (howard995)   2023-04-11 23:22:00
感谢分享
作者: tr6271bf (tr6271bf)   2023-04-11 23:26:00
好有趣的故事;更正:是历史记录
作者: othree (OOO)   2023-04-11 23:37:00
不过其实还是有 RFC 4627,不知道他说的是不是要进 STD
作者: Dolwa31 (Chih)   2023-04-11 23:54:00
好文推推
作者: FY4   2023-04-11 23:58:00
作者: hiwight (嗨怀特)   2023-04-12 00:03:00
作者: atteleitus (Atteleitus)   2023-04-12 01:03:00
作者: mirror0227 (镜子)   2023-04-12 02:22:00
好文
作者: YYYero (YYYero)   2023-04-12 02:45:00
有趣
作者: dyjo4949 (爌肉王朝)   2023-04-12 03:23:00
好酷的故事XD
作者: justaID (快乐崇拜)   2023-04-12 05:21:00
有趣推cd中.....等等补推补推,个人很喜欢 json,比 xml 简洁易读,用在设定档的话比 yaml 结构分明,不会不小心多个空白或缩排就坏掉(不过这个大概就见仁见智,prettify后层次太多的话 json一堆花括号也是满碍眼)
作者: joe120106   2023-04-12 07:47:00
补推
作者: bheegrl   2023-04-12 08:55:00
作者: v86861062 (数字人:3)   2023-04-12 08:57:00
推推
作者: aassdd926 (打东东)   2023-04-12 09:24:00
有趣推
作者: black2575 (说的也是)   2023-04-12 11:30:00
我们把 LiveScript 改名成 JavaScript告诉大家 JavaScript 只是Java的一部分,这样不就好了?- 干 原来就他们在搞
作者: kyukyu (QQ)   2023-04-12 12:00:00
谢谢分享
作者: zxcasdjason1 (nice_Sky)   2023-04-12 12:13:00
很有趣
作者: wulouise (在线上!=在电脑前)   2023-04-12 12:30:00
上头的人不懂啦,然后这20年每个人乍看都误会
作者: YorkLai (Orange)   2023-04-12 14:04:00
堆!
作者: Kagami3421 (卡加米)   2023-04-12 14:45:00
作者: siriusu (かがみは俺の嫁。)   2023-04-12 15:02:00
感谢翻译
作者: xaxus516   2023-04-12 20:11:00
推 好酷的小故事
作者: jmarr (生锈的吉他弦)   2023-04-12 20:20:00
感谢,增广见闻
作者: akakbest (神剑八方)   2023-04-12 20:48:00
感谢分享
作者: per (impossibile)   2023-04-12 21:19:00
d(`・∀・)b
作者: hyper1990   2023-04-12 21:31:00
感谢分享
作者: johnbill (cj钟钟)   2023-04-12 21:38:00
作者: maybeilikeu (阿季)   2023-04-12 22:30:00
推推 有趣
作者: wk415937 (wk4)   2023-04-12 22:44:00
作者: roader28 (期待)   2023-04-13 00:02:00
作者: timofEE (新人)   2023-04-13 00:45:00
有趣
作者: yuhsiC (鱼)   2023-04-13 01:45:00
作者: believe91326 (阿淳)   2023-04-13 01:58:00
感谢
作者: supertalker (威哥)   2023-04-13 10:24:00
我看完了,不错
作者: maoqq0405   2023-04-13 11:38:00
推推 感谢
作者: CindyK (Mercedes)   2023-04-13 12:54:00
推推
作者: superpandal   2023-04-13 18:44:00
json归类为application也没问题 本身就不只是文字
作者: jessie83 (jessie)   2023-04-13 22:17:00
cool
作者: KUMAMOTO (制约RD了 orz)   2023-04-14 13:00:00
application/json 是这样来的啊
作者: williewillie (GodDamnIsInTheDetail)   2023-04-14 16:37:00
感谢分享
作者: papple23g (逆道者)   2023-04-14 21:37:00
喜欢json官网上的流线图 简单明了
作者: ssszl (苍月)   2023-04-15 12:11:00
感谢翻译 长知识了
作者: Lhmstu (lhmstu)   2023-04-15 12:15:00
感谢分享
作者: chenteddy (Chenteddy)   2023-04-16 10:12:00
感谢分享
作者: happy8155 (Chickey)   2023-04-17 22:17:00
好有趣
作者: zerofinal (人生~)   2023-04-21 18:44:00
作者: voizyc (养乐多奶茶)   2023-04-25 02:36:00
作者: foxtrot (☠)   2023-04-28 15:24:00
作者: jay123peter (萧瑟风雅)   2023-05-11 18:36:00
作者: vvind (wind)   2023-05-20 23:21:00

Links booklink

Contact Us: admin [ a t ] ucptt.com