網際網路風雨十年,我所經歷的技術變遷

張鐵蕾發表於2016-11-11

美國當地時間2016年10月4日,谷歌在一個新品釋出會上首次提出了AI-First(人工智慧優先)戰略[1]。在過去的十年,谷歌一直秉承的是Mobile-First的發展思路,而未來的十年,則會迎來一場新的革命。這將是比移動網際網路規模更為巨集大的一場技術革命,如今,我們正站在歷史的分界點上。

網際網路的發展就像一列高速運轉起來的火車,在技術、創意和資本的相互推動下,保持著巨大的慣性一路向前。面對這個持續變化中的世界,身處其中的從業者們,也只有時刻保持學習和思考的狀態,才有可能跟得上前進的步伐。而對於技術人員來說,隨著每一次技術沿革,龐大的、不斷髮展的技術體系在我們面前展現出了紛繁複雜的技術分支,讓每一個初窺門徑的人都感到眼花繚亂。我們該學習什麼,該放棄什麼,哪些技術曇花一現,而哪些技術真正擁有持久的生命力,是每個人都面臨的課題。

歷史是一面鏡子。在我們身後,由智慧手機和移動網際網路引發的這場變革,已經逐步走向成熟,如今仍在發揮它的威力;而在我們前面,一場以人工智慧為核心的技術革命,正蓄勢待發。這是個好時光,很適合回憶。

回首過去十年我所從事的這幾份工作,正好經歷和見證了三個比較大的技術變遷:第一個是smartphone的崛起,第二個是開放平臺和Social Game的興盛,第三個是網際網路從Web向手機App的全面遷移。現在,且聽我慢慢道來。

Smartphone的崛起和傳統手機廠商的衰落

2007年1月,當我從學校畢業進入Motorola工作的時候,公司所在的部門正致力於Linux-Java平臺的研發。Linux-Java平臺實際上是一個基於Linux核心的手機作業系統,它的底層是經過裁剪的Linux kernel,中間是由C和C++實現的各種支撐框架,而上層應用可以使用Java來實現,跑在JVM裡面。

我當時所在的team,就是負責Linux-Java平臺上Multimedia Library的研發,工作中經常涉及到的技術是OpenMAX[2]和GStreamer[3]。OpenMAX是一個多媒體技術標準,用於對一些多媒體基礎功能進行抽象,從而保持可移植性,同時充分利用底層硬體以提高效能。OpenMAX對上層提供的是一個一個抽象的元件(component),比如camera, codec, mixer,而GStreamer則處於更上層,將這些元件組合成pipeline,共同來完成更復雜的多媒體任務。實際上在今天的Android系統上,OpenMAX和GStreamer仍然在多媒體方面是兩項不可或缺的技術。

歷史上,Motorola很早就開始嘗試製造基於Linux系統的手機了,比如2003年釋出的A760[4],可以算是世界上第一款使用Linux系統的手機裝置。但是,Motorola的Linux-Java平臺最終並沒有獲得成功,後來隨著蘋果iPhone的推出和Android系統的出現,而不得不中途夭折。Linux-Java平臺雖然從技術描述上似乎跟同樣是以Linux核心為基礎的Android系統類似,但它並不包含以後的smartphone所賴以成功的一些關鍵要素,比如iPhone的全觸控式螢幕的互動設計和多點觸控技術,也不像Android那樣是一個高度開放的系統。

如果沒有iPhone的出現,傳統的手機廠商(Motorola、諾基亞、索尼愛立信等)也許還不會那麼快衰落。那個時候,各家的手機在技術和產品本身的體驗上並沒有本質的差異,他們在市場上的競爭主要依靠外形設計的多樣化以及獨特的營銷策略。直板、翻蓋、滑蓋,手機的外形變得多種多樣,但都沒有擺脫按鍵的輸入方式。

iPhone最具獨創性的多點觸控技術,實際上也不是蘋果的首創[5]。但無疑iPhone是個集大成者,它將整個業界對於智慧手機的認知推向了全觸屏的發展方向。同時,iPhone的釋出對於Android系統的發展產生了非常深刻的影響。有一個小故事是這樣說的,本來谷歌設計的第一款Android手機是沒有觸控式螢幕的,而是採用與黑莓接近的滑出鍵盤。但就在賈伯斯向外界展示首款iPhone的時候,正在去開會路上的安迪·魯賓(Android創始人)要求司機立即停車。“我的天,”魯賓對車裡的同事說,“我覺得我們不能推出這款手機了。”[6]於是,Android系統不得不進行重新設計。

而在iPhone出現之前,主流的手機作業系統是Symbian OS[7]。那是一個相對封閉的系統,對第三方開發者很不友好。上層應用可以使用Java來開發,但是是非常受限的J2ME環境。記得當時我試圖學習使用J2ME寫一些程式,發現它功能非常簡單,基本只能執行最簡單的jar包,連本地儲存都沒有。比如你要實現一個電子書的應用,那麼你必須把電子書的資料資源也打包到jar裡面去。

對於智慧手機行業來說,2007年絕對是個特殊的年份。在這一年的1月份,iPhone第一次公開亮相,並在半年後開始售賣。而同時,Android系統也在同一年的11月份正式對外發布。並且,谷歌發起了一個聯盟,稱為Open Handset Alliance (OHA) [8],聯合了眾多的科技企業(其中包括Motorola),以Android系統為核心共同制定手機裝置的開放標準。

2007之後的幾年裡,在全球範圍內,智慧手機的革命開始了,而移動網際網路的大幕也馬上就會拉開。

開放平臺與Social Game

2008年的8月,我來到校內網(後來的人人網),開始了我的第二份工作。我所加入的部門是剛剛成立不久的開放平臺部門。

校內網的開放平臺,可以說是國內最早的一批Open API服務,早在2008年初就開始了組建工作(由李福鬆帶領),並於2008年7月正式釋出。在整個網際網路技術的發展歷史上,開放平臺絕對是一項開創性的工作。自從Facebook首次提出這個概念以來,直到今天,開放,始終佔據網際網路的主旋律。包括現在常見的用某個平臺的賬號登入這樣的功能,也是從那個時候開始慢慢地深入人心的。

當時的開放平臺最初的表現形式,是把第三方開發者提供的內容,在校內網的頁面框架內展示出來。最開始這在技術上有兩種實現方式。

第一種被稱為XNML,即Xiaonei自定義的Markup Language[9]。它類似一種擴充套件的HTML,比如開發者可以在頁面中包含類似這樣的自定義tag:,那麼真正展示到瀏覽器裡的時候,它會自動解析成代表當前訪問使用者姓名的一個連結。大概原理是:第三方伺服器吐出的XNML頁面,經由人人網的代理伺服器進行解析,渲染成真實的HTML頁面,再吐給瀏覽器。而第三方頁面裡所包含的CSS和JS,在這個過程中也經過了過濾,去掉了不安全的成分。

第二種被稱為iframe方式。第三方的頁面直接套在校內網的頁面框架內,但當想要通過JS呼叫平臺的一些前端服務時,比如傳送News Feed,就需要在兩個完全不同的域名之間進行“跨域”通訊。

到了後來,還出現了第三種方式,就是谷歌所制定的一種稱為OpenSocial的標準。本質上和iframe的方式是類似的。

但到了最後,第三方究竟採用哪種方式變得不那麼重要了,因為這時Social Game變得流行起來。Social Game不再依賴JS和CSS,而是使用AS來進行程式設計,最終生成的swf檔案在瀏覽器的Flash Player裡播放。

Social Game的流行直接導致了AS程式設計的流行。在之前的那幾年,隨著Web 2.0概念的興起,由於瀏覽器端程式的實現複雜度越來越高,前端(front-end)工程師,作為一種新的專業性的角色,逐步分化出來。而Social Game流行起來之後,在前端工程師的技術棧裡,除了CSS和JS,AS也變成了一個重要選項。直到後來手遊興盛起來之後,AS才開始沒落。

歷史上出現的最重要的Social Game,非“開心農場”莫屬。它由上海的五分鐘團隊開發,在2008年的5月份就已開發完畢,並在2008年11月在校內網開放平臺首發[10][11]。我和當時的同事們,是遊戲的第一批體驗者。當時我們第一次玩到這個遊戲的時候,第一感覺就是這個遊戲必然要火。

之所以說開心農場在Social Game的發展歷史上非常重要,是因為它在全世界範圍內的獨創性和影響力。不管是在國外的Facebook上,還是在國內的各個社交平臺上,開心農場都有眾多的模仿者,其中包括Zynga的FarmVille。記得在一次人人網開放平臺的頒獎會上,上臺領獎的五分鐘團隊的代表——一個小姑娘——非常驕傲地宣稱,他們會一直堅持做原創遊戲!雖然五分鐘後來發展得並不順利,但他們的原創精神永遠值得尊敬。

Social Game,可以算是掀起了PC上最後一波創業熱潮。在2011年人人網上市前後,人人網的離職員工先後組成了很多創業團隊,到逐步開放的騰訊平臺上開發Social Game。我也是在差不多那個時間開始創業歷程的。

騰訊的開放過程是緩慢而謹慎的。這在技術上的一個表現是,他們非常具有獨創性地發明了OpenId的概念[12]。這個OpenId的真正作用,其實與它的字面意思正好相反。騰訊平臺傳遞給第三方開發者的用於標識使用者的ID,被變換成一個OpenID,以保證第三方無法把它與QQ號對應。並且,不同的應用或遊戲之間,同一個使用者的OpenId也不同。這意味著,即使同一個開發商開發了多款遊戲,你也不能在這多個遊戲之間將使用者對應起來。但不管怎麼說,騰訊從封閉走向開放,給那時候的創業者們創造了一個巨大的機會。在那個時候,有些人開始相信,依靠在騰訊這樣的大平臺上開發遊戲,也是能創造出估值10億美金以上的公司的。

現在回想起當年在校內開放平臺工作的那段經歷,仍然令人難以忘懷。和一群年輕人一起,憑著一腔熱情,在推進網際網路的開放程式中貢獻了自己的一份力量。在這個過程中,我們見證了很多創業者的奮鬥歷程,有人成功,更有許多人失敗。但我相信,經歷過這一切的每一個人,都從中學到了很多很多。

Web->App

在2012年前後,整個網際網路開始從Web轉向App。而在那之前的幾年,人們還普遍相信,任何東西都應該跑在瀏覽器裡。

當時要開發一款App,可不像現在這麼簡單。市場上的iOS和Android程式設計師剛剛開始分化出來,數量極少。記得那時有半年以上工作經驗的iOS工程師就堪稱老手了,在找工作時可以拿到很高的薪資。

如果不是蘋果和iPhone,大概Objective-C早已是一門被淘汰的語言了,它那不符合現代程式語言的語法格式和極易出錯的型別系統,曾經引發過很多問題。但那時候很多人開始學習這門語言,使得Objective-C迅速躥升到程式語言排行榜的前列。

和許多創業團隊一樣,我們也是基本從零開始自學iOS和Android程式設計的。至今我還記得,我的同事夏農在花了很長時間之後終於解決了iPhone應用上的一個卡頓的效能問題之後,高興得手舞足蹈的樣子。

時至今日,iOS和Android已經成為了非常成熟的開發平臺。除了原生的開發方式之外,還出現了像React Native和Weex這樣的跨平臺方案,允許使用JavaScript語言編寫App。而在手遊開發當中,使用指令碼來編寫遊戲邏輯的做法,比App的跨平臺方案出現得更早,且更加成熟。不管是使用Cocos2d-x,還是Unity3D,只需再配合一門指令碼語言,可以是LUA,也可以是JavaScript,就能像釋出Web頁面一樣釋出遊戲程式碼。

至此,前端技術完成了一個輪迴。現在,JavaScript幾乎可以用在任何地方,它可以用來開發Web和H5頁面,iOS和Android應用,跨平臺的手遊,以及藉助Node.js進行伺服器程式設計。前端技術以大一統的方式,演變成了全棧技術。

而與此同時,蘋果在力推它的Swift語言,而在Android開發中,也有了其它的選項,比如你可以嘗試Kotlin。

可見,技術的多樣性和統一性的趨勢同時存在。到底誰才是未來?顯然,在很長的時間內,他們仍將共存。原生的方式肯定會持續存在下去,而跨平臺的方案,最終會在多大程度上取代原生,則取決於它們在未來達到怎樣的成熟度。

而更遠的未來,則要等待下一個顛覆性的東西出現。

App->AI ?

如果說App顛覆了Web,那麼什麼將會顛覆App呢?現在人們把希望寄託在AI技術上面。

像谷歌一樣,各大巨頭已紛紛在AI領域佈局。學術界的深度學習“三巨頭”,Yann LeCun、Geoffrey Hinton和Yoshua Bengio,其中的兩位已分別被谷歌和Facebook收編。而另一位人工智慧和深度學習方面的專家,吳恩達(Andrew Ng),也被百度挖走。今年9月份,微軟也成立了一個專注於AI研究的新部門[13]。歷史上曾開發出“深藍”國際象棋程式的IBM,更是AI領域的資深玩家。Amazon自然也不甘落後,它釋出的智慧音響產品Amazon Echo,在市場上一躍而起。

似乎一夜之間,一場人工智慧的革命就要席捲而來。但是,技術革命,它只會默默地到來。我們現在仍然處於非常早期的階段,這有點類似於五六年前移動網際網路開端的那一刻。而且,AI相關的技術,特別是深度學習,還遠沒有成熟,它始終沒有一個穩固的數學基礎作為支撐。然而,在資本的驅使下,它正加速從實驗室走向工業界。這意味著未來將充滿更大的不確定性。

但是,我堅信,人工智慧的真正繁榮,雖然有可能會比人們預想的要晚一些,但終究有一天,它會到來。

(完)

參考文獻:

其它精選文章

網際網路風雨十年,我所經歷的技術變遷

相關文章