本文以第一人稱撰寫,原文來自《雷鋒網》專欄作家威靈頓
我從事軟體開發的相關工作已經有 15 年了。目前的工作主要集中於 Web 和移動應用方面。在這麼多年裡,我對 JavaScript 的態度可能比較能代表一大群工程師的看法:從一開始對 JS 的不屑一顧到最後驚奇它的表現和潛力。
曾經的 JavaScript 像玩具一樣
在 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 中糟粕的比重超出了預期。」(注:Douglas Crockford,JavaScript 開發社區最知名的權威,是 JSON 、JSLint、JSMin 和 ADSafe 之父,著有《JavaScript: The Good Parts》。)
連 Brendan Eich(JavaScript 的創造者)自己都說:「與其說我愛它,不如說我恨它。它是 C 語言和 Self 語言一夜情的產物。十八世紀英國文學家約翰遜博士說得好:『它的優秀之處並非原創,它的原創之處並不優秀。』(the part that is good is not original, and the part that is original is not good.)」
但是,似乎是在冥冥之中註定,JavaScript 在一開始就抓到了未來編程語言的方向:函數式編程。
「JavaScript 設計的最出色的就是它的函數的實現。它近乎接近於完美。…… 函數在 javascript 中是頂級對象,它是第一個成為主流的 Lambada 語言,它是披著 C 外衣的 Lisp。 」
—— Douglas Crockford
讀過《駭客與畫家:矽谷創業之父 Paul Graham 文集》(主要介紹駭客即優秀工程師的愛好和動機,討論駭客成長、駭客對世界的貢獻以及程式語言和駭客工作方法等話題)的人,都會記得作者的預言:Lisp 才是語言的終極趨向。(注:LISP 源自列表處理 LISt Processing 的縮寫,由來自麻省理工學院的人工智能研究先驅 John McCarthy 在 1958 年基於λ演算所創造,是一種通用高級計算機程式語言,長期以來壟斷人工智慧領域的應用,也是第一個函數式程式設計語言。)
矽谷創業之父 Paul Graham
函數式編程的流行之勢
函數式編程並不是新發明,它的歷史甚至比一些主流語言還早。因為性能和實現等問題,一直飽受冷落。而如今,計算機的硬體性能大大提高,改變了很多事物。原本不夠經濟的,變得可行;原本不夠好的,在新條件下變得不錯。鑑於函數式編程的優良特性和強大能力,它的流行其實並不意外。「過程化 -> 面向對象 -> 函數式」的應用開發範型發展趨勢是可以預見的。
這些年,腳本語言大行其道,使用 Python/Ruby/PHP 代替原本靜態語言開發的應用比比皆是,傳統的 C/C++ 應用開始逐漸縮減到桌面應用、高性能服務器應用、驅動、系統接口等領域。因為大部分的應用的性能已經不是問題,CPU 相對過剩,I/O、網速才是瓶頸,因為人們總是更重視開發效率。而 JavaScript 因為一開始就有這樣的設計能力,把握住了技術的先機,緊隨了這股浪潮。
當然,運氣也不可或缺。世界上的編程語言至少也有個幾百種。一種語言想獲得認可並得到流行,光有好的技術設計是不夠的,它還需要位置乃至契機。
編程語言要找到適合自己應用的領域,深深的紮下根來,並以此為基地,向外伸展。這個時間,有時候需要 20 年以上。比如 PHP 專注於 Web 開發,C 對於系統開發不可缺少,Python 在科學計算、網絡編程有諸多應用。
在 2004 年,JavaScript 就得到了一次契機:Google 推出了使用 Ajax 技術的Gmail信箱,那堪比桌面的無刷體驗,引發了業界轟動和模仿浪潮。而 Ajax 的操作核心就是 JavaScript。此後,JS 在瀏覽器中的地位變得十分穩固,已經成了事實標準。在 2009 年,基於 Google 強大 V8 JS 引擎的 Node.js 出現了,它意味著 JS 向其它領域開始進軍,發揮它的語言威力。微軟當年也宣稱在服務器端可以內置支持 JavaScript,不過這完全不可比。
網絡時代的需要,JavaScript 捷足先登。瀏覽器一開始就綁定了 JS 腳本技術,這讓它取得先發優勢。當年的瀏覽器大戰後,微軟的瀏覽器佔據統治地位,IE 裡面是可以編寫 vbscript 的,但微軟在網路時代的停滯不前,讓他丟失了很多機會。
由於網絡帶來的低成本信息交互以及更低的開發、部署成本,越來越多的產品基於瀏覽器做為界面。JS 在應用開發上當仁不讓。業界出於需求,制定了幾版相關的技術標準,比如 HTML、CSS、JS 便都有了自己的位置和開發標準規範,它們相互緊密協作,融為一體。Web 應用開始侵蝕以往的桌面應用。
時間證明了 JavaScript 的價值,它並沒有被淹沒在歷史的發展裡。只要應用領域有足夠的渴求,原本有很多不足的東西也會獲得強大的推動力,把它改造的更好。
那麼我也藉用他的話來結尾吧:
My advice:always bet on JS.
留言列表