前言
周末愉快。你有开始接触播客了么?今日前端早读课文章由 @软件考古学家分享。
前端早读课:重视信息质量
【第2858期】React 纪录片心得 — 重新思考最佳实践
正文从这开始~~
JSON 的故事
专门讲软件开发故事的 软件 Podcast 节目 CoRecursive 最近访问了 JSON 之父 — Douglas Crockford(以下简称 Doug),说他是怎么想出 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 是完全免费的,这大概也是原因之一。
关于本文
作者:@软件考古学家
原文:https://hackmd.io/@brachiosoft/json
这期前端早读课
对你有帮助,帮” 赞 “一下,
期待下一期,帮” 在看” 一下 。