移动开发兴起的时间并不长,但发展十分迅猛。
这些天经历了一些工作上的波折,出来面试找工作,发现市场的变化实在太快了。
自己进入了一个泥潭,技能不够,面试时毫无优势。
于是自己思考了许久,到底是哪里出了问题,写下一些分析和感悟,希望自己能够走出这个泥潭,找到自己正确的方向。
移动开发兴起的时间并不长,但发展十分迅猛。我们可以通过一些时间点来看:
- 2011年8月推出小米1,当时我是第一批前10w预约的用户,拿到手了都已经是2012年初(熟练的耍猴功底)。
- Android 4.1Jelly Bean(果冻豆):2012年6月28日;
- Android 4.2Jelly Bean(果冻豆):2012年10月30日;
- Android 4.4KitKat(奇巧巧克力): 2013年9月4日;
4.X系统是在移动开发兴起时使用人数最多的,大部分开发也正是在 API 16的时候加入进来。
来看一下当时的大环境,在2013-2015这几年,移动开发处于风口,大量的投资者和公司都想做个 APP 出来,无数的人和资金涌向互联网移动开发。一时间造成了前端开发供不应求,大量的零经验培训应运而生,也有不少后台转行学习前端,我正巧是这批人的其中一员。
这个时期大部分的公司,想做的 APP 都只有一个功能点 - 数据展示。
数据展示应该是 APP 最基础的功能。说白了,APP 就是一个给用户展示数据的前端,例如:淘宝、京东、美团等,就是将商品信息等数据,展示在 APP 上。而 APP 还需要一些美化,例如动画效果、自定义控件等等。也就是说,这些在移动开发风口投入到 Android 开发中的,大部分都是做** UI 界面开发**,这也是最常见 Android开发。
回到现在,如果有人说想学习 Android,很多人都是不推荐的;如果有人想跳槽,那么大多数人给的建议是不要裸辞,为什么?
时代变了。
在市场的激烈竞争和淘汰下,有很多公司都已经不复存在了。公司没了,但开发人员还在这个市场中,这就造成了开发人员供大于求,就连培训机构都不开设 Android/iOS 培训班。
同时有经验和没经验的相差不大,打个比方,一个有经验开发人员可以通过各种方法比如之前的项目、GitHub、Google等等,快速的将项目打造完毕,不用加班效果还很不错;
而一个刚出来没经验的开发人员,通过加班加点、百度Google、自己琢磨等方法,还是能打造出一个能用的项目,虽然效果可能没有那么好。
这让有经验的开发的优势变的不那么明显。更重要的是工资摆在哪,每个老板都想花更少的钱做出产品,从业人员基数大、需求少、经验差距不明显等因素,造成了一个工作难找的现象。
移动端开发的人基本都同意工作不好找,并且都认为这是属于正常现象,市场归于常态。那么是不是也用这样的话来安慰自己:多找找总能找到好的。
不对,应该多学习,从而提高自己竞争力。
从2013年到现在,短短的4年时间,技术变更太迅猛。原先以为在学习了 UI 开发,花个2-3年时间巩固加强,在寻找其他方向就可以,但实际上完全没有巩固的时间,在巩固旧技术的时候,新技术已经诞生并应用,也就是说不应该去巩固熟悉技术,而是要不断的学习和使用新技术。
现在市场依然有一大堆开发人员在和你竞争同一个岗位,如果你仅仅只是比别人多做了两个项目,多用了几个第三方 SDK,多用了几个开源库,那么一下子就落后了。因为使用的这些东西都是别人已经使用过的。
想从开发人群中脱颖而出,最关键的还是掌握别人需要花时间来才能追赶你的技术。
如果现在的工作还只是做一些没有什么难度的需求,写个RecycleView,把数据展示出来,修复一下测试提出的Bug,自己封装了几个方法,为此就洋洋自喜:我这代码写的真不错!那么可能就要思考一下这个问题:你做的这些,换成别人来做需要多久时间?
你想到的别人早就已去做了。
从哪些方面入手,该学什么,这也是我这几天在摸索的东西。个人觉得,首先需要的是多方面的了解,也就是广度,其次再谈深度。不能一味的只做 UI 开发,应该更多方面去了解和学习其他方面的技术。有了广度之后,结合工作上的内容,深入学习,才能真正拥有核心技术,让自己更有竞争力。
以下是我自己最近看到的一些技术点
热更新
热更新是最近一两年特别火的技术,已经趋向于完善,一定不要去在意什么苹果公司禁用热更新云云,上有政策下有对策,这个技术始终是要去克服的。
目前比较流行的热更新技术有:Dexposed、AndFix、ClassLoader、Tinker、Nuwa、Robust等等
相关文章 Android 热修复专题模块化
模块化也是最近经常被提起的一个技术,以前的移动开发都是重功能,轻架构,实现模块化不仅是功能上的,还需要架构方面的知识,例如MVP、MVVC。
相关文章 安居客 Android 项目架构演进动态加载
动态加载一般是结合模块化。比如说一个 APP 有 A、B、C三个模块,在安装完 APP 后,只有A模块可以直接使用,B 模块需要通过网络下载,也就是动态加载后才可以使用,这样就可以减小 APK 体积
还有的 APP 随着功能的增加,引用到分第三方 SDK 越来越多,导致 APK 大小过于庞大,最主要的一个原因就是加入了太多的 .so文件,也可使用动态加载,先判断自己的机型再来加载相应的 .so文件
相关文章 动态加载简单易懂的介绍方式launcher开发
这也是我最近面试看到的,有关的资料我也在查看。
launcher其实就是一个app,它的作用用来显示和管理手机上其他App。目前市场上有很多第三方的launcher应用,比如“小米桌面”、“91桌面”等等
相关文章 Launcher开发——入门篇SDK 开发
我用过很多第三方 SDK 比如友盟、百度地图、支付宝、微信、新浪等等,感觉 SDK 都是大公司做的,似乎跟自己沾不上边。
然而有很多其他公司也会做自己的 SDK,他们也有着自己的市场。比如通过手机连接摄像头查看视频,这就需要自己的 SDK 开发,让使用者调用。
相关文章Android SDK 开发(第一部分)视频开发
要说这一两年最火的莫过于直播行业,这就涉及到视频播放、视频压缩、视频上传、在线播放等许多技术
BILIBILI播放器 github - ijkplayer
吐槽第三方Android客户端 github - Tucao反编译
反编译这块我自己也不是很了解,个人觉得应该是类似360加固的这种,需要用到这个技术.
网上很多反编译的文章都停留在2014年,相关工具早已不能使用,可以搜索关键词:Smali 、jd-gui。
-游戏开发
游戏开发已经脱离了 APP 层面,需要更多技术来支持
相关的技术点视乎很多,想要全部精通视乎遥不可及。我工作了两三年了,现在开始寻找一个好的平台来发展自己,刚步入开发的时候,并不需要想这么多,技术都是在工作中去积累的。而当自己需要提高的时候,公司平台的重要性就会体现出来。为什么这么多人想去BAT等大公司,就是因为那里的开发环境和氛围好,有良好的团队和人群一同交流进步。如果在一个公司,没有自己的技术团队,没有人愿意去做技术的更新和重构,那么你的技术和工资就水平就很可能止步不前。技术还是要在工作上去使用才能更快的掌握和进步。
另外更重要的就是基础,我也买了一本 Think in Java来看,Google的Android文档现在也已经翻译了不少developer.android.com,也可以在闲暇之余看看。
自勉。