※ 本文轉寄自 ptt.cc, 文章原始頁面
看板Soft_Job
作者eliang
標題

[心得] 軟體考古系列:JSON 的故事

時間
最新2023-05-20 23:21:00
留言102則留言,92人參與討論
推噓88 ( 89112 )
專門講軟體開發故事的 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://www.ptt.cc/bbs/Soft_Job/M.1681181114.A.E85.html

102 則留言

sssyoyo, 1F
cool 謝謝你的分享,很有趣的小故事

masturbateee, 2F
推 感謝分享

DrizztMon, 3F

zxc8787, 4F
推,感謝分享

iitze, 5F
推,感謝分享很有趣

ggBird, 6F
好文

vencil, 7F

y2468101216, 8F

gpctv, 9F
好有趣,好好奇那個用java寫的虛擬宇宙

ts00328685, 10F
讚讚

justinbear, 11F

wei115, 12F
json真的比xml好看很多

cjtv, 13F
原來application/json是這樣來的

jackblack, 14F

beryah, 15F
推推推

OhGNM, 16F
好看

greengg, 17F
推 感謝你

nelley, 18F

bchen1222, 19F

kyrie77, 20F

leolarrel, 21F
我反而拿來練英聽

jecint1707, 22F
有趣

ppc, 23F
好棒

joe120106, 24F

joe120106, 25F
按錯了QQ

TAKADO, 26F
原來JSON的type後面有這個故事

uglykidjoe, 27F
沒想到這麼辛苦,真的有信仰

ohsuoh, 28F

s06yji3, 29F
感謝分享

Beersheep, 30F
好酷

FrAnKw, 31F
有趣故事

smartree, 32F
好有趣的故事

jej, 33F
原po應該有年紀了 這種老故事....

xam, 34F
這個分享讚

lee457088, 35F
長知識

art1, 36F
終於懂了要用 application/json 的原因 XD

zegas, 37F

yyyyyyyv, 38F
推推

lej, 39F
感謝分享

superpandal, 89F
json歸類為application也沒問題 本身就不只是文字

jessie83, 90F
cool

KUMAMOTO, 91F
application/json 是這樣來的啊

williewillie, 92F
感謝分享

papple23g, 93F
喜歡json官網上的流線圖 簡單明瞭

ssszl, 94F
感謝翻譯 長知識了

Lhmstu, 95F
感謝分享

chenteddy, 96F
感謝分享

happy8155, 97F
好有趣

zerofinal, 98F

voizyc, 99F

foxtrot, 100F

jay123peter, 101F

vvind, 102F