Android开发没有一技之长就废了吗?

写在前面的话
不知你发现没有,人到中年之后,时间流逝的速度仿佛越来越快?
还记得毕业那会儿,我们怀着新鲜和好奇踏进了职场,那个时候每天都是满满的挑战和需要学习的东西,感觉时间过得真慢啊;
不知道从什么时候开始,工作渐渐变得索然无味,日子过得越来越快了,还没等你察觉,大把大把的光阴就在你眼皮底下溜走了。
时间像是飞速旋转的车轮,裹挟着我们每个人。
对于一些35岁以上的Android开发来说,正面临或即将面临一个尴尬的境地——
当所处行业不再负有过去的风光,自己多年磨练的技术也面临着惨淡的前景,渐渐地,曾经引以为豪的职场经验,正在无形中加速贬值。
或许,正是多年前那句“学一门技术吧,越老越吃香”的至理名言,把这些中年人推向了极度寒冷的“职场断崖”。

一、人到中年是怎样的一种体验?
两个字,孤独。
有段话是这样说的:
“所谓人到中年,就是时常会觉得孤独,因为一睁开眼睛,周围都是要依靠TA的人,却没有TA可以依靠的人。”
一位朋友在和我聊天的时候谈到今天遭遇的职业困境,长长地叹了一口气。
“从刚毕业那会儿工作到今天,从来没有想到过自己会走上这一步......”他感慨道:“倒也不是没有先兆,最开始是削减年终奖,到后来是工资缩水,那几年也都人心惶惶,有的人就选择了离开,自谋生路去了......”
“也有人劝我走,但是一来我的年纪也大了,转眼都快35了;二来我当年学的这项技术,如今整个行业都已经非常饱和了,出去了也不好找工作;三来我对这个公司多少还有感情,我和老张老李这些人共事了四五年了,大家相处的和一家人一样。怎么能说割舍就轻易割舍下呢?”
他说着,眼眶不禁湿润了。
二、断崖之痛
Android作为一个已经市场化十余年的技术门类,它必然早已经是成熟常态。这样的技术行业都不再会有爆炸式的增长。连同Android硬件、手机、平板等都会趋于稳定,再就是一个稳中逐步下降的趋势。对于这方面人才供需也会趋于稳定,市场对开发者的从业经验,项目背景要求都会逐步提高。
我心知肚明,我的这位朋友面临的职业困境用“断崖”来形容毫不夸张。
一方面,由于他这些年在公司过得比较安稳,再加上没有一个拿得出手的项目,意味着想要保持现有的收入跳到另一家,几乎是没有可能了;另一方面,新技术的涌现以及大批90后、00后的崛起,让他面临着极为严峻的再就业压力。
多年以来,那句“没有一技之长是中年人最大的可悲”放在当今的时代背景下,似乎渐渐不适用了。
瞬息万变的技术圈对于我们这些从事技术工作的职场人提出了更高的要求,如果能尽早在原有技能基础上添加一些新的技能,形成“技能混合体”,则未来的职场竞争力会更强。
三、Android开发人员应该掌握哪些技术?
这里我找来一则高级Android开发的招聘要求:

这是小米在拉勾上的招聘要求,相当于p5到p6级别,除开学历的要求外,我们可以看到它在Android基础要求之外,把JNI/NDK/Framework,甚至JS、Server端开发也作为了提升点,是全栈方向的雏形。我觉得大家可以经常在招聘网站里看看现在的企业需要什么技术,当然也不能把企业要求的都学了。我这里大致总结了一下,Android开发人员的发展方向:
第一,横向提升。
基于全栈发展的趋势,在自己擅长领域深入专研的同时横向扩展,不要关起门来闭门造车。而这里说的横向提升就是向全前端转型,在除了要在APP会hybrid开发(web、native、前端交互、硬件交互)之外,还要会web开发,微信小程序,H5。
比如服务端开发,我们做Android开发很多时候,要依赖于服务端接口返回数据,可以自己试着搭建一下,至少要对服务端的结构理论、服务与服务之间通信、聚合是什么样的流程也是需要有所耳闻。
第二,纵向重塑。
一直以来,做Android开发有这么两个说法,如果是做应用开发,往应用架构方向发展比较合适,如果是做系统层开发,往往底层驱动比较合适。这里我是比较赞同的,那具体应该学习什么呢?
1.移动架构:架构展示层: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components;架构层:模块化->组件化->插件化->沙盒/双开技术,比如可以双开微信,类似Docker, 每个页面都是插件,类似Vue.js中每个页面都是组件。
2.基础进阶:这个方向可能比较多,比如VIEW、Android动画机制、四大组件工作原理、多媒体技术等等。我们平常在工作中碰到的View滑动冲突问题、其实通过掌握View工作机制和Android触摸事件体系就能轻易解决掉。还有对于需要开发绚丽的动画效果,那么对于视图动画和属性动画一些特性必须有一定的了解。Android 中的四大组件工作机制其实底层应用的是Binder机制,我们不妨从 AIDL 这个接口来了解 Binder。
JNI 和 NDK 开发也是比较常见,特别对于一些做 SDK 项目为主的,这一块开发流程也是需要掌握,NDK开发(含JNI)也是用人单位区分应聘者的手段之一,企业不一定要用到,但是可以通过是否掌握NDK来筛选人才。
3.语言学习开发语言:这里我要纠正一下学习语言不是跨行业,比如Kotlin可以说是Android世界的头等公民了。再有时下比较火的Python和GO,另外做底层C/C++是必不可少的。
4.源码:要求能看懂并且熟悉源码(自己选几个第三方库的也可以),要做到熟悉源码及其实现原理。并且要做到能自己二次封装(或自己贡献三方库)三方库。这样一来,你就会在维护中慢慢成为这个技术块的专家了。我觉得输出倒逼输入是一个不错的学习方式。
..........

下面对知识点做一个具体的梳理:
架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
微信小程序:小程序介绍+UI开发+API操作+微信对接
Hybrid 开发与Flutter:Html5项目实战+Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

以上内容均放在了开源项目:【github】 中已收录,大家可以自行获取,免费分享给大家。
Android开发没有一技之长就废了吗?的更多相关文章
- Android开发-之认识palette
Android开发中,Google工程师已经给我们封装好了很多的按钮,使得我们在开发中非常的方便和便捷. 那么今天就来认识一下常用的按钮,那么在之前的课程中我已经详细讲过了Button按钮,那么这里就 ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- Android 开发一定要看的15个实战项目
前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...
- Android开发学习之路-关于Exception
Exception在Java中是表示异常的一个类.它是Throwable的子类. 而Exception的子类RuntimeException是一个特殊的异常类,在代码中不需要对此类进行throw,而是 ...
- Android开发学习之路-Android中使用RxJava
RxJava的核心内容很简单,就是进行异步操作.类似于Handler和AsyncTask的功能,但是在代码结构上不同. RxJava使用了观察者模式和建造者模式中的链式调用(类似于C#的LINQ). ...
- Android开发学习之路-记一次CSDN公开课
今天的CSDN公开课Android事件处理重难点快速掌握中老师讲到一个概念我觉得不正确. 原话是这样的:点击事件可以通过事件监听和回调两种方法实现. 我一听到之后我的表情是这样的: 这跟我学的看的都不 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发-之监听button点击事件
一.实现button点击事件的方法 实现button点击事件的监听方法有很多种,这里总结了常用的四种方法: 1.匿名内部类 2.外部类(独立类) 3.实现OnClickListener接口 4.添加X ...
- Android 开发环境在 Windows7 下的部署安装
Android SDK Android SDK 为 Android 应用的开发.测试和调试提了必要的API库和开发工具. ADT Bundle 下载 如果你是一个android 开发新手,推荐你下载使 ...
随机推荐
- 30、LNAP(php和nginx相关优化)
30.1.php-fpm.conf参数优化: [global] pid = run/php-fpm.pid #php后台运行pid路径 error_log = log/php-fpm.log #php ...
- 45、django工程(URLconf)
45.1.django URLconf 路由系统介绍: 1.说明: URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表, ...
- Oracle数据库——Mybatis在一个update标签下执行多更新语句
begin update table table1 set com1 ='1' ; update table table2 set com1 ='1' ; end;
- POJ 1556 计算几何 判断线段相交 最短路
题意: 在一个左下角坐标为(0,0),右上角坐标为(10,10)的矩形内,起点为(0,5),终点为(10,5),中间会有许多扇垂直于x轴的门,求从起点到终点在能走的情况下的最短距离. 分析: 既然是求 ...
- angular组件间的通信(父子、不同组件的数据、方法的传递和调用)
angular组件间的通信(父子.不同组件的数据.方法的传递和调用) 一.不同组件的传值(使用服务解决) 1.创建服务组件 不同组件相互传递,使用服务组件,比较方便,简单,容易.先将公共组件写在服务的 ...
- html javascript checkbox实现全选功能
html代码 <input type="checkbox" id="all" />all</input> <input type= ...
- sscanf功能详解(转)
#include <stdio.h> #include <stdlib.h> #include <string.h> static void sscanf_test ...
- MySQL | 使用Xtrabackup进行备份和备份恢复
备份 进行备份前需要先创建备份用户,直接使用 root 用户进行备份也行,但是这样不太规范. create user backup@'localhost' identified by '123456' ...
- VMware中的虚机如何挂载U盘
1.将U盘插入到宿主机上. 2.在VM Client上,点击宿主机,右键,扫描存储设备(目的是为了发现新USB存储) 3.在需要的虚拟机上编辑配置,添加硬件,添加USB设备(如果不进行以上2个步骤,此 ...
- 使用Nginx和uwsgi部署Flask项目
前言 之前用Flask框架开发了一个Python的Web项目,使用Nginx和uWSGI部署起来感觉挺麻烦,过程中还因为对Flask框架的不熟悉,花了好长时间才把应用完全部署起来.下面分享部署成功 ...