[心得] 軟體考古系列:JSON 的故事
專門講軟體開發故事的 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 是完全免費的,這大概也是原因之一。
--
cool 謝謝你的分享,很有趣的小故事
推 感謝分享
推
推,感謝分享
推,感謝分享很有趣
好文
推
推
好有趣,好好奇那個用java寫的虛擬宇宙
讚讚
推
json真的比xml好看很多
原來application/json是這樣來的
推
推推推
好看
推 感謝你
推
推
推
我反而拿來練英聽
有趣
好棒
推
按錯了QQ
原來JSON的type後面有這個故事
沒想到這麼辛苦,真的有信仰
推
感謝分享
好酷
有趣故事
好有趣的故事
原po應該有年紀了 這種老故事....
這個分享讚
長知識
終於懂了要用 application/json 的原因 XD
推
推推
感謝分享
推,謝謝分享
推推
很有趣 翻譯也很平易近人
好聽
感謝分享
好有趣的故事;更正:是歷史記錄
不過其實還是有 RFC 4627,不知道他說的是不是要進 STD
好文推推
推
推
推
好文
有趣
好酷的故事XD
有趣推
cd中.....等等補推
補推,個人很喜歡 json,比 xml 簡潔易讀,用在設定檔的
話比 yaml 結構分明,不會不小心多個空白或縮排就壞掉(
不過這個大概就見仁見智,prettify後層次太多的話 json
一堆花括號也是滿礙眼)
補推
推
推推
有趣推
我們把 LiveScript 改名成 JavaScript
告訴大家 JavaScript 只是
Java的一部分,這樣不就好了?
- 乾 原來就他們在搞
謝謝分享
很有趣
上頭的人不懂啦,然後這20年每個人乍看都誤會
堆!
推
感謝翻譯
推 好酷的小故事
感謝,增廣見聞
感謝分享
d(`・∀・)b
感謝分享
推
推推 有趣
推
推
有趣
推
感謝
我看完了,不錯
推推 感謝
推推
json歸類為application也沒問題 本身就不只是文字
cool
application/json 是這樣來的啊
感謝分享
喜歡json官網上的流線圖 簡單明瞭
48
[心得] 工程師年齡歧視的真象原文刊於: # 工程師年齡歧視的真象 大齡工程師面對的技術挑戰,是我最近碰上的一堵高牆,真的等撞上後才知道,並不 是那麼容易跨過,且願意去跨過的。 以我為例,我的工程師生涯是隨著 Java 生態系一起成長的,十五年來 Java 生態系44
[請益] 學 C++ 能從事那個領域的工作?從網路上的資訊得知 如果是從事韌體開發 則用的都是C 如果是從事web開發 則用的都是 Python, Java, C#, Javascript, CSS 之類的語言 那麼 C++的發展空間在那裡?25
[問卦] 欸 為什麼我資料都成功丟回前端了 秀不出*** 幹你媽的我找到問題了 另外一個要丟回來的資料裡面 有幾個欄位是NaN *** *** 就算我api response那邊下了 default=str 也是不行 ajax看到NaN就不吃 *** *** error以後還是要寫 媽的這弱智問題卡一上午*** 幹你媽的 javascript到底什麼鬼啦 postman測試ok10
[問卦] java 跟 javascript 不一樣!??????如提 肥肥我一直以為一樣欸 剛剛被男學妹嗆才知道是不一樣的東西 阿java跟javascript插在哪裡? script嗎????11
[問卦] 失業瘦宅該學java還是javascript?如題 瘦宅失業每天在家滾 妹妹說 不如她幫我問問認識的有沒有人要回收 但是可能要會寫java或javascript5
Re: [請益] 比物件導向更先進的程式設計思想?JavaScript 是一個基於原型(Prototype-based)的程式語言 在本質上很難將它歸類為程序導向語言,或是物件導向語言 類別: JavaScript 中沒有類別(Class)的概念,但是有物件(object)的概念 而這個物件概念的物件,則是以GUI的 Widget為主8
[麥書] Macbook Pro 13' M1 開發人員的軟體實際測試剛剛看到一個已拿到Macbook Pro 13' M1的開發者 幫開發者測試了各種IDE實際使用,畫面一鏡到底只有加速,沒有額外剪輯 他的頻道有測試的IDE、工具及框架如下: ---------------------------------------5
Re: [請益] 轉行工程師課程選擇詢問建議先給你一點鼓勵好了 你好 本魯虛長你幾歲 今年34 小時候不愛讀書 大學念了國立文組還被退學 學歷只有高中畢業 轉職之前是貨車司機 跟什麼資訊產業八竿子打不著關係 32歲那年報名了中壢資策會JAVA班 特訓半年之後現在也是有個還可以的工作5
Re: [請益] 轉職但無法入行,另一方面也是求職文。講難聽點, 你的技能沒有足以應付的工作, 也看不出潛力, 自然沒公司想用你。 ※ 引述《unendless314 (Sonata)》之銘言:3
Fw: [請益] Udemy上關於React的課程作者: state9981 (斯坦特9981) 看板: Soft_Job 標題: [請益] Udemy上關於React的課程 時間: Tue Aug 3 19:50:09 2021 大家好,我以前在大學只學過Java,最近學完下面這堂有關Javascript的課程: The Complete JavaScript Course 2021: From Zero to Expert!