我是一名Android开发者。从去年下半年开始,就开始听到各种言论,例如“Android开发凉凉”、“移动端开发没出路了赶紧转行”、“要被XXX替代了”等等,充分反映了大家焦虑的心态。移动端开发真的要凉凉了吗?我也经常和朋友聊起这个话题,今天我决定写下自己的一些看法,供大家参考。
现状
移动端开发的现状是什么?我们可以从自己写的代码中寻找线索。以Android为例,很多大公司的移动端开发者写的最多的代码是这样的:
1 | LinearLayout layout = new LinearLayout(); |
或者也许是这样的:
1 | public class XXXView extends RelativeLayout { |
又或者是对着xml标签做出各种骚操作——UI开发。没错,如今移动端技术栈已经愈发趋于成熟完善,对业务来说,就连大公司的工程师也是在做UI的展示逻辑。大公司产品相对比较完善,后端管控了大部分业务逻辑,客户端做的就是取到后端的数据,然后通过setText(xxx)
展示出来,然后通过接口返回的Boolean值来判断View显示还是隐藏。我听到很多人说,工作几年感觉自己没什么提升,天天都在堆代码,随便找个刚毕业的学生也能分分钟替代自己,于是就很焦虑。那对于工作几年的人来说,要想尽可能不让自己过早的被替代、被淘汰,就需要选一个有潜力的有前景的领域深挖。
那么移动端开发的未来在哪里?
动态化
在聊动态化之前,我们先聊聊Android的插件化。前两年,插件化火起来了。为什么火?因为可以实现Android应用不发版本的同时动态上线需求,同时热修复还可以动态的修复线上出现的bug。但是插件化存在最大的问题是什么呢?兼容性。Android机型太多太复杂,插件化框架难免会涉及到系统API的hook,兼容性问题就出现了,开发者会看到莫名其妙的错误上报上来却束手无策。随着Android版本的迭代更新,插件化这条路越来越不好走,Android P给了开发者们一个信号:别随便hook系统API了,Google要开始收口整顿了。插件化这条路注定无法一直走下去,于是开发者们另辟蹊径。最开始是继续用H5混合开发的方式,例如老牌Hybrid框架Cordova,但是性能不尽人意。
这时候Facebook开发出了一个跨时代的框架:React-Native。它提供了一个全新的思路:通过jscore进行js解析,使用原生的View进行渲染,提供桥机制调用原生的能力。React-Native是第一个真正的高性能的动态化框架,它的出现让Web前端和客户端的界限迅速变得模糊。随之而来的是各大公司的自研框架,例如阿里巴巴的Weex和美团点评的Picasso框架。React-Native只提供了Android和iOS的双端支持,Weex扩展了思路,提供的Web端的支持,一个是React语法糖,一个是Vue语法糖。Picasso又不一样,Picasso是纯TS,DSL语法树,写法实在太简单,又准备在三端的基础上提供小程序端的支持。
今年GMTC大会,Flutter发布了第一个预览版,阿里巴巴闲鱼团队已经在闲鱼APP中使用了Flutter技术。Flutter三年前开始开发,直到今年才有第一个beta版本。通过Dart编写APP,然后编译成机器码同时运行在Android和iOS上,做到了原生跨平台,Hot Reload,性能很不错,可定制性也非常强,连封装的系统层Dart代码都能改。提供了Web、iOS、Android、React-Native开发者学习Flutter的入门文档,也是今年移动端少数的几个比较火的热点之一。它的思路不同于React-Native,是一种全新的思路,目前我对Flutter持乐观态度。
支付宝的动态方式不同于以上所有,它是完全基于自己的H5容器进行Hybrid开发,不过由于内核也是自研的(UC内核),所以性能各方面都比原生的WebView好,支付宝里非常多的页面都是基于H5容器开发的,包括支付宝小程序,这也算是一种动态化的方式吧,只不过研发成本太高:自研WebView内核。
目前来看,动态化的三驾马车已经初步形成:
- React-Native为首的jscore(v8)桥通信动态化方案
- 自研WebView内核,H5容器化方案
- Flutter(我觉得Flutter正在发力争取第三驾马车的位置)
动态化改变了移动开发的方式,模糊了Web前端和客户端的界限,让越来越多的人认识了什么是“大前端”。如果有经验的开发者们对这个方向进行深入研究,五年内,应该不会被淘汰了(笑)。
移动端机器学习
毫无疑问,移动端机器学习从去年年底就开始火起来了,TensorFlow也推出了移动端框架,很多应用都开始在移动端部署机器学习模型,例如相机类应用(faceu)、电商类应用(唯品会)等,包括离线的机器学习。如果深挖这个方向,我觉得十年内不会被淘汰。当然了,难度也不小。
AR & VR
从支付宝的AR抢红包、QQ的AR踢球等玩法被越来越多的人体验,AR走进了人们的视野。对于广告引流玩法来说,AR无疑是能带来巨大收益的。月初大众点评亲子上线了“亲子奇妙日”活动,就是基于大头儿子小头爸爸的AR玩法。那么开发AR引擎的移动开发者自然成了香饽饽,目前AR主要应用的领域还是广告变现,不过很多公司也找到了AR的一些落地场景,比如卖家具的电商公司可以通过AR技术让用户在购买之前就能看到实物在自己家里到底能不能放得下,这能极大的提升用户的购买体验。如果是研究OpenGL、计算机图形学的移动开发者,可以往AR引擎开发方向发展,非常有前景。
VR同理。
移动端音视频
这个领域最火的产品当之无愧是抖音了,就连我自己都天天刷抖音。除了抖音,还有各大视频应用,都需要音视频开发领域的专业开发人员,图像处理、滤镜、裁剪等等骚操作都是需要专业的音视频开发知识才能做出来的,研究OpenGL、计算机图形学的移动开发者在这个领域也有很大的优势。据我所知,这方面人才现在缺口依然很大,各大公司求贤若渴,如果在这方面有经验并且愿意深挖的同学,自然是各大公司的香饽饽啦。
移动端区块链
区块链,今年最火的技术没有之一。从人人都在谈比特币到人人都在谈区块链,可以看出区块链技术已经被越来越多人熟知。无数区块链公司如雨后春笋般的冒出,连大公司们也按捺不住开始涉足区块链领域。对于移动端来说,区块链应用最多的还是数字钱包。但是未来移动端区块链一定会有更多的落地应用,例如Status。区块链今年大火,移动端的区块链应用还没开始火,但是也不远了。如果有移动开发同学对区块链方向感兴趣的,可以开始研究起来了。如果要学习智能合约开发的同学,我推荐一个非常好的网站:Cryptozombies,绝对是入门solidity智能合约开发的精品。目前移动端的区块链人才还不多,各大公司也没有在招,但是两三年内,应该就会爆发了,现在还在探索落地场景的阶段,也给了对区块链技术感兴趣的移动开发同学学习的时间。改变世界的技术了解一下?
移动基础框架
UI未来可能都会被动态化技术接管,但是移动基础框架不会。但凡要开发一个APP,网络请求、日志处理、数据库处理、缓存、Push等框架都是不可或缺的,这部分和UI关系不大,又是APP的命脉所在。只要APP存在,基础框架就存在。有同学可能要说了,我用okhttp分分钟写一个网络请求出来,没错,这是okhttp已经帮我们做好了很多事。什么是框架?用一句话总结,我的理解就是:
一种可以让能力差别较大的开发者写出功能、性能差不多的代码的库
不知道大家能不能理解这种说法,我举个例子:如果使用HttpUrlConnection来写网络请求,可能不同能力的开发者写出来的代码不一样,网络请求的性能和效果也不一样。但是如果使用了okhttp库,只要看一看okhttp的文档,新手和老手写出来的代码估计差不多,性能和效果也差不多,这就是框架做出的最大的贡献。在这些框架的基础上,P5写的代码可能和P6、P7区别不会多大。然而,这些框架总要有人开发,开源的框架往往不能满足公司业务的需求,需要自研基础框架。尤其是BAT、TMD六家公司,移动端框架有大部分都是自研的,越来越多的公司也开始自研,所以如果是在这个方向有经验的移动开发者,在APP被淘汰之前,应该都不会被淘汰。这方面对移动开发者的知识深度和广度都要求相对较高,需要沉淀和学习。
Android工具类应用
这个就比较特殊了,这类应用我举个例子:360手机助手。对于Android用户来说,清理内存、清理垃圾等已经成为了一种习惯,这方面应用的开发自然是不可少的,而且非常考验对Android知识的深度,你们懂得。
结语
上面六个(七个)移动端开发方向,是我总结出来的有潜力有前景的方向,各位移动开发同学可以参考,可以选择一个方向进行深挖,相信一定会有收获。嘴上焦虑是没有意义的,最好的办法就是付出行动。积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。