JavaScript成功背后的四個關(guān)鍵人物!
JavaScript能如此成功,至少有四位關(guān)鍵人物:
1. JavaScript作者Brendan Eich
2. JSLint,JSON作者Douglas Crockford
3. jQuery作者John Resig
4. Node.js作者Ryan Dahl。
Brendan Eich以及JavaScript的發(fā)明過程大家已經(jīng)非常熟悉了,我們從Douglas Crockford這位JS的二號人物開始說起。
圖片
1、結(jié)盟
上世紀90年代,微軟霸權(quán)籠罩著整個世界。
這時候,兩個挑戰(zhàn)者出現(xiàn)了,一個是IT巨頭Sun,另外一個是IT新星Netscape。
Sun認為:Java程序只能看到JVM,至于底層的操作系統(tǒng)?愛誰誰。
Netscape更加激進:以后都是Web應(yīng)用程序,有瀏覽器就行了,管操作系統(tǒng)啥事兒?
“屏蔽操作系統(tǒng)”的共同目標讓兩家走到了一起,成功結(jié)盟,挑戰(zhàn)微軟霸權(quán)。
雙方“結(jié)盟”以后,第一件事就是將Java以Applet的形式在Netscape瀏覽器中運行,Applet讓Java迅速躥紅,成為了編程語言界的明星。
但是,結(jié)盟的雙方也不是親密無間的。
Netscape內(nèi)部居然也在發(fā)展一個語言叫LiveScript。
Sun:兄弟,咱們不是說好了嗎,Java是大家所需要的最后一種語言,你們家的Brendan Eich怎么又搞了一個LiveScript?。课覀冎g牢不可破的友誼已經(jīng)出現(xiàn)裂痕了!
Netscape:不不不,JVM太重量級了,Web編程需要一個腳本語言,得讓新手快速上手才行。這樣吧,我們妥協(xié),把LiveScript改名為JavaScript,可以嗎?
Sun:看起來像Java的子集,Java的縮水版,Java的弟弟,行,就這樣。
2、上世紀的元宇宙
這個時候,我們的主人公Douglas Crockford(下文就簡稱為“道哥”吧)還在創(chuàng)業(yè)中,他的公司叫做Electric Communities,就在JavaSoft的隔壁。
公司的創(chuàng)業(yè)項目非常牛逼:元宇宙。
沒錯,在90年代已經(jīng)出現(xiàn)了令人驚嘆的虛擬世界,你可以擁有一個Avartar(化身),在3D世界中到處走走,還可以瞬間從一個地方被傳送到另外一個地方,在里邊和其他人交談,買賣物品,建造東西。
圖片
也許是離Java很近的緣故,道哥選擇了Java來實現(xiàn)它。
但是這個概念實在是太超前,90年代的網(wǎng)絡(luò)速度根本支持不了,Java啟動也超級慢,“元宇宙”三分鐘時間才能把環(huán)境加載完成。
2000年左右,網(wǎng)絡(luò)泡沫破滅,元宇宙無疾而終。
為了生存,道哥接了一個特納廣播公司的一個項目:在線紙牌游戲。
特納公司要求,這個游戲一定要在瀏覽器中運行,不要讓用戶點擊安裝任何東西。
道哥環(huán)顧四周,發(fā)現(xiàn)只有JavaScript滿足這個要求。
但是公司的程序員都看不上JavaScript這門“爛”語言,不想做,道哥只好找來《JavaScript:權(quán)威指南》,親自動手。
在開發(fā)的過程,道哥逐漸發(fā)現(xiàn):JavaScript根本不是Java的子集,它是一個完全獨立的編程語言。
JavaScript的優(yōu)秀部分有著遠超Java的能力,它是第一個為我們提供Lambda的語言,這是一個了不起的突破。
一旦明白了這一點,道哥瞬間從Java的擁躉變身為JavaScript的粉絲。
他寫了一篇文章《 JavaScript,世界上最容易被誤解的編程語言》的文章,說JavaScript是披著C語言外衣的Lisp,從此走上JavaScript的布道之路。
3、JSLint
項目做完以后,道哥無事可做,開始將時間花在JavaScript新聞組上,回答各式各樣的問題。
比如“這是我寫的一些 JavaScript 代碼,我不明白為什么它有問題,誰能告訴我?”
這樣的問題回答多了,道哥干脆寫了一個神器:JSLint。這也是第一個JavaScript語法分析器
圖片
只需要把有問題的代碼放進去,一運行就能發(fā)現(xiàn)問題所在。
道哥發(fā)現(xiàn),JavaScript的某些用法更容易導(dǎo)致Bug,如果不用這些形式,錯誤更容易被發(fā)現(xiàn),程序會變得更好。
于是道哥提出了一個原則:如果在JS中有兩種方法可以做事,請選擇不太可能導(dǎo)致錯誤的一種。
比如:使用分號來消除語法歧義;
不要使用++,用+=1代替。
但是在那個“蠻荒”的年代,大家對道哥建議的原則并不感冒,甚至認為這樣的要求冒犯了他們,他們依然是我行我素,想怎么寫就怎么寫。
4、重新創(chuàng)業(yè)
閑了一段時間以后,道哥按捺內(nèi)心的沖動,打算第二次創(chuàng)業(yè)。
這一次,他和前同事成立了一個叫做State Software的公司,要用JavaScript做一個叫做“單頁應(yīng)用程序”的東西。
此時的Web應(yīng)用基本上都是用ASP,JSP實現(xiàn)頁面,用戶需要在頁面之間來回跳轉(zhuǎn),單頁應(yīng)用程序聞所未聞,可見道哥的理念是非常超前的。
單頁應(yīng)用程序必然涉及到瀏覽器的JavaScript代碼和服務(wù)器接口之間的數(shù)據(jù)交互,用什么格式呢?
當(dāng)時最熱門的是XML,微軟、IBM、Sun、HP當(dāng)時都在鼓吹Web Service,其中核心技術(shù)如SOAP、WSDL全是用XML來描述的。
但是XML是個非常笨重的格式,解析它、驗證它需要的工具可不少。
道哥發(fā)明了一種新的數(shù)據(jù)格式:JSON(JavaScript Object Notation )
道哥拿著單頁應(yīng)用程序和JSON去忽悠客戶:“看看我們的系統(tǒng)和技術(shù)棧,JSON是瀏覽器和服務(wù)器交互的最方便的方式。”
客戶:“我們都用Web Service,SOAP,XML!JSON是啥?”
道哥:“JSON可以直接把數(shù)據(jù)轉(zhuǎn)化成JavaScript,非常方便!”
客戶:“JSON是標準嗎?不是標準我可不用!”
JSON不是標準,沒有大廠的背書。
和“元宇宙”一樣,道哥的創(chuàng)業(yè)再次因為過于超前而失敗。
不過,這次創(chuàng)業(yè)留下了一個重要的遺產(chǎn):www.json.org。
5、AJAX革命
2004年,Google發(fā)布了Gmail。2005年,又發(fā)布了GMap。
異步調(diào)用,局部刷新,新奇的用戶體驗引發(fā)了全世界的關(guān)注。
用戶體驗設(shè)計師Jesse James Garrett在一篇文章中造了一個詞:AJAX(Asynchronous JavaScript and XML),來描述Gmail ,GMap背后的技術(shù)。
AJAX迅速火遍全球。
AJAX中的X就是XML,但是人們很快發(fā)現(xiàn),XML復(fù)雜的格式和語義并不是傳輸數(shù)據(jù)的最好選擇。
XML數(shù)據(jù)需要經(jīng)過復(fù)雜的解析器解析以后才能使用,而JSON格式和JavaScript對象非常接近,可以輕松轉(zhuǎn)換,并且簡單明了。
程序員開始覺醒,越來越多的人采用JSON,而RESTful風(fēng)格更是添了一把火,RESTful+JSON形成絕配,向繁雜的SOAP+XML發(fā)起猛烈攻擊。
XML的疆域不斷退縮,最后偏安于配置文件的領(lǐng)地,繼續(xù)發(fā)揮余熱。
圖片
(藍色為XML,紅色為JSON)
互聯(lián)網(wǎng)的發(fā)展就是這么神奇,巨頭們?yōu)榱丝刂疲瑸榱速嶅X,經(jīng)常是聯(lián)合制定標準,通過強大的營銷推給程序員。
這種方式能贏得一時,但不會贏得一世。
拍腦袋制定的標準,很快就會被民間的最佳實踐給打敗,扔到歷史的垃圾堆中,SOAP,EJB都是典型代表。
6、布道者
道哥在前同事的邀請下,加入了雅虎公司,成為了一名真正的JavaScript布道者。
他會去世界各地,參與各種各樣的會議,教大家如何正確地使用JavaScript,使用分號,使用JSLint,使用函數(shù)式風(fēng)格,不要用eval......
道哥向大家展示如果使用正確的話,JavaScript將是一門強大的語言。
道哥甚至拜訪了MIT,因為這里有一本著名的書《計算機程序的構(gòu)造和解釋》,用的編程語言是Scheme, 這也是JavaScript的函數(shù)式編程的設(shè)計來源,道哥去了一趟MIT,向他們描述JavaScript的工作原理和如何執(zhí)行閉包。
多年后,MIT出了《計算機程序的構(gòu)造和解釋》:JavaScript版本。
圖片
道哥寫了一本書《JavaScript語言精粹》,這本書只有薄薄的150頁,但是卻剝除了JavaScript丑陋的外衣,讓我們看到了JavaScript的真實面目:一個簡潔的、優(yōu)雅的,富有表現(xiàn)力的語言。
圖片
道哥去了ITEF(互聯(lián)網(wǎng)工程任務(wù)組),給JSON爭取應(yīng)有的名分:MIME類型經(jīng)過了一個痛苦的流程,他得到了application/json,而不是text/json。
道哥感到困惑,JSON只是個文本格式,并不是應(yīng)用程序啊,這可能是一些對JSON不滿的XML粉絲搞的鬼吧。
7、JavaScript的二號人物
當(dāng)年Brendan Eich為了向公司交差,用十天時間發(fā)明了JavaScript,倉促的設(shè)計讓它一直背負各種罵名,例如沒有命名空間,難以控制的全局變量,神奇的加號運算符,反直覺的==...... 都讓初學(xué)者掉進無數(shù)坑中。
但是JavaScript能如此流行,語言層面肯定有優(yōu)秀的成分。
道哥慧眼識珠,他從一堆丑陋的JavaScript特性中把精華撿了出來,展示給大眾,讓我們意識到JavaScript也可以如此簡潔、高效、靈活。
“JavaScript Lambda編程的精神領(lǐng)袖”,JavaScript的二號人物,道哥實至名歸!
對不住了!各位!這篇已經(jīng)太長了。
就此打住吧...... 下一篇再寫John Resig......
圖片
參考資料:https://corecursive.com/json-vs-xml-douglas-crockford/
https://www.youtube.com/watch?v=_kFrf-zafFU
如需轉(zhuǎn)載,請通過作者微信公眾號coderising獲取授權(quán)。