Android 开发者的下半场
2018年,整个移动互联网进入了下半场。为什么说已经进入了下半场,谈未来,先讲历史,我们来重头开始捋一捋吧。
- 2005 年,Google 收购了成立不到两年的 Android 公司,经过三年多的研发,于 2008年推出了 Android 1.0 ,此时还是搭载塞班系统的诺基亚的天下,业界并不看好 Google 的 Android ,很多人认为最多一年 Google 就会放弃 Android。
- 2009 年, Android 1.5 出世,HTC G1 和 HTC G2 大卖,此时,国内已经有一批人开始写 Android 应用开发的入门教材了,尽管现在看来是多么没含量、官方文档一字不漏翻译甚至有翻译不当的教材,但是人家的确是抓住了时机赚了一把,也感谢这些人,让英文不佳的开发者快速入门。
- 2010 年,Android 2.3 面市,本人也是从这个版本开始拥有了第一台 Android 手机,开始接触 Android 开发,也就是这时开始 Android 手机的市场占有开始快速提升,在美国的市场占有率达到了 30%。而这时,有一个巨头开始在崩塌,它就是那个铃声都能让人幻听的诺基亚,一代手机帝国,轰然倒下了。
- 2011 年中,乔布斯生前的最后一部金典的产品 iPhone 4S 面市,把业界智能手机品质推到了一个新高度,当时的 Android 手机和 iPhone 比起来,无论是在工业设计还是运行速度、无论是稳定性还是安全性,Android 都是初生的婴儿。可惜 iPhone 太贵了,在当时看来 ,手持 iPhone 是一种身份的象征,也就是这个时候,小米横空出世,让 Android 市场开启了千元机的时代,我们应该感谢小米、华为让我们大多数人快速上手智能手机。这一年,国内一大批 JavaEE 开发者开始转 Android 开发了,我就是其中的一员,此时开发手段也是比较原始的,比如网络框架,基本都是在 HttpClient 或 HttpUrlConnection 上手动封装, 大家都在干重复的活,程序员最不愿意干重复的活,后来才有了 AndroidAsyhcHttp、Volley、Ritrofit…
- 2012 年,Android 相序推出了 Android 3.x 和 Android 4.x ;3.x 主要用于平板设备,这个时候 Android 程序员开始认识 Fragments,一种为大屏而生的视图,如今被你我他用得很频繁;4.x 在流程度和易用性上做了几次优化,例如动画绘制二级缓冲升到三级缓冲。
到这个时候国内 Android 开发已经是火得一塌糊涂,学过 Java ,不管你有没有 Android 经验,只要你愿意从事 Android 开发就能找到待遇不错的工作;整个行业一片欣欣向荣,随便一家互联网公司,不做两个 App 都不好意思说自己是互联网公司,那些做渠道、市场的也是豪赚了一把,比如 91、豌豆荚。也酝酿出了第一批 APP ,比如当时我们手机装得最多的就是 QQ 、微信、360助手、搜狗输入法、百度地图、UC浏览器、天天动听、优化大师、墨迹天气。看到没有,大多数都是工具属性,还谈不上改变生活,还没有滴滴打车、还没有各种 O2O 应用、微信也只是单纯的聊天工具。但是大家都看到了移动互联网即将进入生活的方方面面的趋势了, 还有好多 APP 要开发,从零到一的开发一款 APP 的机会一大把, 还需要好多 Android 开发者入局干事情。
2013 年到 2014 年这两年 google 相序发布了 4.4 和 5.0,前面讲过,早期的 Android 就是初生的婴孩,安全、性能都存在问题,比如 2012 年,有人让我写程序监听别人的电话、短信,居然轻而易举地就能实现这个功能,可见安全漏洞是多么明显,然而在4.4、5.0 上就难了,在后面的 6.x、7.x 就更难了。在性能方面,我觉得 4.4 和 5.0 具有划时代的意义,4.4 开始 google 开始引入 ART 虚拟机准备代替 Davik 虚拟机, 5.0 以后,在摩尔定律的作用下, 手机硬件性能、内存也上来了, 彻底废弃了 Davik, 完全使用 ART ; 为啥 ART 之后为速度就快了?这里我简单解释一点, 了解 JVM 的应该比较好理解, Java 字节码需要通过 JVM 解释成目标 CPU 可执行的指令集, 这也是 Java 运行速度慢的原因, 后来出现了 JIT 编译, 对经常执行的热区代码做一次解释,解释成对应目标 CPU 指令集, 放到内存中, 下一次执行的时候就直接从内存中取出这部分 CUP 指令直接执行, 省去了每次都解释执行的耗时; Davik 也是有 JIT 特性的, 不过还不够好;能不能再安装的时候就提前把要解释的字节码翻译好? 内存允许的话,答案是肯定的, ART 上面就这么干的, 这种方式叫做 AOT,即提前编译。所以我们会发现 5.0 以后安装程序会比较慢, 但运行速度快了太多, 5.0 以后 Android 和 iOS 的差距越来越小了。
2013 年到 2014 这两年,移动互联网进入了新一轮的爆发式增长,真正把草莽丛生、野蛮生长演绎到了极致,记得我在《一个程序员的运气》这篇文章中讲过一个故事:一个在 2010 年底还在白石洲和我同学一起住农民房、挤公交的师兄,2014 年的时候已经是身价千万的副总了; 同一年,另一个公司的年终时候在楼下摆满了奥迪作为年终奖,它就是 UC。经过两三年的疯狂发展,生活的方方面面都可以在手机上进行了,各种 o2o 应用打得不可开交,打的不用再去马路边等着、超市到路边摊都不再需要掏现金、外卖随叫随到,移动互联网真正改变了人民的生活方式…
这个时候整个行业需要从零到一开发 APP 机会少了很多了,到 2015 年的时候很多创业公司第一步想到的不是要开发一个 APP ,而是先开一个微信公众号。而这个时候 APP 端的开发模式也慢慢在发生变化,各种动画开源库、网络开源库不说,原生开发已经相当成熟了,热更新插件化开发也初出锋芒,摩尔定律的作用下,硬件性能上来了,H5 也越来越多的分担了页面任务,Android 开发进入混合开发时代。
提高效率、解放双手是人类永恒的追求,程序员的理想就是要干到自己“没活干”。2015 年底 facebook 推出 React Native,跨平台、动态性和性能达到双平衡,我也第一时间研究并写了 demo,发现上手也快,这种 web 化的开发方式、原生化的体验一定是趋势,js 再次发光发热。2016 年插件化框架彻底成熟,没过多久,阿里的 Weex 发布,和 RN 如出一辙,Android 开发彻底进入混合时代,这个时后对端的架构能力是有要求的,你要考虑你的应用是不真的需要组件化,如果需要,又怎么把组件、业务插件、Web 容器、统跳协议等有效结合。
2017 微信小程序面市,跟着文档这个 Demo 轻而易举,站在创业者的角度,你还会花这么多成本去开发一个原生的 App 吗?而且这个时候各个领域、细分领域刮分已经完成,开发新 App 的机会真的没有多少了。 如今小程序自己形成气候,各家 App 都想仗着平台和流量做自己的航母,都要做自己的小程序,真是畸形,从统一的角度看,我还是希望快应用能成。
随着 RN、Weex、小程序等前端技术的出现,技术发展又完成了一个轮回,在摩尔定律作用下,历史是如此的相似。还记得那个曾经差点要了微软命的浏览器公司吗,你操作系统很牛逼,但是流量入口都在我这,微软也感觉到了不妙,后来才出现了 IE 浏览器,IE 浏览器出现后微软内部也开始了系统派和浏览器派两个派系旷日持久的斗争,最终系统派获胜了,不知道这是不是后来微软在新互联网时代衰败的原因!移动互联网和PC互联网的发展轨迹太像了,只不过移动互联网是螺旋上升的一个轮回,2008 年到现在,正好十年,十年一轮回。
下半场
下半场我们的战场在哪里?
区块链
2018年初,投资大亨徐小平的一张聊天截屏撼动了整个互联网圈,可谓一石激起千层浪。一时间,连卖菜大妈都在讨论区块链,各类打着区块链的牌子圈钱割韭菜的公司、创业团队如雨后春笋,直到李笑来的一段录音流出,感觉大家都被这场“革命”的资本家当傻逼使了,着实为这把大火浇了一盆水。说区块链会比曾经的互联网革命还要猛烈,我觉得有点喧宾夺主了,区块链只是互联网这个土壤上长出来的一根藤,只会在有限领域发挥很好的作用。技术上看,区块链不是什么新技术,是密码学、分布式、p2p等技术结合经济学在特定领域的应用。如果你本身在密码学、安全领域或分布式开发领域有经验,转区块链开发又有何难?换个赛道开车而已。不过据我所知的 Android 客户端开发,95% 是没有机会也没自主去从事或深入研究过这方面的技术,所以基本认定区块链不是 Android 开发的下半场,转岗搞区块链优势不大。
小程序
RN、Weex、小程序出来的时候,我都有研究过,并且能轻易上手,作为一名 Android 原生开发的我都能轻易上手,更不用说那些前端工程师了,而且现在各家小程序的上层开发技术在我看来都是快消品,五年、十年后他们还在么?当然如果我们能抽象一下各家小程序背后的技术本质,例如深入研究 JS 执行引擎原理、浏览器内核等,那你又管他五年后XX小程序还是WW小程序呢?肯定离不开这些技术本质,这一点很多前端小伙伴一定比我们终端小伙伴玩的溜。
人工智能
人工智能并不是什么新概念了,可以说自计算机诞生就有人思考人工智能的问题了,不过人工智能的概念是在 1956 年夏天、美国达特茅斯学院的一次研讨会上首次提出的,那次会议聚集了麦卡锡、香农等业界泰斗,被认为是人工智能的诞生标志,史称达特茅斯会议。此后,每隔一段时间,人工智能就发展到一个新的阶段,例如 1963 年计算机与人类的首次象棋大战、1996 年深蓝计算机战胜国际象棋大师、1997 年比尔盖茨的智能化豪宅建成,推进智能家居的概念诞生、近些年 Google 的 AlphaGo、无人无人车等,语音、图像识别等技术已经进入多个领域的应用。2018 年,移动互联网各个方面应用领域进入红海,各大巨头都在寻找新的赛场,人工智能成了“兵家必争之地”,BAT 等互联网巨头都纷纷成了 AI 实验室…
人工智能的基础是数据和算法,而数据又必须基于连接获取,需要万物联网,强大的数据加算法作为神经中枢,各种各样的终端设备就是神经末梢,神经末梢感知数据通过联网传递到中枢,神经中枢在越来越多的数据喂养下反过来更好的为各个终端提供更精确的决策和服务,这就是马云爸爸说过的 DT 时代,2018 年,我们从 IT 时代进入了 DT 时代,红衣教主周鸿t 2013 年的时候就说过未来的手机硬件一定是没有利润的,甚至扬言要做免费的手机,通过软件增值来赚钱,而在 DT 时代这一点将会更加明显,万物联网的终端硬件一定不是盈利点,真正的价值还是在数据和服务。作为多年的 Android 开发,我也一直在思考在这个时代,我们的竞争力在哪里?近年大数据工程师、算法工程师比较吃香,终端开发有必要转算法吗?如果你抱着五年十年长时间打算,我到觉得未尝不可。不过我觉得如果对 Android 系统研究的足够深入,这个时代依然还是我们的时代,万物联网,一定会需要一大波终端工程师,而未来的智能设备一定需要离线算法能力,终端要承担一部分算法,到时候我们能发挥的空间更大。
如何在下半场走得更远
无论是上半场还是下半场,我们只是换了个现场而已,在我们一生所学的本领中,有些换了个战场就不能用了,有些还能继续使用。
说到这个, 我想起了有个前辈说的一个概念:知识衰竭周期,这里我拓展为技能衰竭周期。我们一身中所学习的技能,有的很快就过时,称之为衰竭,有的技能十年、百年都不过时,这里有个最鲜明对比: 研究心血管的医生和 fash 程序员,医生完全不用担心人体心血管结构会变化而自己的技能经验会淘汰,而十年前比较火的 flash 开发技术如今快面临淘汰了,所以说学医的普片越老越吃香,而我们程序员不得不不断学习。既然要学习,我们也考虑下成本和收益,多花些心思在衰竭周期较长的知识、技能上。