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

和我比較熟的人,最近應該都知道,目前我專注於 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 相關服務』。

留言

  1. 非常贊同Fred兄對JavaScript的看法,也很佩服您對公司營運方向的大膽決策,十分期待後續的發展!

    回覆刪除
    回覆
    1. 還需要大家的支持,也提供機會,不然可能經營不下去。 :-S

      刪除
  2. 請教一下,這是 server side script 還是 client side script?還是同時作為兩者?
    V8 engine 感覺是瀏覽器 (client side) 的 JavaScript engine,而 Python, PHP 等應該是 server side script,讓我搞不清楚

    回覆刪除
    回覆
    1. 這也是我所說的,一層層對 JavaScript 的舊印象和成見把大家給搞迷糊了。:-P

      如你所說,V8 Engine 是 Google Chrome/Chromium 裡所用的 JavaScript Engine,但是,大多數人都比較不清楚一點:『它其實不需要瀏覽器就可以獨立運作。』

      所以你可以將這樣的 JavaScript 和 Python/PHP 一樣視為 Server Side Script。

      至於 Node.js 就是建構於 V8 Engine 之上的專案。然後增加了過去因為只活在瀏覽器上,所以缺少的功能,像是 HTTP 、Filesytem 以及各種系統呼叫,讓 V8 Engine 可以更勝任 Server Side 的工作。

      不過,大體上來說,由於 JavaScript 的使用者多半是 Web 開發者,外界對 Node.js 的印象還是只限於 Web 相關應用,又或者是以為它只是用於 Web Service。這又是再一次的誤解。

      所以我們目前在做的事,就是嘗試為 Node.js 加上更多功能和系統支援,讓它可以處理和整合進各種環境。讓 JavaScript 不再受限於任何一種應用。

      刪除
    2. 可以想成是:你們要把 Node.js(V8 inside) 當成 OS Kernel 來用?!
      這樣就真的是 “Engine start!” 了 XD

      刪除
    3. OS Kernel 還是使用 Linux ,所以應該說當成 Android 的 Framework 來用。 :-)

      刪除
  3. I'm really interested to know someone prove the scalability of node.js :)

    回覆刪除
  4. 請教您生產環境下,node.js如何保護與mongodb的連線?(因為java script會使用明碼方式存放connection資訊而mongodb的權限控制也比較弱些)如果,我們打算使用node.js+ mongodb提供web Service,node.js會先自行編譯嗎

    回覆刪除
    回覆
    1. 目前 Node.js 沒有這樣的機制,無法有效保護程式碼。

      但這是我們目前努力的方向之一,我們正在實作可用的 Compiler 以解決這個問題。 :-)

      刪除
  5. 請問一下,對於google的Go語言,有何看法?
    感覺他們把這個語言定位為系統語言,並且涵蓋web後端(GAE)甚至是前端(想像中)...
    還有包括Android APP

    希望這問題不會很空泛?

    不過 javascript + C/C++ 是很吸引人的工具選擇

    回覆刪除
    回覆
    1. 個人認為,任何一種語言除了需要很長的時間發展,更重要的是有其主要用途和定位。最後,使用者的數量決定了語言的應用範圍和資源多寡。

      所以,現在市面上主要流行的 C/C++、Java、Python 和 Ruby 等語言,最少都已經有十多載甚至二十年以上的歷史,而且各有各獨樹一格的特色和用途,互相無法取代。

      相較之下 Go 就太過年輕,想要賦予重任,需要有很大的心臟。他必需先經歷過其他語言已經走過的過程,才可能會有所大發展。更重要的是,他還沒找到可以深根的定位點,以應用面來說,梧鼠五技而窮的語言已經太多了,不差 Go 一個。

      等到 Go 可以把一件其他語言無法做好的事情,深入且完整的做好,他才開始會有真正的價值。 :-P

      刪除
  6. 創業忌三心二意.

    撐住! 三年以上! 就算是有起來了!

    回覆刪除

張貼留言

這個網誌中的熱門文章

有趣的邏輯問題:是誰在說謊

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(二)

淺談 USB 通訊架構之定義(一)

Reverse SSH Tunnel 反向打洞實錄