今年的行情相对去年整体要差一些,很多同学发现很多公司招人,兴冲冲去面试了,结果面了几家都是等通知,实际上就是招聘的职位有限,面试的人很多。
寒冬真的来了吗?我觉得未必,只是移动开发不热门了而已,竞争更激烈的而已,需求还是有的,移动端程序员和PC时代的程序员还是不同的,目前还没有出现能够替代手机的这种高频使用的物品。
作为曾经炙手可热的Android工程师,现在可能面临着以下的问题:
互联网整体环境不乐观
Android开发人员众多但岗位减少,导致要求越来越苛刻
大前端趋势、跨平台方案频出、小程序肆虐,Android不再是应用开发唯一的方案
人工智能、大数据等技术炒的火热,培训机构倾巢出动,学校学生疯狂学习,而大学学Android出来找工作很一般。
从上面几点来看,说Android工程师是四面楚歌真的不为过,我会从以下几个方面来进行分析,请轻拍。
- 解除对Android的误解
- 是否要转行
- 如何提升竞争力
1. 解除对Android的误解
无论是Android同行还是其他技术领域,明显都对Android有些误解。作为Android开发来说,如果对Android有误解可能会影响到后续的发展和决定,我有必要来消除这个误解。
1.1 Android系统的未来
Android系统是根,没了它,Android工程师也不存在了。
在我的记忆中,早在2011年就有言论说Android系统要完蛋,时过9年后,Android系统仍旧坚挺。目前对它唯一有威胁的是谷歌的Fuchsia,谷歌的真正用意可能是做个备选而不是替代,因为替代的难度太大了,现在Android已经广泛的应用在手机、平板、车联网、物联网、智能电视等等领域,是名副其实的终端霸主。
我们不说手机,就说智能电视和智能投影机,这些早已普遍应用于各个家庭,新弄一个系统,就想让开发人员重新开发这些定制系统和应用吗?真的很难卖账,更别说手机了,忽悠人家学Fuchsia,你当安卓开发都是傻子喜欢重蹈覆辙?Android不是塞班,岂是想替代就能替代的,这难度好比重新开发个PC操作系统替代windows一般。所以Android系统还会存活很长的时间,具体多久不好预测,应该比大多数程序员的职业生涯要长。
最近鸿蒙也出来了,很多同学问我鸿蒙对安卓有威胁嘛,别的角度不说,单纯从打工人的角度,鸿蒙的出现实际上会有利于安卓开发,因为其他技术分支做的话学习成本很高,安卓开发可以无缝切入鸿蒙进行鸿蒙开发,目前已经有安卓工程师同时进行安卓和鸿蒙的开发了,开一份工资做两份工作,你说你老板开不开心?
1.2 Android的未来就业趋势
虽然现在Android的就业形势不大好,但是其他技术领域的就业趋势也不乐观,这是因为现在高校和培训机构大量的培养人员涌入。我05年上大学时,软件工程专业不是很火爆,学一些常规的技术,比如算法与数据结构、c++程序设计、面向对象方法及程序设计等等,毕业了也就是搞搞C++,做做Java Web和.NET等等。
而放眼现在,IT相关的专业简直就是火爆,大家都觉得这行有发展赚钱多,因此越来越多的学生报考了相关专业,很多大学都有移动互联应用技术专业,还有人工智能学院,每年都有大量的大学毕业生和培训机构出来的涌入市场,而中国的互联网企业显然不需要这么多的人才,最终的结果可想而知还是狼多肉少。
我们大概可以预测到未来Android开发的人数会增长缓慢,考虑到企业未来的职位,Android未来的就业趋势仍旧是平稳的,但其他的技术领域就不好说了,毕竟什么领域也抗不住涌入的人巨多啊。
最近又听说很多人转行安卓了?what?49年入国军?还真不是,因为现在很多技术分支人数太多了,物极必反,转安卓也没啥大惊小怪的。
1.3 Android开发的天花板
很多人会觉得Android技术深度不深,技术栈不庞大,Android职业发展有限,这个真是大大的误解。
先说技术上,Android的技术栈随着时间的推移变得越来越庞大,细分领域也越来越多,主要有Android应用开发、逆向安全、音视频、车联网、物联网、手机开发和SDK开发等等,每个细分领域都有很多技术栈组成,深度都足够精深,就拿所有细分领域通用的Android系统底层源码来说,就会叫你学起来生不如死。
再说职业上,确实Android应用开发很难升任CTO和技术总监,一般的CTO和技术总监主要是后端,这主要是两个原因:
后端的技术栈很早就成熟了,我10年前转做Android开发时,那帮30多岁的Java开发就已经很厉害了,随着时间的推移,后端技术大牛远比Android大牛的人数要多,也更厉害,他们做技术经理时,我们都还在搬砖。
后端确实可以统筹全局,在公司业务上属于重要地位。
不过我们忽略了最重要的一点,如果我们是做后端的,一定能做到CTO和技术总监吗?我想也是很难的,所以不要眼睛只盯着高处,先想想自己能达到什么程度,站在半山腰就说山下面的风景不开阔本身也不合理啊。
2.是否要转行
Android不热门了,很多Android开发已经转行了,有的正走在转行的路上,还有的迟疑不决,到底要不要转呢?我们来分析下。
2.1 转什么最好
每个人的自身情况不同,转的方向也会有所区别,转人工智能相关开发貌似是最好的,不过最近人工智能风头没有去年高了,而且人工智能相关对学历和算法要求很高,最起码得是个硕士吧,而且这只是低配。那么大多数Android开发可以转的方向主要有前端、后端和python等等。我大概说一下:
1.转前端,这个是我认为最好转的一个方向,前端的理念很多都和Android类似,也可以作为Android的延伸,向大前端发展,如果对界面感兴趣的可以转前端试试。
2.转后端,后端这个就是完全的转行了,看似Java大家都会,但是后端的技术栈可不是只有Java,各种框架绝对叫你头大,很多人强调后端技术深,各种处理高并发看似十分有技术含量,不过这只是为数不多的公司在做。如果想要稳定的可以转后端试试。
3.转python,python貌似是很火,因为他跟人工智能发生了关联,其实大部分学python的没有搞什么人工智能相关,基本都是在搞爬虫。追求浪潮的可以转python试试。
2.2 不要轻易转行,要转就尽早转
转行有两种我认为是正常的,一种是行业消失或者没落了,个人无法施展才华。另一种是兴趣不在本行,因此转一个自己感兴趣的。而现在大部分转行纯属是为了跟风,为了那点钱,而忽略了长期的发展。我们来看看下面的图。
这个图不完全准确,只是为了更好的说明一些问题。
从图中可以看出,大部分人在35岁前是在加速期,35岁后是上升或者衰落期。
以Android开发转前端来说,假设一个Android高级A同学转行前端会变为前端初级或者中级,这时从事前端的人都在加速提高,A同学要想赶超前面的拥有同样加速度的人是很难办到的,这就导致他在转行前期极为被动,A同学还要保证在35岁前成为前端专家或者Leader才有可能在35岁后不进入衰落期,当然这时A同学的Android如果不经过实践和学习基本也就荒废了,很难成为专家。
如果还想要在技术领域走的更远,就不要轻易的进行转行,如果想要转越早越好,越快越好,因为其他的竞争者都在加速提高,没人会停下等你的。
2.3 转行大部分都不是质变
一个开发的质变可以理解为在一个领域的大幅提升,或者是不相关领域的跨界,举个例子:可以在Android领域由高级质变为了专家,或者是由一个高级开发升到了Leader,再或者跨界开始做了一些技术相关的培训、演讲、出书等等而被人所熟知,再或者是创业、搞副业等等拓宽了赚钱的渠道。
凡是能帮助35岁后不进入衰退期的都可以看做是一次质变,而转行很少是质变,更多的是倒退回到原点重新出发,形象点来说,就是换了个不同的砖头接着搬砖而已(高技术含量的除外)。因此我们更应该去追求质变,而不是平行或者倒退,一次倒退可以承受,多次倒退就很难在35岁后进入上升期。
3. 如何提升竞争力
看到这里,如果你还是想转行的话就不要看下去了,我们来说下Android如何提升竞争力。
3.1 选择一个细分领域
Android现在细分的领域非常多,前面说到的有应用开发、逆向安全、音视频、车联网、物联网、手机开发、SDK开发和智能电视盒子开发等等,在这些领域中选择一个并不断深入。比如音视频,在10年前我刚入门Android时,音视频就是闷声发大财了(PC端),工资高的令人乍舌,现在在移动端,音视频更是青出于蓝,是一个非常好的选择,如果想要入门可以看看何俊林《Android音视频开发》。
3.2 尽量学习半衰期长的知识
知识半衰期指的是:随着知识更新周期变短,知识裂变速度加快,一个知识落伍的周期。
知识半衰期长的职业都是越老越值钱的,比如英语老师和外科医生,知识更新慢并且几乎不会落伍。这一点我们程序员是绝对比不了的,我们的大部分知识半衰期是比较短的,一个框架短短几年可能就会被淘汰,这也导致程序员需要不断的学习新知识,而我们每个人的时间和精力是有限的,那么根据知识半衰期,有策略的进行学习就变得尤为重要。
上面的半衰期图不完全准确,但是却值得参考,如果你是其他的技术领域也可以参考这个半衰期图。这个图不是告诉我们不要去学RN和小程序,而是结合自身工作尽量学习半衰期长的知识。
3.3 做减法,尽量专精一门技术
现在的社会,技术分工越来越细,越细就意味着大部分企业(小作坊除外)需要专精的人才(最好是精通一门通多门)。你会发现身边脱颖而出的技术人大多都是靠一门技术,却很少看到会一堆技术却都不精通的冒出来。好比在武侠的世界,高手对决都在同一个时间段拿出看家武学,如果看家武学都不精,分分钟被虐,省下的武学也无需拿出来献丑了。联想到现实版本就是去大公司面试Android,结果Android技术了解不深,被各种虐,剩下的前端技术、后端技术、python什么的,面试官也没兴趣了解了。
所以并不是你会的技术越多越好,一定要做好减法,先专精一门,然后再去学别的技术。
3.5 到底要深入学什么?
根据知识的半衰期,作为Android应用开发最应该学习的就是:
Java基础、App开发相关技术、Android系统底层源码、数据结构、设计模式、网络相关等等。
这显然还不够,还有一个最重要的知识没有讲,那就是Android系统底层源码,这是知识半衰期长并且通用的知识,不论你从事Android哪个细分领域,Android系统底层源码都是你需要掌握的,并且它会让你拥有较强的竞争力,这是因为较长的时间学习也只能掌握皮毛。
4. 带领大家一起学习
如果你不知道怎么学习,我这里给大家提供一个方向,进行体系化的学习!
除了上面的学习路线,还给大家整理了一份Android进阶学习资料,主要为安卓相关知识点及面试资料为主,在这个PDF中,通过详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这个PDF中有所收获。一些基础不好的,这里也有一份安卓基础资料包,帮助巩固基础。
以下是这份PDF主要内容:
- Android 核心技术:介绍 Android 开发中常用的核心技术,比如自定义 View、Handler,以及一些开源框架的原理实现,来夯实你的底层能力。只有底层能力足够出色,之后的进阶之路才会更加轻松。
- 常见问题剖析:介绍一些项目中常见的疑难问题,使你能够对现有项目做出合理的重构优化。
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结:
通过源码来系统性地学习
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
刷题备战,直通大厂
历时半年,我们整理了这份市面上最全面的安卓面试题解析大全。
1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
2.五角星数表示面试问到的频率,代表重要推荐指数
以上内容均放在了开源项目:【github】 中已收录,大家可以自行获取(或者关注主页扫描加微信获取)。
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!