※ 本文為 Knuckles 轉寄自 ptt.cc 更新時間: 2023-04-14 22:19:02
看板 Soft_Job
作者 標題 [心得] 軟體考古系列:JSON 的故事
時間 Tue Apr 11 10:45:11 2023
專門講軟體開發故事的 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
的一部分,這樣不就好了?」昇陽同意。於是他們辦一場記者會向全世界撒謊,造就了
玩笑建議:「我們把 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 可以做到那種效果。
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)
去募款。
頁式應用程式(single-page application)的可行性,做一個 proof-of-concept (POC)
去募款。
當時是 XML 的天下。所有大公司,像是微軟、HP、IBM、昇陽都是 XML 的擁護者。XML
功能齊全但很複雜,Doug 完全不想碰它,他想到可以利用 JavaScript 本身的語法來交
換資料,因為瀏覽器本來就可以讀 JavaScript,他們就不用再浪費時間寫 parser。
功能齊全但很複雜,Doug 完全不想碰它,他想到可以利用 JavaScript 本身的語法來交
換資料,因為瀏覽器本來就可以讀 JavaScript,他們就不用再浪費時間寫 parser。
他們拿著這個 POC 去募款,但當時 dot com 泡沫才破滅,他們根本拿不到什麼錢。例如
投資人會說「啊,抱歉,我們已經在用 XML 了,很難再改用其他技術」、「我們只用業
界標準」,Doug 回答:「這是標準啊,這是 ECMAScript 裡的標準」,但他們只搖頭說
:「這不算標準」。
投資人會說「啊,抱歉,我們已經在用 XML 了,很難再改用其他技術」、「我們只用業
界標準」,Doug 回答:「這是標準啊,這是 ECMAScript 裡的標準」,但他們只搖頭說
:「這不算標準」。
於是 Doug 決定要讓這個東西變成標準。首先,要幫它取一個名字。他們最先想到
JSML - JavaScript Message Language,但昇陽當時已經有東西叫 JSML 了(好險)。
然後他們想了一會,JavaScript Object Notation - JSON 。Doug 註冊了 json.org 網
域名,放上一個簡單的網頁,JSON 就這樣誔生了。
然後他們想了一會,JavaScript Object Notation - JSON 。Doug 註冊了 json.org 網
域名,放上一個簡單的網頁,JSON 就這樣誔生了。
Doug 的公司 State Software 很快因為沒錢就收掉了。雖然 json.org 留下來了,但沒
人在乎。Doug 好似朝著網路大海丟了一封瓶中信,等待對的時機點被人打開。
2004 年 Gmail 出現了,突然間大家都在討論 AJAX,一堆原本沒在做瀏覽器應用的人都
跑來做瀏覽器應用。AJAX 裡的 X 本來是代表 XML,但一般人進來看到 XML 就會覺得太
複雜,然後轉頭採用 JSON。於是 JSON 開始起飛。
跑來做瀏覽器應用。AJAX 裡的 X 本來是代表 XML,但一般人進來看到 XML 就會覺得太
複雜,然後轉頭採用 JSON。於是 JSON 開始起飛。
## 雅虎與 YUI
在前同事的介紹下,Doug 去了雅虎工作,當時雅虎還是一間很酷的公司。Doug 有一個最
棒的工作 — 他不需要負責專案,他的唯一任務是教公司的人怎麼寫 JavaScript。
JSON 成為主流的同時,Doug 在推廣如何正確使用 JavaScript,例如:每行結尾都要有
分號、不要用 eval、用 JSLint 等。Doug 成為了 JavaScript 的傳教士。
當時他推廣的還有一樣東西:YUI,一個雅虎的開源專案。但推廣過程也遇到相同的阻礙,
有人會說「我們應該要用標準的東西」。Doug 又使出同一招:「好,那我再把它變成標
準,大家才會用。」
Doug 開始教全世界正確使用 JavaScript,同時也要大家用 YUI,因為只要外面的世界開
始用 YUI,公司內部也會 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。這不是什麼大問題,只是有點醜。」
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 的正式標準。
開 IETF,去找了 ECMA(制定 JavaScript 語言標準的組織)為 JSON 再制定標準。ECMA
的人友善多了,最終 ECMA 404 成為 JSON 的正式標準。
## 建言
不要太執著於你現在開發軟體的方式,要對新技術抱執接納的態度。Doug 本來是 OOP 的
死忠信奉者,但他後來改變想法。現在他甚至不再推廣 JavaScript,他在推廣下一個新
語言。這個新語言要有分散的特性。現在程式都是在多台機器上跑,主流語言像是 Java
和 C++ 原先是設計在一台機器上跑,但現在的世界不一樣了。Doug 覺得下一個新東西是
actor。Actor 的概念已經在 Erlang 行之有年,用在並行處理上。
死忠信奉者,但他後來改變想法。現在他甚至不再推廣 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
推 : cool 謝謝你的分享,很有趣的小故事1F 04/11 11:02
推 : 推 感謝分享2F 04/11 11:29
推 : 推3F 04/11 11:37
推 : 推,感謝分享4F 04/11 11:41
推 : 推,感謝分享很有趣5F 04/11 11:41
推 : 好文6F 04/11 11:43
推 : 推7F 04/11 12:15
推 : 推8F 04/11 12:18
→ : 好有趣,好好奇那個用java寫的虛擬宇宙9F 04/11 12:29
推 : 讚讚10F 04/11 12:38
推 : 推11F 04/11 12:39
推 : json真的比xml好看很多12F 04/11 12:42
推 : 原來application/json是這樣來的13F 04/11 12:49
推 : 推14F 04/11 12:55
推 : 推推推15F 04/11 12:56
推 : 好看16F 04/11 13:14
推 : 推 感謝你17F 04/11 13:30
推 : 推18F 04/11 13:36
推 : 推19F 04/11 13:37
推 : 推20F 04/11 13:43
→ : 我反而拿來練英聽21F 04/11 13:59
推 : 有趣22F 04/11 14:45
推 : 好棒23F 04/11 15:04
噓 : 推24F 04/11 15:16
→ : 按錯了QQ
→ : 按錯了QQ
推 : 原來JSON的type後面有這個故事26F 04/11 15:19
推 : 沒想到這麼辛苦,真的有信仰27F 04/11 16:04
推 : 推28F 04/11 16:53
推 : 感謝分享29F 04/11 17:28
推 : 好酷30F 04/11 17:45
推 : 有趣故事31F 04/11 18:09
推 : 好有趣的故事32F 04/11 18:54
推 : 原po應該有年紀了 這種老故事....33F 04/11 19:48
推 : 這個分享讚34F 04/11 19:59
推 : 長知識35F 04/11 20:08
推 : 終於懂了要用 application/json 的原因 XD36F 04/11 20:12
推 : 推37F 04/11 20:34
推 : 推推38F 04/11 21:01
推 : 感謝分享39F 04/11 21:45
推 : 推,謝謝分享40F 04/11 21:55
推 : 推推41F 04/11 22:04
推 : 很有趣 翻譯也很平易近人42F 04/11 22:04
推 : 好聽43F 04/11 22:22
推 : 感謝分享44F 04/11 23:22
推 : 好有趣的故事;更正:是歷史記錄45F 04/11 23:26
推 : 不過其實還是有 RFC 4627,不知道他說的是不是要進 STD46F 04/11 23:37
推 : 好文推推47F 04/11 23:54
推 : 推48F 04/11 23:58
推 : 推49F 04/12 00:03
推 : 推50F 04/12 01:03
推 : 好文51F 04/12 02:22
推 : 有趣52F 04/12 02:45
推 : 好酷的故事XD53F 04/12 03:23
→ : 有趣推54F 04/12 05:21
→ : cd中.....等等補推
推 : 補推,個人很喜歡 json,比 xml 簡潔易讀,用在設定檔的
→ : 話比 yaml 結構分明,不會不小心多個空白或縮排就壞掉(
→ : 不過這個大概就見仁見智,prettify後層次太多的話 json
→ : 一堆花括號也是滿礙眼)
→ : cd中.....等等補推
推 : 補推,個人很喜歡 json,比 xml 簡潔易讀,用在設定檔的
→ : 話比 yaml 結構分明,不會不小心多個空白或縮排就壞掉(
→ : 不過這個大概就見仁見智,prettify後層次太多的話 json
→ : 一堆花括號也是滿礙眼)
推 : 補推60F 04/12 07:47
推 : 推61F 04/12 08:55
推 : 推推62F 04/12 08:57
推 : 有趣推63F 04/12 09:24
推 : 我們把 LiveScript 改名成 JavaScript64F 04/12 11:30
→ : 告訴大家 JavaScript 只是
→ : Java的一部分,這樣不就好了?
→ : - 乾 原來就他們在搞
→ : 告訴大家 JavaScript 只是
→ : Java的一部分,這樣不就好了?
→ : - 乾 原來就他們在搞
推 : 謝謝分享68F 04/12 12:00
推 : 很有趣69F 04/12 12:13
推 : 上頭的人不懂啦,然後這20年每個人乍看都誤會70F 04/12 12:30
推 : 堆!71F 04/12 14:04
推 : 推72F 04/12 14:45
推 : 感謝翻譯73F 04/12 15:02
推 : 推 好酷的小故事74F 04/12 20:11
推 : 感謝,增廣見聞75F 04/12 20:20
推 : 感謝分享76F 04/12 20:48
推 : d(`・∀・)b77F 04/12 21:19
推 : 感謝分享78F 04/12 21:31
推 : 推79F 04/12 21:38
推 : 推推 有趣80F 04/12 22:30
推 : 推81F 04/12 22:44
推 : 推82F 04/13 00:02
推 : 有趣83F 04/13 00:45
推 : 推84F 04/13 01:45
推 : 感謝85F 04/13 01:58
推 : 我看完了,不錯86F 04/13 10:24
推 : 推推 感謝87F 04/13 11:38
推 : 推推88F 04/13 12:54
→ : json歸類為application也沒問題 本身就不只是文字89F 04/13 18:44
推 : cool90F 04/13 22:17
推 : application/json 是這樣來的啊91F 04/14 13:00
推 : 感謝分享92F 04/14 16:37
推 : 喜歡json官網上的流線圖 簡單明瞭93F 04/14 21:37
--
※ 看板: Soft_Job 文章推薦值: 0 目前人氣: 0 累積人氣: 25
作者 eliang 的最新發文:
- Linus Torvalds 曾寫了一本書提到,當初創造 Linux 只是因為好玩,卻意外掀起一場 革命。Git 是 Linus 的第二代表作,同樣也是意外的革命,是現在軟體工程師的標配, 但至少對 …62F 56推 1噓
- 如果 Facebook 創立的故事可以拍成《社群網戰》,好萊塢遲早會將 David Kushner 寫的《Masters of Doom》拍成電影 圖文並茂版: 臉書專頁: 實際上,在 2019 年 …50F 37推 1噓
- 我一直覺得 Redis 在資料庫世界裡獨具一格。其他多數資料庫的中心思想不是表格就 是文件,但在 Redis 裡,你直接與鏈結串列(linked list)和雜湊表(hash table) 等低階資 …112F 103推
- Unmasking Satoshi Nakamoto: 這個兩年前的影片作者花了很多時間爬文、研究,最後得出結論是 Satoshi 是 Adam Back。 先姑且不論我們相不相信這個影片的論述,我 …47F 24推 2噓
- 專門講軟體開發故事的 Podcast 節目 CoRecursive 最近訪問了 JSON 之父 — Douglas Crockford(以下簡稱 Doug),說他是怎麼想出 JSON 這個現在大家都 …93F 80推 1噓
點此顯示更多發文記錄
→
guest
回列表(←)
分享