移动寒冬
18 年的冬真冷, 大家都在说裁员, 其实裁员一直都在, 只是 18 年的确多点. Android 10 年了, 已经积累了太多的技术, 知识点, 技巧, 思路, 这些前人都会了, 并且正在创造新的思路出来, 对于广大的底层 coder 来说, 仅仅是追赶就很难了, 更别提去自己创造了, 但是现实时我们尝尝学习了很多开源框架, 落到实处就是仅仅会用而已, 不说源码看没看过, 甚至原理都不知道, 不知道作者用什么技术实现的, 这点就是广大 coder 的现状, 没有成长.
在来说大环境, 在寒冷的冬天, 还是有很多公司再招聘. 在移动设备深入人心的今天, 大家谁能离得开移动物联网设备, 巨大的设备保有量决定了移动端市场需求还是旺盛的. 企业需要什么的移动 coder, 中高端啊. 从我们把页面 code 出来的入门水平开始, 成长到中级水平, 说实话还是非常不容易的, 事实是从平均来看, 2-3 年成长到中级的人也不是非常多的. 企业再面试时也只能通过大量面试才能找到一个合心的高级开发, 此过程耗时费力, 说明大家水平相对需求来说还是太低, 有待继续加强!
冬天冷的不是市场, 是处于行业低端的我们, 移动开发行业, 不进步就会死, 永远也不会改变, 大家闷头努力一年, 我们都能有个好收获的, 再去面试机会机会大很多.
Android 程序员薪酬
Android 程序员开发年限及薪资:
如果你的薪资还没超越 20K , 说明你的安卓做的还不够好.
一方面, 技术能力, 知识面太窄了. 建议多个模块功能都尝试一下. 不能仅仅在自己公司的项目上, 其他方面都不太精通. 这样的结果, 对自己发展不太好.(比如, 对自己公司的功能做的贼好. 贼了解. 问一个其他方面功能模块, 就不知道了. 建议多方面都发展, 并且多做数据分析. 比如百度指数, 阿里指数, App 功能指数, 今日头条指数. 然后自己往这些方向发展一下. 比如 2018 年 - 2020 年, 项目中小视频, 社区中小视频, 直播, 都会在项目中添加. 这方面经验丰富的人需求很高).
第二: 有的同学是真的有能力, 会做; 但是能继续深入的理解原理, 或者知道原理了, 自己怎么去解决问题 (而不是百度解决) 的能力就差一点了. 比如很多人在面试中都面临的, 不会说, 但是你会写, 能写出来. 为什么不会说, 因为不是清楚系统的理解, 所以不能回答的很好.
现实是我们夯实技术, 扩展知识面之后, 20K 是比较容易达到的, 但是想过 30K 就很难了. 那些能在 GitHub 写自己开源项目, 比如 okhttp,retrofit ,rxjava 这样重量级开源框架的 coder 才能过 50K . 着期中的差距, 大家自己体会吧, 努力可以过 20k, 长久不停的努力积累之后才有过 30K 的希望, 道路任重道远, 大家努力珍重. 再着期中要平衡工作, 生活, 家庭, 健康是个大问题, 唯有高效率才是根本出路~
Android 层级划分
通常, 我们将 Android 水平可以划分为: 入门, 初级, 中级, 高级, 资深.
但是这样的划分对我们没有什么指导意义, 不同层级的 Android 开发者的不同行为, 我们该如何进阶和规划呢?
第一层: 普通程序员
第二层: 熟练开发者, 高级开发工程师, 技术组长
第三层: 技术专家, 架构师, 一线经理
第四层: 科学家, 研究员, 首席 (资深) 架构师, 部门研发总监
Android 如何过冬
上帝总是偏爱那些爱思考的人, 爱思考的人运气一般也不会太差, 在 哪有什么互联网寒冬? 只是你穿的少而已! 一文中, 作者大概聊了聊关于思考的话题, 我觉得大家应该去看看, 然后思考下自己
技术是我们的基本盘, 但不是全部, 最近阿里不是放话了吗, 以后其他岗位的尽量挑有技术背景的, 我看到这种思想渐渐再国内获得认同, 越来越多的公司都在更考虑有技术背景的人, 这是我们的机会, 年龄大了, 年纪到了, 总是只有很少的一部分人才能顺利的晋升管理岗位, 其他的同学必须面临转岗, 转岗不是换行业, 产品, 项目经理, 运营等等其他我们 coder 都可以干, 这些岗位需要的技术, 知识点相比 coder 来说简直是小巫见大巫, 在我们平时对这些岗位有深入了解, 有深入的交流经验, 有深刻的认识后, 我们 coder 转这些岗位其实不难, 很快就能上手, 但是这需要我们提前考虑好自己转岗的位置, 平时要多去专注, 交流, 学习, 能再本公司内转岗是最好的了, 这样公司会对大家比较宽容
coder 们要是打算换工作了, 那就不要研究其他的了, 就专心 Android 技术吧, python,H5 等稳定下来再说吧, 我们毕竟是做 Android 开发的, 找的也是 Android 开发的工作, 其他方向虽然更好但不是公司考虑的重点.
Android 的核心知识点
做 Android 开发, 无外乎那么一些知识点:(这里先放上一份知识大纲)
各大开源框架的研究, 包括但不限于下面几个
OKhttp,Retrofit,eventbus,Glide,eventbus,Rxjava,blockcanary,mvvp,dagger2 等.
组件化是基本要会的, 插件化大公司要求会实操的.
java 部分, 包括 常见的数据结构和算法, hashmap, 二叉树, 红黑树, apt 注解, aop 插桩, 整套多线程知识点, 包括 ThreadLocal 实现原理
flutter/Dart 大家要开始学了, 就和当年我们学 kotlin 一样, flutter 基本一锤定音了, google 下一代就是 flutter 的天下.
Android 的系统原理, Lru 算法, Binder 机制, EventBus 实现原理和为什么不能跨进程, 跨进程几种方式, AIDL,handler 机制.
音视频开发, 直播, 点播, 音视频通话, 音视频会议, 短视频, 这些不一定要多深入, 但是基本的各大平台的 SDK 要会集成, 能根据开源的 哔哩哔哩 IJKMediaPlayer 编写自己的视频, 音频播放模块.
最后, 就是 Android 的优化了, Android 的优化无外乎以下几个方面: 内存优化(稳定性), 交互优化(流畅度), 耗电优化(省电), 安装包大小优化, 网络优化, 应用启动优化等几个方面.
如果大家想要深入的话, 可以重点关注下以下几个方面的内容:
图形图像开发, 不限于 OpenGL ES,EGL,GLSurfaceView, 滤镜, 美颜, canvas,paint
应用层开发. 主要还是原生开发, 提高性能优化技能(启动耗时, 内存, 耗电, 网络, 数据库, 稳定性等), 达到高级开发者的水准
深入 Android 专业技能提升. 主要是阅读源码, 理解透 Android 开发常见的流程和原理(activity 启动流程, 事件分发机制, 广播机制, Binder 机制, 内存管理机制等)
向 Android 架构师发展. 从平时的一点一滴开发中, 有意训练 Android 架构设计能力, 这需要站在一个更高的角度来统筹 App 开发.
跨平台开发能力. 如 RN,Weex,Flutter 等. 大部分公司目前都需要有跨平台开发能力, 所以我们很有必要提高这方面的能力
SDK 和框架开发. 可以通过研究开源项目或者实际项目开发, 抽象提取有用 SDK 和框架供其他人使用
研究 Android 安全开发. App 加固原理和实现, 熟悉常见加密方式(如: RSA,DES 等),Https, 支付安全等.
Android 自动化测试工具开发. 这需要对 ADB,Android 截图, Android 布局解析, Android 测试框架等相当熟悉
音视频开发. 前两年比较火的直播, 还有这一两年比较火的短视频, 都是与音视频相关. 所以, 我们可以了解音视频的编解码以及传输协议等.
手游开发. 游戏给鹅厂带来了稳定的收入, 所以这也是不错的方向. 这就需要熟悉常见的游戏开发框架 cocos2d-x,Unity3D
图像开发. 比如美图秀秀, 天天 P 图, 都用到图形的合成, 滤镜等技术, 对图像处理有很高要求.
Android Framework 开发
除此之外, 要成长为一个架构师, 还需要开发者具备系统设计能力. 具体来说, 为如果你仅仅是对各种各样的技术都熟悉, 有技术广度, 也有一定的技术深度, 实际上是不够的. 如果你的系统设计能力不到位, 可能导致你在开发系统的时候会乱用技术.
比如说, 有的系统他有一些自己特殊的业务场景和技术挑战, 实际上在这个场景之下比较合适的是采用 "缓存 + 数据库" 的技术方案来应对. 但是呢, 有的工程师会很多技术, 但是缺少这种准确的分析系统问题, 提出合理的技术方案的能力, 也就是缺少系统设计能力, 导致他可能会引入 Elasticsearch 这种技术来尝试解决这个问题, 那么结果必然是失败的.
规范代码
不管如何, 你的代码得先能让人看. 这是我在刚刚入行时, 一个老司机指导我的, 随着我在学习的深入, 了解的更多, 我们在基本功上的追求不就是为了代码更加好看吗, 好看的代码才更好懂, 才能好改, 设计模式, 代码架构, 框架设计, MVP(多端分离) 不都是追求的这个最终结果嘛.
因此, 我们可以从以下几个方面着手:
实现功能前先设计好代码, 好的框架层次, 让我们可以快速的了解整个框架实现, 快速的找到想要的代码, 优秀准确的名字我们可以知道类是干什么的,
注释写的尽量详细
不要写太长的方法
不要写太 "牛" 的代码了, 有的程序员喜欢写非常有个性的代码, 喜欢写一些别人很难看懂的代码, 他认为这样才能显示出自己的 "高水平", 这样就不是高水平了, 只能说代码的可读性太差了.
最后, 互联网不存在所谓的寒冬, 只是你没有努力罢了!!!
最后的最后
不知不觉自己已经做了几年开发了, 由记得刚出来工作的时候感觉自己能牛逼, 现在回想起来感觉好无知. 懂的越多的时候你才会发现懂的越少.
对于程序员来说, 要学习的知识内容, 技术有太多太多, 要想不被环境淘汰就只有不断提升自己, 从来都是我们去适应环境, 而不是环境来适应我们! 在这里我放上我自己整理的所有的学习资料, 一直以来不断学习, 如今整理的资料不知不觉居然已经有将近 80G 了,,, 在这里作为读者福利免费分享给大家, 希望能帮助到大家, 也节省大家在网上搜索资料的时间来学习, 也可以分享动态给身边好友一起学习, 希望大家都可以安然度过这次的互联网寒冬!
当你有了学习线路, 学习哪些内容, 也知道以后的路怎么走了, 理论看多了总要实践的, 我在这里给你们整理了大概 80G 的学习视频跟书籍, 赶快点下方群链接免费获取学习起来啊...
资料获取传送门: 加群免费获取 Android 架构设计大群(185873940)
群内有许多技术大牛, 有任何问题, 欢迎广大网友一起来交流, 群内还不定期免费分享高阶 Android 学习视频资料和面试资料包~
为什么某些人会一直比你优秀, 是因为他本身就很优秀还一直在持续努力变得更优秀, 而你是不是还在满足于现状内心在窃喜! 希望读到这的您能点个小赞和关注下我, 以后还会更新技术干货, 谢谢您的支持!
Android 学习之路很漫长, 一起共勉吧!
如果你觉得文章写得不错就给个赞呗? 如果你觉得那里值得改进的, 请给我留言, 一定会认真查询, 修正不足, 谢谢.
来源: http://www.jianshu.com/p/8feb67a7fe90