深入理解Atwood定律

老碼農發表於2013-09-22

導讀:在Jeff Atwood發表於2007年的這篇部落格裡,他提出了著名的“Atwood定律”,即”任何能夠用JavaScript實現的應用系統,最終都必將用JavaScript實現。“ (Any application that can be written in JavaScript, will eventually be written in JavaScript.)那麼,這位大牛為何如此推崇JavaScript呢?如何真正理解他提出的這個定律?這就必須完整地看懂他的博文才行。以下是本人在學習過程中閱讀的主要內容摘要:

 

在他的這篇博文中,他首先提到了另外一位更重量級的大神,網際網路之父Tim Berners-Lee 在他的著作 《最小功效原則》中的一段話:

 

“在過去的40年中,電腦科學一直在開發儘可能功能強大的語言。現在我們必須領會這樣的道理:要選擇功能最不強的解決方案而不是最強的。語言的功效越小,對於儲存在該語言中的資料你能做的事情就越多。如果你把程式寫成簡單的描述性形式,任何人都可以編寫一個程式來分析它。比如,如果一個包含了天氣資料的網頁,裡面使用RDF 格式來描述這些資料,使用者就可以把它當做一個表格來查詢,也許求它的平均值,或者用它繪圖,或把它和其他資訊結合在一起進行推理分析。另一個極端情況是,這些天氣資訊是用漂亮的Java applet描繪出來的。雖然這樣可能做出很酷的使用者介面,但它完全無法用於分析。找到這個頁面的搜尋引擎會壓根不知道這些資料是什麼或者是幹什麼用的。唯一能發現Java applet的含義的方式就是讓它在一個人面前執行起來。”

 

說實話,本人看完這一段有些困惑:JavaScript和Java、PHP這些語言相比,對於搜尋引擎對資料進行提取和分析方面並不見得有什麼本質的優勢嘛。想了半天還是似懂非懂:這篇文章寫於1998年,當時還沒有Web 2.0的概念,網站的功能主要是釋出公開訪問的內容,Java applet都算是“很酷”的使用者介面了,所以從邏輯上Berners-Lee 關注搜尋引擎的自動分析是自然的,而且他的例子裡並沒有推崇JavaScript,舉的例子是更為描述性的語言,比如HTML,對於資料提取的確有其優勢,而JavaScript當時作為純前端頁面效果的語言,只是配合HTML使用。但是隨著Facebook這樣的Web 2.0平臺出現,使用者貢獻的內容成為網際網路資訊的主要來源,很多動態資料已經無法被搜尋引擎自動搜尋到,他的上述分析似乎就有點過時了?也許是因為我認識的高度不夠吧。不管怎麼樣,他的文章中對於程式語言選擇的最小效能原則依然是成立的,這也是Atwood提出其定律的理論基礎。

 

Jeff Atwood在部落格中引用完上述文章後說:“這個思想後來被編入了正式的W3C文件,最小功效規則。我提出了一個這個規則的推論,它是程式設計師文化最近的流行元素 之一,我稱之為Atwood定律:任何能夠用JavaScript實現的應用系統,最終都必將用JavaScript實現。”

 

為了理解這段邏輯,就需要再閱讀這篇W3C文件。它比較了從最基本的描述性語言(例如HTML和結構化資料庫)到一些圖靈完備語言(如C和JavaScript)等在自動分析資料難易程度的不同,然後分析說:“在釋出資訊的時候,有很多關於語言功效和複雜度的維度需要考慮。比如,語法簡單明瞭的語言會比語法結構複雜的語言更易於分析。如果一種語言把簡單計算包裝在不必要的機制(比如物件建立或者執行緒管理)中,也會類似地阻礙資訊提取。” 此外文章還提出了輕量級語言開發的功能更穩定可靠:既然用它編寫的程式碼更易於分析,也就更容易發現其中容易出錯的地方。最後文章提出了一個實踐原則:“在所有適合於在網際網路上表達資訊、約束條件或程式邏輯的程式語言中,選擇功能最不強的一個來使用。

 

好了,看到這裡意思基本上清楚了,語言的語法結構越簡單,資料提取和分析就越容易,對於開發網際網路應用就越理想。如果物件建立和執行緒管理都是“不必要的機制”,那麼作為一種基於原型而不是類的物件導向的語言,JavaScript就是完美的:它沒有類的概念,但所有東西都是物件,無需建立過程就能存在,而且它是單執行緒的。同時,JavaScript也走向了後端,Node.js之類的框架和MongoDB之類的NoSQL資料庫讓Web開發實現了JavaScript的前後端通吃。

 

這應該就是Jeff Atwood定律的由來:JavaScript既能獨立完成所有網際網路應用所需的功能開發,同時又是主流程式語言中最為輕量級的。我想,這個邏輯應該就是Atwood認為JavaScript將成為統治未來網際網路世界的程式語言的根據吧。另外我覺得還有一個很重要的事實,那就是JavaScript已經獲得了所有瀏覽器的支援,幾乎所有的網站都已經在使用它,再加上JSON標準,相比其他語言,它已經佔據了有利地形。

 

他在這篇部落格的最後還說:”如果你喜歡那篇文章,我推薦你再看《Berners-Lee的架構和哲學精髓》網頁中的其他部分。雖然裡面的內容對於網際網路時代是比較老了,裡面只有兩篇是去年寫的,但它還是包含了發明網際網路的那個傢伙的一些教誨和洞見,它們經歷了時間的考驗卻仍然閃著金光。”

 

最後我必須感慨一下:大牛的一些名言聽起來似是而非,不經過細緻的閱讀是很難真正理解其邏輯的,而且即使細緻閱讀了,可能因為思維方式和實踐機會的限制,完全理解其精髓也是很難的,在這樣低的基礎上再想有什麼創新就更難了。這大概也是中關村的挨踢水平遠遠低於矽谷,中國的網際網路公司大都只能依賴山寨的方式生存的原因吧。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

深入理解Atwood定律 深入理解Atwood定律