原創:為什麼是javascript?

威靈頓發表於2015-09-14

我從事軟體開發的相關工作,已經有15年了。目前的工作,主要集中於Web和移動應用方面。在這麼多年裡面,我對javascript的態度可能會代表一大群程式設計師的看法:從一開始對js的不屑一顧到最後驚奇它的表現和潛力。

Javascript的創造者:Brendan Eich,在今年年5月份做了一個PPT,回顧了js語言的創造過程和這20年的發展、前景。地址在:http://brendaneich.github.io/ModernWeb.tw-2015/

enter image description here

在2000年那會兒,我也從事過一段web應用開發。開發平臺是Windows,主要使用Asp。那個時候的javascript,主要用途是檢驗頁面輸入資料是否正確,錯誤的時候,彈出個警告視窗。整個Web開發、應用環境,實際上都是十分簡陋的。Web開發者看待javascript,估計就如同玩具一般。因為它能做的,真的是十分有限。如果你能找到2000年時候的有關js的IT圖書,內容多半大同小異,充斥著告訴你怎麼用js做個什麼跑馬燈,怎麼製造煩死人的彈窗,如此這般。這些內容也進一步抑制了大家對js的期望。

後來,我轉向C/C++,因為“真正的程式設計師使用C++”。這一轉身就是很多年,我對js的印象,也就止於那點功用了。

這幾年,因為種種變化,我又轉回來了。這個時候再回顧Web開發,已經可以用天翻地覆來形容。相關的概念,層出不窮。發展出的各種技術、工具,五花八門,讓人眼花繚亂。而且更要命的是,這些知識除了基礎的幾類,大部分都十分的不穩定,迅速發展、以瘋狂的速度淘汰更新。今天還在用的工具,可能明天就有更新、更好的了。

為什麼會這樣,因為社會需要的熱點在這裡,需求推動。這個社會的生活、生產,逐漸轉移到了網站上、移動端,這就是這些領域快速發展進步的主因。

這個時候再回頭看當年的玩具語言 - javascript,早已今非昔比。它已經成長為網路時代不可或缺的前端頂樑柱。現在已經不可想象沒有js的網站,是否還能正常執行。不僅如此,它的觸角居然還深入到了後端服務,Node.js方興未艾。一些新一代的產品,如MongoDB,甚至內建了js語言支援,作為應用互動的工具。

這是很多人都無法想象到的情景,包括我在內。對此,我不得不回過頭看一下,思考javascript為什麼會擁有現在的地位?

Javascript的總體設計有亮點,這稍後再說。但問題也很多,它是作者在10天內設計出來的。因為時間倉促,很多細節未及推敲、深思熟慮就推上了市場。未經打磨,以至於充斥了漏洞、糟粕。Douglas Crockford在《Javascript語言精粹》(英文名:Javascript: The Good Parts)裡面提到:“Javascript中糟粕的比重超出了預期。”連Brendan Eich自己都說:"與其說我愛Javascript,不如說我恨它。它是C語言和Self語言一夜情的產物。十八世紀英國文學家約翰遜博士說得好:'它的優秀之處並非原創,它的原創之處並不優秀。'(the part that is good is not original, and the part that is original is not good.)"

但是,似乎是在冥冥之中註定,Javascript在一開始就抓到了未來程式語言的方向:函數語言程式設計。Crockford大叔說:”Javascript設計的最出色的就是它的函式的實現。它近乎接近於完美。...... 函式在javascript中是頂級物件,它是第一個成為主流的Lambada語言,它是披著C外衣的Lisp。”讀過那本《黑客與畫家》的人,都會記得作者的預言:Lisp才是語言的終極趨向。

這幾年,函數語言程式設計有流行的趨勢。函數語言程式設計並不是新發明,它的歷史甚至比一些主流語言還早。因為效能和實現等問題,一直飽受冷落。而如今,計算機的硬體效能大大提高,改變了很多事物。原本不夠經濟的,變得可行;原本不夠好的,在新條件下變得不錯。鑑於函數語言程式設計的優良特性和強大能力,它的流行其實並不意外。過程化->物件導向->函式式,這個應用開發範型發展趨勢是可以預見的。這些年,指令碼語言大行其道,使用Python/Ruby/PHP代替原本靜態語言開發的應用比比皆是,傳統的C/C++應用開始逐漸縮減到桌面應用、高效能伺服器應用、驅動、系統介面等領域。因為大部分的應用的效能已經不是問題,CPU相對過剩,I/O、網速才是瓶頸。人們更重視開發效率。Javascript因為一開始就有這樣的設計能力,把握住了技術的先機,緊隨了這股浪潮。

運氣也不可或缺。搞技術的會知道,世界上的程式語言至少也有個幾百種。一種語言想獲得認可並得到流行,光有好的技術設計是不夠的,它還需要位置乃至契機。它要找到適合自己應用的領域,深深的紮下根來,並以此為基地,向外伸展。這個時間,有時候需要20年以上。比如PHP專注於Web開發,C對於系統開發不可缺少,因為介面都是C。Python在科學計算、網路程式設計有諸多應用。在2004年,Javascript得到了一次契機:Google推出了使用Ajax技術的Gmail郵箱,那堪比桌面的無刷體驗,引發了業界轟動和模仿浪潮。Ajax的操作核心,就是Javascript。此後,js在瀏覽器中的地位變得十分穩固,已經成了事實標準。在2009年,基於Google強大V8 js引擎的Node.js出現了,它意味著js向其它領域開始進軍,發揮它的語言威力。微軟當年也宣稱在伺服器端可以內建支援jscript,不過這完全不可比。

網路時代的需要,Javascript捷足先登。瀏覽器一開始就繫結了js指令碼技術,這讓它取得先發優勢。當年的瀏覽器大戰後,微軟的瀏覽器佔據統治地位,IE裡面是可以編寫vbscript的,但微軟在網路時代的停滯不前,喪掉了很多機會。因為網路帶來的低成本資訊互動以及更低的開發、部署成本,越來越多的產品基於瀏覽器做為介面。js在應用開發上,當仁不讓。業界出於需求,制定了幾版相關的技術標準,比如HTML、CSS、JS,都有了自己的位置和開發標準規範。相互緊密協作,融為一體。Web應用開始侵蝕以往的桌面應用。只要應用領域有足夠的渴求,原本有很多不足的東西也會獲得強大的推動力,把它改造的更好。

最後,借用Javascript創造者的話結尾 - My advice: always bet on JS. enter image description here

本文是作者原創,同時也發表在:作者部落格

相關文章