查看原文
其他

互联网风雨十年,我所经历的技术变迁

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:<xn:name>,那么真正展示到浏览器里的时候,它会自动解析成代表当前访问用户姓名的一个<a>链接。大概原理是:第三方服务器吐出的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相关的技术,特别是深度学习,还远没有成熟,它始终没有一个稳固的数学基础作为支撑。然而,在资本的驱使下,它正加速从实验室走向工业界。这意味着未来将充满更大的不确定性。

但是,我坚信,人工智能的真正繁荣,虽然有可能会比人们预想的要晚一些,但终究有一天,它会到来。

(完)


参考文献:


  • [1] {:target="_blank"}

  • [2]{:target="_blank"}

  • [3]{:target="_blank"}

  • [4]{:target="_blank"}

  • [5]{:target="_blank"}

  • [6]{:target="_blank"}

  • [7]{:target="_blank"}

  • [8]{:target="_blank"}

  • [9]{:target="_blank"}

  • [10]{:target="_blank"}

  • [11]{:target="_blank"}

  • [12]{:target="_blank"}

  • [13]{:target="_blank"}

  • [14]{:target="_blank"}


其它精选文章:

小白的数据进阶之路
Redis为什么用跳表而不用平衡树?
【科普】神经网络和深度学习
论人生之转折
程序员的那些反模式
技术的正宗与野路子
程序员的宇宙时间线
Android端外推送到底有多烦?
Android和iOS开发中的异步处理(四)——异步任务和队列
用树型模型管理App数字和红点提示
象牙少女


扫码或长按关注微信公众号:张铁蕾。


有时候写点技术干货,有时候写点有趣的文章。

这个公众号有点科幻。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存