移动端开发的未来在哪里?-Tamic博客
点击上方“开发者技术前线”,选择“置顶或者星标” 属于你的文章一触即达!
我是一名 Android 开发者。从去年下半年开始,就开始听到各种言论,例如 “Android 开发凉凉”、“移动端开发没出路了赶紧转行”、“要被 XXX 替代了” 等等,充分反映了大家焦虑的心态。移动端开发真的要凉凉了吗?我也经常和朋友聊起这个话题,今天我决定写下自己的一些看法,供大家参考。
现状
移动端开发的现状是什么?我们可以从自己写的代码中寻找线索。以 Android 为例,很多大公司的移动端开发者写的最多的代码是这样的:
LinearLayout layout = new LinearLayout();
layout.addView(xxxx);
...
或者也许是这样的:
public class XXXView extends RelativeLayout {
public XXXView(Context context) {this(context, null);
}public XXXView(Context context,@Nullable AttributeSet attrs) {this(context, attrs, 0);
}public XXXView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initView();
}private void initView() {LayoutInflater.from(getContext()).inflate(R.layout.xxxlayout, this, true);...
}public void setData(XXX xxx) {...
}
}
又或者是对着 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 知识的深度,你们懂得。
结语
上面六个(七个)移动端开发方向,是我总结出来的有潜力有前景的方向,各位移动开发同学可以参考,可以选择一个方向进行深挖,相信一定会有收获。嘴上焦虑是没有意义的,最好的办法就是付出行动。积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。
作者:美团立成
转载声明:本文转载自「InterestDriven」
第一时间获取技术文章请关注微信公众号!
移动端开发的未来在哪里?-Tamic博客相关推荐
- 开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享
开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享 一.优秀的流媒体博客资源 1.1 EasyNVR:专注于安防视频互联网化的技术 1 ...
- 【Nodejs博客项目开发】之原生nodejs实现博客系统(五)
[Nodejs博客项目开发]之原生nodejs实现博客系统(五) 一.session存入redis 首先下载redis模块:npm i redis --save db.js 配置redis const ...
- 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
原文:使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 摘要 通过对博客文章的管理,实现外键操作. 目录[-] 八.博客文章管理 1.查看文章 2.添加博客 3 ...
- Django 学习小组:博客开发实战第二周教程 —— 实现博客详情页面和分类页面
本教程内容已过时,更新版教程请访问: django 博客开发入门教程. 上周我们完成了博客的 Model 部分,以及 Blog 的首页视图 IndexView. 本节接上周的文档 Django 学习小 ...
- Android资源总结(开发工具/环境搭建/教程/论坛/博客/反编译工具)
Android资源总结(开发工具/环境搭建/教程/论坛/博客/反编译工具) 在Android发展前景相当好的情况下,本人最近搜集了一些关于Android的相关资源,当然包含以前发布的博客内容,进行了一 ...
- 安卓开发笔记——打造属于自己的博客园APP(一)
最近事情比较多,博客更新又落下了,平时有个习惯,喜欢睡前看看博客园里博友的文章,但一直感觉APP市场上下载下来的博客园客户端用起来并不是很舒服,近来发现博客园也有对外开放的数据接口,所以打算自己写个博 ...
- 【Nodejs博客项目开发】之原生nodejs实现博客系统(一)
[Nodejs博客项目开发]之原生nodejs实现博客系统(一) >>目录 [Nodejs博客项目开发]之原生nodejs实现博客系统(一) 一.接口设计 二.基本目录结构 三.`www. ...
- 全栈开发实战(一)——简易博客社区后端搭建教程(附源码)
全栈开发实战(一)--简易博客社区后端搭建 项目展示视频 项目Github地址 (一)项目准备 在项目开始前,首先确保你已安装好Go语言并配置好Go语言编辑器,同时安装好MySQL或其他数据库,其次, ...
- 限制会话id服务端不共享_会话控制 - able-woman - 博客园
会话控制是什么? cookie和session都是跟踪整个会话过程的技术手段.而会话,就是用户通过浏览器和服务器的一次通话. 为什么要有会话控制? 因为HTTP协议是无状态的,服务器不知道用户上一次做 ...
- Android软件开发实例:用客户端写博客
标题:在Android上通过客户端写博客软件开发实例 作者:肖凤斌 binsweet@gmail.com 关注Android很久了,年初买了G4,但一直没有机会尝试Android上的软件开发. 自己有 ...
最新文章
- hdu4400 BFS+STL
- anaconda python2.7,安装在windows中的Python 2.7 Anaconda2
- 普通java项目配置mybatis是总是显示数据库驱动找不到
- Dubbo启动,调用方法失败【问题:调用超时】
- BZOJ1453: [Wc]Dface双面棋盘
- docker-ce安装
- pythonasyncio并发编程实战_python异步编程之asyncio(百万并发)
- 处理入参_看看优秀的程序员是如何处理NPE的
- vue封装websocket_有关WebSocket必须了解的知识
- 烟台大学计算机学院学院,烟台大学计算机学院
- leetcode691:Stickers to Spell Word
- Mysql主备延迟的来源
- 老男孩Linux笔记,运维/后端/服务器领域
- 技术书籍也香艳-《Head First设计模式》第二版即将出版
- 如何用AutoRunner进行脚本手工编写
- 【GBT28181开发:SIP协议实践】之设备状态查询
- 搭建syslog日志服务器
- Gauss型求积公式及其Matlab程序
- 【报告分享】快手男性消费用户洞察-36Kr磁力引擎(附下载)
- 如何实现网页分享到微信,微博,空间
热门文章
- pytorch实现LeNet5手写数字识别+各层特征图可视化
- 电脑钢琴模拟器(初学WINDOW库)
- 计蒜客 Rock Paper Scissors Lizard Spock.
- WPF模板(一)详细介绍
- 政府部门服务器拒收邮件 怎么办,hotmail 邮箱最近反映拒收邮件,请问怎么解决?...
- Python爬虫 爬取dota2官网英雄缺少英雄
- Wannacry浅析
- mod函数在vb中怎么用?
- 基于android平台的感光设计,基于Android手机摄像头的可见光通信技术研究
- Linguistic Regularities in Continuous Space Word Representations