美国当地时间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相关的技术,特别是深度学习,还远没有成熟,它始终没有一个稳固的数学基础做为支撑。然而,在资本的驱使下,它正加速从实验室走向工业界。这意味着将来将充满更大的不肯定性。
可是,我坚信,人工智能的真正繁荣,虽然有可能会比人们预想的要晚一些,但终究有一天,它会到来。
(完)
其它精选文章: