顯示廣告
隱藏 ✕
※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2023-04-14 22:19:02
看板 Soft_Job
作者 eliang ()
標題 [心得] 軟體考古系列:JSON 的故事
時間 Tue Apr 11 10:45:11 2023


專門講軟體開發故事的 Podcast 節目 CoRecursive 最近訪問了 JSON 之父 —
Douglas Crockford(以下簡稱 Doug),說他是怎麼想出 JSON 這個現在大家都在用的資
料格式,以及他是怎麼推廣它的。

我覺得這段歷史很有趣,就順手整理一下,翻譯成中文,希望可以娛樂到一些人 :)

本文也同時刊載在 https://hackmd.io/@brachiosoft/json
JSON 的故事 - HackMD
[圖]
# JSON 的故事 專門講軟體開發故事的 Podcast 節目 [CoRecursive]( ...

 

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 (臺灣)
※ 作者: eliang 2023-04-11 10:45:11
※ 文章代碼(AID): #1aDCcww5 (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1681181114.A.E85.html
sssyoyo: cool 謝謝你的分享,很有趣的小故事1F 04/11 11:02
masturbateee: 推 感謝分享2F 04/11 11:29
DrizztMon: 推3F 04/11 11:37
zxc8787: 推,感謝分享4F 04/11 11:41
iitze: 推,感謝分享很有趣5F 04/11 11:41
ggBird: 好文6F 04/11 11:43
vencil: 推7F 04/11 12:15
y2468101216: 推8F 04/11 12:18
gpctv: 好有趣,好好奇那個用java寫的虛擬宇宙9F 04/11 12:29
ts00328685: 讚讚10F 04/11 12:38
justinbear: 推11F 04/11 12:39
wei115: json真的比xml好看很多12F 04/11 12:42
cjtv: 原來application/json是這樣來的13F 04/11 12:49
jackblack: 推14F 04/11 12:55
beryah: 推推推15F 04/11 12:56
OhGNM: 好看16F 04/11 13:14
greengg: 推 感謝你17F 04/11 13:30
nelley: 推18F 04/11 13:36
bchen1222: 推19F 04/11 13:37
kyrie77: 推20F 04/11 13:43
leolarrel: 我反而拿來練英聽21F 04/11 13:59
jecint1707: 有趣22F 04/11 14:45
ppc: 好棒23F 04/11 15:04
joe120106: 推24F 04/11 15:16
joe120106: 按錯了QQ
TAKADO: 原來JSON的type後面有這個故事26F 04/11 15:19
uglykidjoe: 沒想到這麼辛苦,真的有信仰27F 04/11 16:04
ohsuoh: 推28F 04/11 16:53
s06yji3: 感謝分享29F 04/11 17:28
Beersheep: 好酷30F 04/11 17:45
FrAnKw: 有趣故事31F 04/11 18:09
smartree: 好有趣的故事32F 04/11 18:54
jej: 原po應該有年紀了 這種老故事....33F 04/11 19:48
xam: 這個分享讚34F 04/11 19:59
lee457088: 長知識35F 04/11 20:08
art1: 終於懂了要用 application/json 的原因 XD36F 04/11 20:12
zegas: 推37F 04/11 20:34
yyyyyyyv: 推推38F 04/11 21:01
lej: 感謝分享39F 04/11 21:45
hobnob: 推,謝謝分享40F 04/11 21:55
vivapinata: 推推41F 04/11 22:04
Darkmist: 很有趣 翻譯也很平易近人42F 04/11 22:04
holebro: 好聽43F 04/11 22:22
SirAirPower: 感謝分享44F 04/11 23:22
tr6271bf: 好有趣的故事;更正:是歷史記錄45F 04/11 23:26
othree: 不過其實還是有 RFC 4627,不知道他說的是不是要進 STD46F 04/11 23:37
Dolwa31: 好文推推47F 04/11 23:54
FY4: 推48F 04/11 23:58
hiwight: 推49F 04/12 00:03
atteleitus: 推50F 04/12 01:03
mirror0227: 好文51F 04/12 02:22
YYYero: 有趣52F 04/12 02:45
dyjo4949: 好酷的故事XD53F 04/12 03:23
justaID: 有趣推54F 04/12 05:21
justaID: cd中.....等等補推
justaID: 補推,個人很喜歡 json,比 xml 簡潔易讀,用在設定檔的
justaID: 話比 yaml 結構分明,不會不小心多個空白或縮排就壞掉(
justaID: 不過這個大概就見仁見智,prettify後層次太多的話 json
justaID: 一堆花括號也是滿礙眼)
joe120106: 補推60F 04/12 07:47
bheegrl: 推61F 04/12 08:55
v86861062: 推推62F 04/12 08:57
aassdd926: 有趣推63F 04/12 09:24
black2575: 我們把 LiveScript 改名成 JavaScript64F 04/12 11:30
black2575: 告訴大家 JavaScript 只是
black2575: Java的一部分,這樣不就好了?
black2575: - 乾 原來就他們在搞
kyukyu: 謝謝分享68F 04/12 12:00
zxcasdjason1: 很有趣69F 04/12 12:13
wulouise: 上頭的人不懂啦,然後這20年每個人乍看都誤會70F 04/12 12:30
YorkLai: 堆!71F 04/12 14:04
Kagami3421: 推72F 04/12 14:45
siriusu: 感謝翻譯73F 04/12 15:02
xaxus516: 推 好酷的小故事74F 04/12 20:11
jmarr: 感謝,增廣見聞75F 04/12 20:20
akakbest: 感謝分享76F 04/12 20:48
per: d(`・∀・)b77F 04/12 21:19
hyper1990: 感謝分享78F 04/12 21:31
johnbill: 推79F 04/12 21:38
maybeilikeu: 推推 有趣80F 04/12 22:30
wk415937: 推81F 04/12 22:44
roader28: 推82F 04/13 00:02
timofEE: 有趣83F 04/13 00:45
yuhsiC: 推84F 04/13 01:45
believe91326: 感謝85F 04/13 01:58
supertalker: 我看完了,不錯86F 04/13 10:24
maoqq0405: 推推 感謝87F 04/13 11:38
CindyK: 推推88F 04/13 12:54
superpandal: json歸類為application也沒問題  本身就不只是文字89F 04/13 18:44
jessie83: cool90F 04/13 22:17
KUMAMOTO: application/json 是這樣來的啊91F 04/14 13:00
williewillie: 感謝分享92F 04/14 16:37
papple23g: 喜歡json官網上的流線圖 簡單明瞭93F 04/14 21:37

--
※ 看板: Soft_Job 文章推薦值: 0 目前人氣: 0 累積人氣: 25 
作者 eliang 的最新發文:
  • +55 [心得] 軟體考古系列:Git - Soft_Job 板
    作者: 36.231.121.115 (台灣) 2024-07-01 22:00:42
    Linus Torvalds 曾寫了一本書提到,當初創造 Linux 只是因為好玩,卻意外掀起一場 革命。Git 是 Linus 的第二代表作,同樣也是意外的革命,是現在軟體工程師的標配, 但至少對 …
    62F 56推 1噓
  • +36 [心得] 軟體考古系列 毀滅戰士們:草創之初 - Soft_Job 板
    作者: 118.160.12.165 (台灣) 2023-07-12 00:16:25
    如果 Facebook 創立的故事可以拍成《社群網戰》,好萊塢遲早會將 David Kushner 寫的《Masters of Doom》拍成電影 圖文並茂版: 臉書專頁: 實際上,在 2019 年 …
    50F 37推 1噓
  • +103 [心得] 軟體考古系列:Redis - Soft_Job 板
    作者: 118.160.20.244 (台灣) 2023-05-09 12:31:27
    我一直覺得 Redis 在資料庫世界裡獨具一格。其他多數資料庫的中心思想不是表格就 是文件,但在 Redis 裡,你直接與鏈結串列(linked list)和雜湊表(hash table) 等低階資 …
    112F 103推
  • +22 [閒聊] 用ChatGPT推測Satoshi是誰的可行性 - DigiCurrency 板
    作者: 36.231.86.251 (台灣) 2023-04-14 10:24:17
    Unmasking Satoshi Nakamoto: 這個兩年前的影片作者花了很多時間爬文、研究,最後得出結論是 Satoshi 是 Adam Back。 先姑且不論我們相不相信這個影片的論述,我 …
    47F 24推 2噓
  • +79 [心得] 軟體考古系列:JSON 的故事 - Soft_Job 板
    作者: 36.231.69.243 (台灣) 2023-04-11 10:45:11
    專門講軟體開發故事的 Podcast 節目 CoRecursive 最近訪問了 JSON 之父 — Douglas Crockford(以下簡稱 Doug),說他是怎麼想出 JSON 這個現在大家都 …
    93F 80推 1噓
點此顯示更多發文記錄
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇