網路城邦
上一篇 回創作列表 下一篇  字體:
體驗Google工程師之路
2014/11/15 08:47:36瀏覽1233|回應0|推薦12

我常常跟學生提到Google崛起的一個重要技術關鍵!就是當大家對網頁的功能要求變高,從只看圖文並茂的網頁,到希望網頁也有程式的功能時,有一派人希望在網頁之外自由製作任何網頁無法製作的程式或動畫物件,然後直接嵌入網頁與網頁合體,等於是每次開啟網頁就下載一次那個程式,然後直接安裝並執行。

當然這相當恐怖!因為很可能在一點選網址,開網頁時就直接中毒被駭了,所以才會有很多網頁要開啟時,瀏覽器一直問你這個公司的軟體是不是安全的?要不要下載等等。這個門派的代表就是AdobeFlash了!其實連號稱跨平台的Java程式也有類似的問題,莫名其妙的我們常常要更新Java,但是我們根本沒寫Java程式啊?原因就是執行網頁內Java元件的需要了!

此時另一家公司Google走了另一條完全不同的技術之路!他們決定不用公開的網頁製作技術之外的任何程式製作網頁,只用HTML規定可以使用的,完全透明的JavaScript(簡稱JS)程式語言寫出客戶想要的網頁程式!其實這是很困難的異想天開,很像有人堅持只用樂高積木拼裝出一台真的可以上路的汽車!因為JS原本只是附屬在HTML語言內的簡易版程式語言,看到Script這個字就代表簡化版語言了!

Google的工程師們很厲害,他們真的做到了!代表性的作品就是Google MapsGmail等等網路服務程式!它們完全用JS完成,所以任何瀏覽器都不會「看不透」這些程式,也就不會提出讓使用者害怕,又不知道如何選擇的警告了!所以回想一下,你是不是從來沒在使用Google軟體時碰到要求安裝甚麼元件?相對的,Adobe來的東西就完全不同了!Flash Player永遠更新不完。

做這件事情(JS寫複雜軟體)的困難包括:首先,JS的語言功能較少,也被限制不能隨便使用客戶端的電腦資源,譬如網頁程式不能直接動你的磁碟,所以程式特別難寫,常常必須用很迂迴的方式才能寫出在一般視窗程式中很簡單的功能。其次,JS其實是將程式原始碼掛在網頁內送到客戶端,沒有像一般程式已經編譯成執行檔(exe),是開網頁時才讓瀏覽器進行編譯的,所以感覺上執行速度很慢,可以慢到只有一般視窗程式的十分之一!

再其次,可能是一般軟體開發者最不願意面對的事情,就是JS原始碼完全無法藏匿,任何人都可以直接看到像Google Maps這麼龐大軟體的每一行原始程式碼!那要怎麼保障專利啊?其實他們就是不保護,完全靠著動態的技術領先維持商業優勢!別人最多複製整個Google網站提供完全一樣的服務,但是連Google的搜尋引擎上面的圖示與小遊戲都是天天更新的!一般客戶根本不會想去山寨版的Google網站,這樣就維持了Google的永續經營。

很有趣吧?我會常常跟學生提到這件事情是因為當HTML5興起,我教學生很多JS程式準備做APP時,難免會想到這個公司內偉大的JS開發者前輩,他們是在沒有HTML5之前就用舊版的JS蓋好很多偉大的軟體建築了!當我們很艱辛的用JS想寫出與VBC#視窗程式一樣功能的程式時,當然必須向他們致敬!

我最近算是進一步地向他們學習與致敬,好像是複製耶穌背十字架受難的過程。就是正在努力將我已經完成,相當複雜(兩千多行)且需要高執行效能的車牌辨識VB程式,改寫成JS網頁程式。目前只進行了約三到四分之一,真的是非常困難,我也才會知道原來執行速度的差異可以達到十倍之多!原本只需0.2秒的影像辨識程序,改成JS之後至少需要兩秒多!

會這麼做不是因為景仰前輩而已,而是如果影像辨識程式只能放在伺服端,就是所謂的雲端辨識啦!那麼我們賣出終端產品的APP之後,每個客戶拍的每一張照片都要回傳伺服器,還要伺服器幫忙辨識後將結果回傳到客戶手機,那麼不僅是網路資源浪費,速度變慢,最可怕的隱憂是伺服器會負擔太大,我們賣出產品之後,後續的營運成本會非常的高!

相對的,現在反正手機的硬體效能越來越好,還有很誇張的雙核心四核心的機種,記憶體容量也已經算幾G的,完全不輸給一般桌機筆電了!我當然可以將幾千行的辨識程式搬進手機執行啦!如果我用Java改寫裝到Android系統的話,速度還不會輸給我目前的桌上型VB程式版本咧!

當然會用JS改寫是因為JS可以跨平台用於AndroidiOS等不同系統,我的辨識核心很複雜,要同時維護多語言版本很累的!當然缺點是JS速度慢,以及程式碼容易被反組譯被抄襲,不過那些問題稍後再想了!先設法寫出來再說吧,Google公司都還活著嘛!總有辦法的。

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=18978422