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/m.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燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP