Soft_Job 板


LINE

专门讲软体开发故事的 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 是完全免费的,这大概也是原因之一。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.69.243 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1681181114.A.E85.html
1F:推 sssyoyo: cool 谢谢你的分享,很有趣的小故事 04/11 11:02
2F:推 masturbateee: 推 感谢分享 04/11 11:29
3F:推 DrizztMon: 推 04/11 11:37
4F:推 zxc8787: 推,感谢分享 04/11 11:41
5F:推 iitze: 推,感谢分享很有趣 04/11 11:41
6F:推 ggBird: 好文 04/11 11:43
7F:推 vencil: 推 04/11 12:15
8F:推 y2468101216: 推 04/11 12:18
9F:→ gpctv: 好有趣,好好奇那个用java写的虚拟宇宙 04/11 12:29
10F:推 ts00328685: 赞赞 04/11 12:38
11F:推 justinbear: 推 04/11 12:39
12F:推 wei115: json真的比xml好看很多 04/11 12:42
13F:推 cjtv: 原来application/json是这样来的 04/11 12:49
14F:推 jackblack: 推 04/11 12:55
15F:推 beryah: 推推推 04/11 12:56
16F:推 OhGNM: 好看 04/11 13:14
17F:推 greengg: 推 感谢你 04/11 13:30
18F:推 nelley: 推 04/11 13:36
19F:推 bchen1222: 推 04/11 13:37
20F:推 kyrie77: 推 04/11 13:43
21F:→ leolarrel: 我反而拿来练英听 04/11 13:59
22F:推 jecint1707: 有趣 04/11 14:45
23F:推 ppc: 好棒 04/11 15:04
24F:嘘 joe120106: 推 04/11 15:16
25F:→ joe120106: 按错了QQ 04/11 15:17
26F:推 TAKADO: 原来JSON的type後面有这个故事 04/11 15:19
27F:推 uglykidjoe: 没想到这麽辛苦,真的有信仰 04/11 16:04
28F:推 ohsuoh: 推 04/11 16:53
29F:推 s06yji3: 感谢分享 04/11 17:28
30F:推 Beersheep: 好酷 04/11 17:45
31F:推 FrAnKw: 有趣故事 04/11 18:09
32F:推 smartree: 好有趣的故事 04/11 18:54
33F:推 jej: 原po应该有年纪了 这种老故事.... 04/11 19:48
34F:推 xam: 这个分享赞 04/11 19:59
35F:推 lee457088: 长知识 04/11 20:08
36F:推 art1: 终於懂了要用 application/json 的原因 XD 04/11 20:12
37F:推 zegas: 推 04/11 20:34
38F:推 yyyyyyyv: 推推 04/11 21:01
39F:推 lej: 感谢分享 04/11 21:45
40F:推 hobnob: 推,谢谢分享 04/11 21:55
41F:推 vivapinata: 推推 04/11 22:04
42F:推 Darkmist: 很有趣 翻译也很平易近人 04/11 22:04
43F:推 holebro: 好听 04/11 22:22
44F:推 SirAirPower: 感谢分享 04/11 23:22
45F:推 tr6271bf: 好有趣的故事;更正:是历史记录 04/11 23:26
46F:推 othree: 不过其实还是有 RFC 4627,不知道他说的是不是要进 STD 04/11 23:37
47F:推 Dolwa31: 好文推推 04/11 23:54
48F:推 FY4: 推 04/11 23:58
49F:推 hiwight: 推 04/12 00:03
50F:推 atteleitus: 推 04/12 01:03
51F:推 mirror0227: 好文 04/12 02:22
52F:推 YYYero: 有趣 04/12 02:45
53F:推 dyjo4949: 好酷的故事XD 04/12 03:23
54F:→ justaID: 有趣推 04/12 05:21
55F:→ justaID: cd中.....等等补推 04/12 05:22
56F:推 justaID: 补推,个人很喜欢 json,比 xml 简洁易读,用在设定档的 04/12 05:32
57F:→ justaID: 话比 yaml 结构分明,不会不小心多个空白或缩排就坏掉( 04/12 05:32
58F:→ justaID: 不过这个大概就见仁见智,prettify後层次太多的话 json 04/12 05:32
59F:→ justaID: 一堆花括号也是满碍眼) 04/12 05:32
60F:推 joe120106: 补推 04/12 07:47
61F:推 bheegrl: 推 04/12 08:55
62F:推 v86861062: 推推 04/12 08:57
63F:推 aassdd926: 有趣推 04/12 09:24
64F:推 black2575: 我们把 LiveScript 改名成 JavaScript 04/12 11:30
65F:→ black2575: 告诉大家 JavaScript 只是 04/12 11:30
66F:→ black2575: Java的一部分,这样不就好了? 04/12 11:30
67F:→ black2575: - 乾 原来就他们在搞 04/12 11:30
68F:推 kyukyu: 谢谢分享 04/12 12:00
69F:推 zxcasdjason1: 很有趣 04/12 12:13
70F:推 wulouise: 上头的人不懂啦,然後这20年每个人乍看都误会 04/12 12:30
71F:推 YorkLai: 堆! 04/12 14:04
72F:推 Kagami3421: 推 04/12 14:45
73F:推 siriusu: 感谢翻译 04/12 15:02
74F:推 xaxus516: 推 好酷的小故事 04/12 20:11
75F:推 jmarr: 感谢,增广见闻 04/12 20:20
76F:推 akakbest: 感谢分享 04/12 20:48
77F:推 per: d(`・∀・)b 04/12 21:19
78F:推 hyper1990: 感谢分享 04/12 21:31
79F:推 johnbill: 推 04/12 21:38
80F:推 maybeilikeu: 推推 有趣 04/12 22:30
81F:推 wk415937: 推 04/12 22:44
82F:推 roader28: 推 04/13 00:02
83F:推 timofEE: 有趣 04/13 00:45
84F:推 yuhsiC: 推 04/13 01:45
85F:推 believe91326: 感谢 04/13 01:58
86F:推 supertalker: 我看完了,不错 04/13 10:24
87F:推 maoqq0405: 推推 感谢 04/13 11:38
88F:推 CindyK: 推推 04/13 12:54
89F:→ superpandal: json归类为application也没问题 本身就不只是文字 04/13 18:44
90F:推 jessie83: cool 04/13 22:17
91F:推 KUMAMOTO: application/json 是这样来的啊 04/14 13:00
92F:推 williewillie: 感谢分享 04/14 16:37
93F:推 papple23g: 喜欢json官网上的流线图 简单明了 04/14 21:37
94F:推 ssszl: 感谢翻译 长知识了 04/15 12:11
95F:推 Lhmstu: 感谢分享 04/15 12:15
96F:推 chenteddy: 感谢分享 04/16 10:12
97F:推 happy8155: 好有趣 04/17 22:17
98F:推 zerofinal: 推 04/21 18:44
99F:推 voizyc: 推 04/25 02:36
100F:推 foxtrot: 推 04/28 15:24
101F:推 jay123peter: 推 05/11 18:36
102F:推 vvind: 推 05/20 23:21







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP