陈浩然:我的移动开发之路

个人简介 陈浩然,高中时代就开始接触编程,已经注定未来『码农』的人生道路,大学义无反顾报考计算机专业,一不留神混到了Ph.D.学位,但是另一个事物影响我并未继续学术生涯,那就是手机。 学生时代就对智能手机非常痴迷,从当年的Symbian神机Nokia 6600到E70,再到Motorola的Windows Mobile手机都如数家珍,也对Symbian、Windows Mobile开发玩过票,但是总感觉少点什么。2007年iPhone发布彻底改变了我的工作和生活,至今每次观看发布会视频仍会心潮澎湃。2008年iOS SDK发布后,随即投入移动互联网浪潮,分别在外企、创业型和国内No.1旅游公司从事无线App的开发工作,从企业级App、独立App到亿级用户量级的App都有全程参与。 旅行是个人最大的业余爱好,希望能早日游遍五大洲。因此目前是最快乐的时期,在旅游公司从事无线开发工作,三大爱好都能兼顾。

QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。

   

1. 各位InfoQ的网友大家好,我们现在在QCon北京的现场,作客专访间的是携程无线开发总监陈浩然先生。我看到你高中就在玩编程了,你是怎么接触到编程的?你学的第一门编程语言是什么?开发的第一个程序当时还记得吗?

陈浩然:在高中时期,那时候家里买了第一台电脑,最早是接触到VB,后来C语言也学了一些,属于自己玩耍的状态。最早做的是一个订客软件,也是看网上的一些例子自己摸索来做,那时候没有老师,完全处于一个自学的状态。

   

2. 早年的时候,智能手机是塞班系统的天下,那个时候你有没有开发过一些比较好玩的应用呢?

陈浩然:那时候也是在读大学,很早就买了诺基亚的6600,那是一款很‘胖’的手机,当时觉得很酷,因为可以去装一些软件。那时刚好也是学计算机,学C++,塞班是基于C++开发的,所以就自学做一些小的应用。那时候的开发不像现在这种移动开发,SDK的API很成熟,很多,开发起来也相对比较麻烦,基本上也是处于一个自学自玩的状态。那时候也没有AppStore,发布App大家可以用。那时基本是自己做一些小东西,自己做的个人信息管理,很简单的一个东西。

   

3. 那时候你会不会到论坛上去发一些你开发的东西?

陈浩然:经常泡论坛,那时候论坛里塞班还是蛮火的,非常火,有一些讨论,但不是特别多,因为那时候学业很忙,从本科到硕士研究生、博士研究生,一路读下来,只能用业余时间去做塞班的开发。

   

4. 从2008年iOS发布了SDK到现在,都已经升到8.3了。开发语言从OC到了Swift,iOS开发经历了一个怎样比较大的变迁,在你的开发生涯中,经历过的改变比较大的是哪些时候?

陈浩然:我在做iOS开发之前,就是我在读研究生的时候,就已经在用Mac电脑,做Mac开发了,Mac开发也是用Object-C这个语言,所以OC这个语言我接触得还是蛮早的。iOS爆发式增长之后,刚好也工作了,也就慢慢转到了移动端开发。这一块体验最大的是它的API非常丰富,比当初iOS SDK1.0刚发布的时候,有了天翻地覆的变化,包括它的用户体验、动画等改变非常大。安卓现在UI的这种流畅的性能还是不能完全达到iOS的水平。具体到语言层面,Swift比较新,现在是1.2版本,还是有很多的坑在里面,我们也是在试用,但是没有用到生产环境。它的ID软件还是有很多crash的情况出现,到生产环境下还是有些问题。国内外的情况也都差不多,大家对这个保持一个观望的态度,还没有直接用到生产环境。

   

5. 单纯从技术的角度来看,你觉得塞班开发跟iOS开发或者其他移动开发有什么不一样的地方吗?

陈浩然:塞班的接口相对来说复杂很多,它的开发难度也会高很多,因为它是基于C++的。写代码的人都很知道,C++坑比较多,相对来说OC还是一门比较简单的语言,它的面向对象设计比较简单。当然简单也有问题,它的很多新的特性,比如说GCD,比如说一些property的优化,但是基本上还是在修修补补,苹果可能也觉得这个语言基本上也是到头了,所以他们要开发一个Swift出来,也就是一个新的语言,把一些动态语言更多的一些新的特性加到Swift里面,现在还处于一个发展阶段。我觉得最大的区别有两点,一个是API的丰富性,一个是开发的应用性。

   

6. 国外的网络环境不像国内这么复杂,你觉得国内移动网络环境混乱的原因到底在哪里?

陈浩然:这个原因基本上是政策层面的会多一点,目前是各家互联的情况,这个我在今天的技术分享当中也提到,大家应该或多或少都遇到这个问题。网络出口都肯定要有移动、联通、电信,三家的出口都要备一个,否则用户体验就会很差。对于开发者来说可能目前能做的事情不多,最大的影响就是成本的提高,公司层面的成本会提高很多,因为出口不能只用一家运营商的,需要多个网络出口来服务用户。

   

7. 现在4G了,移动开发与2G环境下有什么不同?这个不同是体现在对网络带宽上的需求还是通讯协议?

陈浩然:4G和3G最大的两个区别,一个是网络带宽,一个是延迟。网络带宽我们测下来4G可以到400 KB/S到600KB/S,2G的话可能只有10KB到20KB,可能有40倍到60倍的差距。延迟这一块差距就更大了,像4G可以达到150~200毫秒,基本上跟WiFi的延迟差不多,但是2G的话基本上都低于400毫秒,这个用户体验就会差很多。

   

8. 国内2G用户占比很多,你们在设计App架构时如何考虑这些用户?

陈浩然:我今天演讲的主题就是“移动开发网络性能的优化实践”,性能数据的参数都是需要根据用户用的是4G网络、2G网络还是Wi-Fi,设置不同的参数,性能的调优也是不一样的。比,2G情况下,正常情况下只能保持一个TCP连接,连到一个host,4G的情况下会灵活很多。你在写这种网络服务时,需要考虑到这些情况,而不要设置一个统一的参数,那样性能会有问题。携程App这一块比较占优势的一点,就是我们的用户群相对来说会偏中高端一点,在2G的占比已经非常低了,现在基本上低于8%。4G和3G加起来已经31%到32%,剩下的基本上都是Wi-Fi,Wi-Fi已经到60%以上。网络性能调优越来越轻松了。

   

9. 聊聊安全吧,携程App在开发过程中,遇到过哪些安全问题?

陈浩然:安全的问题,一方面就是来自友商的破解。他们为了爬数据,可能需要爬客户端的数据,那他可能就会破解传输数据格式,协议。我们的做法是这个数据协议之上,做一个自有的序列化、反序列化协议,包括一些核心的服务,比如说支付,酒店、机票查询这种服务,我们会做自己的客户端和服务端的对称加密。具体到安卓,像别人很容易重新打包,或者解包、反编译,混淆机制,加壳的保护机制,我们都是有去做的。我们是有一个专门的安全团队做移动App端的安全机制增强。基本上国内这一块攻防的手段,大家的能力差不多,我觉得可能没有一个App可以做到百分百安全,尤其像安卓。最终达到Smali代码那一层级的话,其实等于没有秘密可言,但是它的破解成本就很高,非常耗时。如果要爬数据的话,可能也有其他的手段可以做到,所以这块只要做到一定阶段,投入产出比能够达到一个合理的范围就OK了。你做再多的事情也不能从根本上解决问题,更多的还是把该做的事情做好,基本上问题就不会太大了。可能对于其他一些中小的App这种开发商,比较有借鉴价值。

   

10. 你们有没有用试过用外部的方式来做Native壳封,也就是在外国服务器上屏蔽爬虫,效果是不是会好一些?

陈浩然:其实从防爬的角度来说,这两个没有太大的区别。你爬我是肯定会爬的,但是我可以从防爬虫的机制上来控制,比如从防爬虫的机制上其实Native和Hibernate是一套东西,可能有一些规则,访问频率,访问次数达到一定预估值时,就自动防住,就像拦iPhone IP的这种方式。在防爬虫上,Hibernate和Native没有太大的区别。

   

11. 友商之间互相爬是不是表示竞争很激烈?

陈浩然:毕竟国人用户都是价格敏感的,所以价格是非常重要的一个数据,大家都会互相看对方的数据,估计友商可能看我们的更多一点,爬肯定会爬,更重要的是我们这端的防爬的能力要比较好。

你可能感兴趣的:(陈浩然:我的移动开发之路)