2012年3月20日 星期二

我為什麼大舉投入 JavaScript 的相關開發

Standard
和我比較熟的人,最近應該都知道,目前我專注於 JavaScript 和 Google V8 engine 的相關研究上,甚至決定從今年開始,公司營運以及技術團隊的方向,是企圖提供『最專業的 Node.js 和 JavaScript 相關服務』。(所以,如果您有需要,請聯絡我們 :-) )我非常清楚知道,有些人聽到 JavaScript 就歡天喜地,而有些人則不將他當一回事。更有多到數不清的技術人員,熟悉並使用 JavaScript 非常多年,聽到我說要提供『最專業的 JavaScript 相關服務』,會不屑一顧甚至以為我在瘋言瘋語。不過,如果你願意聽,接下來我會說明這是怎麼樣的瘋狂服務。

我不能阻止你對 JavaScript 有預設立場,因為這是無奈的歷史包袱,但請暫時放下過去成見,聽我靡靡道來。


我所遭遇的矛盾

過去,絕大多數人都只將 JavaScript 視為 Web 開發的一環,在大家的印象和認知中,JavaScript 充其量只是一個在瀏覽器中控制著 HTML DOM 的腳本語言。雖然近年來出現了 Node.js,過去微軟也支援使用者使用 JavaScript 撰寫 ASP 和系統腳本程式,但也不改這樣的看法:『JavaScript 是身處於末端的語言,與網頁、網站密不可分的東西』。所以,對許多硬底子的企業和研發人員來說,JavaScript 象徵了 Web/HTML 與不彰的效能,一種幻想的存在;而對很多 Web 開發者和前端工程師來說,JavaScript 卻是一種當今資訊產業的萬靈丹。如此天差地遠的矛盾,一直存在於這個產業界。

曾經當過 Web 開發者一段不少的時間,我承認也理解,使用 Web 技術來實作各類使用者界面(User Interface)和資料庫應用,非常容易和快速,不用考慮到太多的事。這一切要歸功於 JavaScript 和 HTML 的合作無間。所以,不時能聽到一些 Web 開發者,嘲笑作業系統程式開發者和嵌入式裝置的技術人員的辛苦,認為許多功能和特效,使用 Web 技術一下就達成了。

由於我過去也是『慣C』一族,做過很多包羅萬象的硬碰硬開發,小從一般電腦到嵌入式裝置、桌面系統到手機平版,大到各類特殊需求的系統研發,都有所涉獵。所以,對於系統資源和效能,一直有著莫明的堅持。也因為長期的磨練,深知所有的軟體開發,都在找尋與硬體拉距戰的平衡點。如何在有限的系統資源上,呈現最好的效果,一直都是我所在追求的事。

這兩種極端的軟體開發,開發效率和執行效能互為優缺點,讓兩方人馬各持己見。但因為同時身為這兩種人,產業界的矛盾,卻直接在我心中打架。


尋求同時兼顧開發效率和軟體效能的解決方案

其實一直以來,非常希望尋找一個語言,能快速又無痛的去開發各種應用,又不失效能、彈性和硬體、系統的耦合度。我知道,這無疑是天方夜談,但是若是一種語言沒辦法達成,如果用兩種語言配合,只要能達到這需求,又有何不可?

因此,Node.js 和 Libjs 這類的開放源始碼專案,給我很大的啟發。藉由輕量化,分離 JavaScript Engine 和其效能最大瓶頸 - 『瀏覽器』,使 JavaScript 非常適用於各種領域。許多非關效能的事,可以交給 JavaScript 來做,而需要效能、與硬體和系統溝通的工作,可以交給 C/C++ 來處理。兩者只要之間只要定好模組規範,即可兼顧開發效率和彈性及效能。JavaScript 因此可得到以往完全無法想像的發展空間,又能避免使用 C/C++ 辛苦的開發過程,加速程式應用的研發。

如舊文『我如何看待 NodeJS』所提及:『JavaScript 已經可以和 Python 相提並論』,基本上,我們已經可以用 JavaScript 開發各式應用,類似的模組機制已經與 Python 趨於相同,但所佔的系統資源則相對少很多,效能甚至更勝一籌。(效能可以參考國外有人做的比較:C++ vs. JavaScript vs. Java vs. Python vs. Perl vs. PHP performance benchmark)。


對於 JavaScript 來說,瀏覽器不再是束縛而是選項

或許有人說,JavaScript 若捨棄了瀏覽器即捨棄掉了最大的優點。但在我的觀點來看,瀏覽器不是被捨棄了,而只是成為了『用 JavaScript 開發使用者介面』的選項之一,若你願意,仍可繼續使用。但為了讓研發使用者介面有更輕量節省資源的選擇,前些日子,我才開發了『node-clutter』(現已改名成為 jsdx-toolkit),做為沒有瀏覽器後,使用 JavaScript 開發 OpenGL/GLES 程式和使用者介面的替代方案。


適用領域

如今的 JavaScript 已和過去不可同日而語,可以用其開發的領域幾乎已經沒有受限。
  1. Web 後端和資料庫系統應用(可取代 Python/Perl/PHP/JSP/ASP/.NET 等技術)
  2. 桌面和手機應用程式(Desktop/Mobile Application)
  3. 手機或平板系統(如取代 JVM 層,並撰寫像 Android Framework 一般的系統框架)
  4. 嵌入式系統(如同手機系統一般,除驅動程式之外的任何研發)
  5. 雲端服務(有 Scalable 的需求)


我相信的新一代 JavaScript 解決方案

這樣新一代的 JavaScript 解決方案,有數不清的優點可以一一詳列,但最重要的有三點:
  1. 使各類嵌入式系統開發更為快速,尤其與使用者介面(User Interface)相關的。
  2. 滿街數不清的 JavaScript 開發者都可以晉升成後端甚至系統工程師, 不再只是末端應用的開發人員。
  3. 統一前後端的開發經驗,讓研發人員在這雲端時代,可以更專注於應用的設計。
同時也打破了過去業界中存在的矛盾與迷思:
  1. JavaScript 和瀏覽器的肥大是共存。
  2. JavaScript 除了用來做 Web 和資料庫系統相關應用之外,不能變成產品化的軟體。
換言之:
  1. 對企業來說:加速開發,省錢,再省錢。
  2. 對傳統 Web 開發者:更有發展空間,更有實際價值。
  3. 對硬底子開發者:讓自己的底層成果能更快被看的見。

那麼,瘋狂服務?

既然  JavaScript 的發展是大勢所趨,未來我們會延續過去的各種經驗,再全面引入 JavaScript,做為自身所有軟體開發的基礎,以 JavaScript 整合並加速產品開發的效率和品質,凡舉雲端服務、Web 、資料庫應用、桌面和手機應用程式、作業系統和嵌入式系統,都是我們將提供的專業服務範圍。

目前,我們已經對 Node.js 和 V8 Engine 有相當程度的瞭解和深入。除了著墨在雲端相關技術的發展,也有不少在作業系統底層和嵌入式裝置,引入 JavaScript 軟體架構的開發經驗。身為 Open Source 開發者,當然也會不定期貢獻成果給上游或釋出相關原始程式碼。

嚴格來說,成為『JavaScript 軟體平台的專家』才是我們的目標,所以我們才說,希望提供『國內最專業的 JavaScript 相關服務』。