淺(tu)談(cao) Js 社區

It's not the best language in the world. Whatever your favorite style is, there's at least one better language out there that will compile down to JavaScript.

Sebastian Markbage

從現在的情況來看,JavaScript 已經成為了 Web 開發的標準化語言,是使用數量最多的編程語言之一。在表象上看,JavaScript 的社區似乎是成功的,但是事實卻不是如此。

廣義上說任何圖靈完備的標記格式我們都可以稱之為編程語言;但是一門編程語言要能夠被用來解決實際問題、形成工業化標準,單靠圖靈完備性是遠遠不夠的。比如 Java、Objective-C、Ruby,它們在一些領域中是存在著非常固定的官方標準的,例如 Android、iOS、Rails,這些標準已經細化到了代碼層面,所有的模塊、範式都已經形成了體系,程序員只要遵循這些規範就能夠非常高效的完成項目工作。這些固定的規範也使得 IDE 能夠變得非常強大、便捷,同樣的開發環境可以適用於每一個項目、每一個開發者。這大大提升了團隊開發的效率,減少了培訓維護成本,也增加了工業化的可行性。然而在 Web 前端領域,JavaScript 作為標準的語言,卻只提供了一套語法和實現的規範,也就是 ECMAScript 規範。至於該如何使用這門語言寫 Web 程序,官方卻沒有任何的標準規定,也就是說全部由開發者自由發揮。

如此一來,Web 前端領域便成為了一片“大林子”,什麼鳥都有了。首先是各種 DOM 操作的庫層出不窮,jQuery 和 MooTools 憑藉著簡單實用的語法成為了這群鳥裡面的霸主。緊接著人們想要更加完整的框架,於是一些大公司試圖創造第二個官方,形成絕對統治,於是出現了 Angular.js、Ember 等等,但是很可惜的是儘管用的人很多,但是沒有一個成為了絕對的標準。與此同時 Node.js 的興起讓 JavaScript 能夠在服務器端和桌面端橫插一腳,於是各種 Web Server 框架、Native 綁定層出不窮,到現在還沒有產生一個標準。緊接著,Web 越來越好找工作,一些原來寫桌面、系統、移動端的程序員陸陸續續加入了 Web 開發的大隊。他們可能一進來就被 Js 的設計惡心到了,於是決心發明一套新的語言代替 Js,結果就是衍生出了 CoffeeScript、TypeScript、LiveScript 這些能夠編譯成 JavaScript 的“DSL”,於是 JavaScript 變得又有面向對象,又有面向過程,還有很多半吊子的函數式思想,在很多人看來,JavaScript 漸漸淪為了類似彙編一樣的一種目標語言。直到 ECMAScript 6 的出現,官方可能實在經不住吐槽了,才漸漸地又有人開始回到官方的 ES6/7 陣營當中。再後來,一些 FP 學得比較好的程序員開始發明 Isomorphic JavaScript,欲要將服務端跟客戶端整合到一起,減少代碼的副作用,增加函數的可預測性,於是一些新穎而不穩定的框架逐漸浮出水面,比如 Meteor、React、Flux、Redux 等等。這些框架的學習曲線更加陡峭,基礎不扎實的程序員將受到成噸的打擊。於是前端開發的兩極分化逐漸顯現了出來,有能力的一小部分開發者都在玩尖端的框架,而缺乏學習能力或動力的只能在海拔比較低的區域晃悠。JavaScript 逐漸成為了各大前端巨頭進行範式開發的試驗場,欲要創造出最優雅、最高效的框架體系。但是人們沉浸在一片創新的氛圍中卻忽略了,所有這些都只是在彌補 JavaScript 的不足,無論他們怎麼努力,都是建立在一個本身就設計得非常糟糕的體系之上的,再優雅的抽象、再多的高階框架,也會存在底層實現上的缺陷。

從 JavaScript 出現到今天,已經過了 20 年了。從時間上看,這門語言也是時候退休了,人們需要一個新起之秀,把“前浪打在沙灘上”。如今一些大公司逐漸顯露出了這種意圖的苗頭,但是還沒有一個真正拿出了崛起的姿態。在不久的將來,必然會出現一種體系,能夠提供一套從語言到系統、從軟件到硬件、從模塊到框架、從數據到協議、從習慣到範式的完整的 Web 解決方案,從而取代現在大部分零散的 Web 技術。

Rix

Read more posts by this author.