美國當地時間2016年10月4日,谷歌在一個新品發佈會上首次提出了AI-First(人工智能優先)戰略[1]。在過去的十年,谷歌一直秉承的是Mobile-First的發展思路,而將來的十年,則會迎來一場新的革命。這將是比移動互聯網規模更爲宏大的一場技術革命,現在,咱們正站在歷史的分界點上。html
互聯網的發展就像一列高速運轉起來的火車,在技術、創意和資本的相互推進下,保持着巨大的慣性一路向前。面對這個持續變化中的世界,身處其中的從業者們,也只有時刻保持學習和思考的狀態,纔有可能跟得上前進的步伐。而對於技術人員來講,隨着每一次技術沿革,龐大的、不斷髮展的技術體系在咱們面前展示出了紛繁複雜的技術分支,讓每個初窺門徑的人都感到眼花繚亂。咱們該學習什麼,該放棄什麼,哪些技術曇花一現,而哪些技術真正擁有持久的生命力,是每一個人都面臨的課題。前端
歷史是一面鏡子。在咱們身後,由智能手機和移動互聯網引起的這場變革,已經逐步走向成熟,現在仍在發揮它的威力;而在咱們前面,一場以人工智能爲核心的技術革命,正蓄勢待發。這是個好時光,很適合回憶。程序員
回首過去十年我所從事的這幾份工做,正好經歷和見證了三個比較大的技術變遷:第一個是smartphone的崛起,第二個是開放平臺和Social Game的興盛,第三個是互聯網從Web向手機App的全面遷移。如今,且聽我慢慢道來。編程
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以後的幾年裏,在全球範圍內,智能手機的革命開始了,而移動互聯網的大幕也立刻就會拉開。
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億美金以上的公司的。
如今回想起當年在校內開放平臺工做的那段經歷,仍然使人難以忘懷。和一羣年輕人一塊兒,憑着一腔熱情,在推動互聯網的開放進程中貢獻了本身的一份力量。在這個過程當中,咱們見證了不少創業者的奮鬥歷程,有人成功,更有許多人失敗。但我相信,經歷過這一切的每個人,都從中學到了不少不少。
在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顛覆了Web,那麼什麼將會顛覆App呢?如今人們把但願寄託在AI技術上面。
像谷歌同樣,各大巨頭已紛紛在AI領域佈局。學術界的深度學習「三巨頭」,Yann LeCun、Geoffrey Hinton和Yoshua Bengio,其中的兩位已分別被谷歌和Facebook收編。而另外一位人工智能和深度學習方面的專家,吳恩達(Andrew Ng),也被百度挖走。今年9月份,微軟也成立了一個專一於AI研究的新部門[13]。歷史上曾開發出「深藍」國際象棋程序的IBM,更是AI領域的資深玩家。Amazon天然也不甘落後,它發佈的智能音箱產品Amazon Echo,在市場上一躍而起。
彷佛一晚上之間,一場人工智能的革命就要席捲而來。可是,技術革命,它只會默默地到來。咱們如今仍然處於很是早期的階段,這有點相似於五六年前移動互聯網開端的那一刻。並且,AI相關的技術,特別是深度學習,還遠沒有成熟,它始終沒有一個穩固的數學基礎做爲支撐。然而,在資本的驅使下,它正加速從實驗室走向工業界。這意味着將來將充滿更大的不肯定性。
可是,我堅信,人工智能的真正繁榮,雖然有可能會比人們預想的要晚一些,但終究有一天,它會到來。
(完)
其它精選文章: