Android开发的职业破局,如何才能跨过“中年危机”这段万丈深渊?

前言

35岁,“中年危机”,不少程序员听到几个词,腿就不自觉的发抖,总感觉自己到了35岁也就预测着自己的开发生涯该结束了!

其实真的不必如此,真的不是所有的程序员都会有中年危机,只是针对那种不思进取,不愿接收新鲜事物,向年龄妥协低头的。在遇到中年危机之前,你要想想危机的来源是什么?

危机的本源

为什么之前的危机我们都能一一度过?到了35+怎么就人人自危起来了?

举个栗子:高考之前我们在干嘛?疯狂学习,日以继夜。之所以大部分人都能度过是因为:在正确的时间做了正确的事情,为危机的到来做好了足够的累积。

所谓真正的危机便是:在正确的时间做不正确的事。没有在正确的时间,为下一步做出积累,这才是危机的根源。

比如,当你迈过了30岁这个坎,你的能力还局限于程序的范围,也没有积累好自己的深度以及视野。从毕业到工作这十年你到底做了什么?浑浑噩噩像僵尸一样过日子?怕不用35岁,只怕是你在30岁危机便就提前到了。

所以,我么Android程序员面对危机的最好办法就是提前提升自己,沉淀自己技术的深度和广度,不为别的,当危机来临的那一刻,你至少也有应对的办法和相应的实力。

Android开发:提升自己的办法和路线

大家都知道程序员之中有有菜鸟程序员和大牛之分,这里我这暂时把android程序员分为几个层次:android初级程序员、android中级程序员、android高级程序员、android技术专家、CTO等等,不同的级别掌握的能力不一而定。

更好的了解不同阶段程序员的进阶之路才能把握好自身提高的方向,有目标的提高才是最有效率的提高。

(一)android初级程序员

总结:能干活,有学习能力,能跟着团队成员做项目;

技能:基础的组件的使用,熟悉Java基本的语法,Gson,xml数据解析,第三方框架的使用,熟悉android的常用API,熟悉网络框架或者API的使用,掌握数据库相关知识点,熟悉android的四大组件、生命周期,熟练掌握界面布局,了解android项目目录的组织架构等等;

要求:初级程序员一般都是从电脑小白成长起来的,当然了也有可能是web或者是其他方面的大牛转换过来的,想要成为一个高逼格的初级Android程序员需要多看多读多写多想,能够看懂他人的代码。能够知道问题大概需要什么方式,对Android系统已经有了初步的认识等等。

(二)android中级程序员

总结:能够分析问题,能够解决问题;

技能:了解android的签名机制(实现原理,具体操作等等),打包机制(多渠道打包,打包流程等等),了解apk安装文件压缩(压缩图片,代码压缩,.so文件压缩等等),事件分发,View绘制流程,webview相关知识点(与Native的交互,性能优化等),熟悉数据库的使用(基本API,第三方ORM框架,ORM框架的实现原理等等),java反射原理与简单实践等,activity的启动模式,activity,service,fragment,broadcastreceiver广播生命周期,屏幕适配,AIDL与messager的简单实用,自定义组件(自定义View与自定义ViewGroup),动画(补间动画,帧动画,属性动画),通知栏消息,版本新特性等等等等;

要求:开始阅读android方面的而源码,不但能看懂别人的代码还需要能够修改别人源码,对android的体系结构,组成方式,常见开源社区,技术要点能够了然于胸。

(三)android高级程序员

总结:能够解决问题,能够发现问题;

技能:手动编写框架,设计模式,代码规范,项目进度,时间估算,启动流程,性能优化,OOM,没存溢出与泄露,JNI,脚本开发,activity启动流程,android中的IPC机制(Binder原理),对iOS等其他移动开发现学现用等等;

要求:能够造轮子,比如写一个网络框架,事件总线控件,特效View等,重点是能够为产品造轮子。

(四)android技术专家

总结:对某一方面非常精通与专注;

技能:比如对android的对媒体模块十分熟悉,阅读过android多媒体模块的源码,能够更改其中的不足与BUG等等;

要求:熟读android源码,对android的某一模块有自身的看法并能够有相应的修改能力,能够知道团队他人的日常产品开发等。

(五)CTO

总结:似乎已不再是程序员的范畴;

技能:专注技术大的方向的把控;

那么不同阶段发开该如何进阶?

  • 初级程序员
    一般工作一年以下的都算初级工程师,这个时候基础知识基本都能掌握,比如四大组件的使用,常用的布局与控件的使用,一些简单的动画与自定义View等,这个阶段相对来说算进步挺快的,这个时候只需要找家相对靠谱点的公司,主动做事,多承担任务,不要怕吃苦,多加加班,虽然说到加班大家都反感,但是现实就是这个时候你不加班多做点事,难不成等着以后觉得技能不够用了再加班么?这个阶段完全不用考虑生活与工作的平衡,因为这个时候你根本谈不上生活。这个阶段多努努力,很容易快速成长为中级工程师。
  • 中级程序员

1. 坚持写博客

中级程序员不只是一味的去做事、学习,其实更多的需要对知识的总结与归纳,而写博客是最好的手段,坚持写博客其实就是对你知识体系的回顾与总结,很多时候你对某块领域自认为掌握了,但是能写出来,并且能让别人看懂,那才是真正的熟练掌握呢,不说别的,就说一些IT界业内的大牛一般都有自己的博客,那些博客文章才是你知识沉淀的最好见证。

2. 在GitHub上参与开源项目

我曾无数次提醒大家GitHub堪称程序员必备,聚集了全球各个领域的程序员,在上面你可以直接阅读Google、Facebook顶级公司的开源项目,可以一睹顶尖工程师的风采,在这里你绝对打开了另一扇世界大门,你可以阅读大牛源码,并试着贡献自己的代码,走出第一步,多参与,多交流,那句话怎么说来着:「与优秀的人接触,自己才会变得优秀。」同样的道理,阅读大牛们的代码多了,自己不知不觉中就会成长进步。

GitHub并不仅是一个名片,更是进阶必备神器!

  • 3. 有自己的完整作品

也许我们在公司参与不少功能的开发,不管是公司原因还是产品原因,或多或少我们为了赶进度也好,为了盈利也好,总有一些我们觉得不满意的地方,比如设计风格上不够Material Design,产品经理的一些天马行空的垃圾想法,甚至一些KPI导向的功能实现等。

我相信这个阶段每个人心中都有这个想法,都觉得自己家的app不够酷,不叫Android。所以这个时候就付出行动吧,利用业余时间开发一款属于自己的完整作品,你可以尝试最新的技术与框架,用你认为最棒的工具,适配你认为的Material Design风格,这个过程不仅亲自实践了你之前想尝鲜的新技能,还完整经历了一个产品的构思与迭代过程,甚至最后把它开源,这个过程是非常宝贵的。

其中你会遇到并克服各种问题,不知不觉中就在成长,开源之后你会在潜意识里对自己的代码要求更高,而且这款作品也会成为你之后简历上的加分项。

所以如果你还没有过这个阶段,那从现在开始,着手准备并经历这个阶段吧,哪怕你没有什么有创意的idea,甚至高仿下开源社区或者市场上的一些app都可以,毕竟你是用来练手,不是用来商业,idea这个阶段不是特别重要。

  • 4. 看一些进阶的书籍

看书是每个阶段进步必备的过程,但是这个阶段你需要看的是一些进阶类的书籍了,不管是关于Java还是关于Android,你需要看一下以下书籍:

「Thinking In Java」

也许之前你看过,但是我相信对于一些高深的知识你肯定没理解,这个时候再回头看一下这本书,估计又是一番收获。

「Effective Java」

这本书堪称Java进阶必备,里面教你一些你不知道的Java技巧,以及一些常用的设计模式与原则,真正教你如何优雅的写Java。

「Android开发艺术探索」

这本书是面向Android中高级工程师,里面讲到的一些知识点与技能很不错,Android进阶必备。

关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?

实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。

image

Java语言进阶了,同样关于Android你也需要进阶,并不能停留在一些基本api的使用上,应该往更深层次的方向去研究,比如Activity、view的内部运行机制,比如Android内存优化,比如aidl,比如JNI等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理。

Android架构师学习视频和学习书籍由于csdn机制问题提取码不好直接放出来,需要的朋友可以————【加入此处免费打包获取】

  • 高级工程师

我相信如果做到了以上几个方面,加上时间的考验你已经是一位高级工程师了,一般在工作3年以上。但是即使成为了高级工程师,你依然有更多需要学习的,比如技术方面关于网络,关于架构,服务端相关知识,都需要继续学习与实践。

但是除了技术之外,高级工程师的区别就在于还会关心产品与业务,在考虑问题的思维方面其实就已经发生了蜕变,并不仅仅是从技术方面去考虑问题了,不再是一个单纯的编码机器,工作内容而是会横向的扩散到其他方面。

我一直都说过,技术不是一切,哪怕你想走一个单纯的技术路线,以后发展架构师或CTO,最终也一定是要参与产品、管理团队、了解业务的,只不过侧重点不太一样,除非你想一辈子当个码农,两耳不闻窗外事,只想安安静静的躲在角落敲代码,否则你都必须多方位发展。只不过在你们成为高级工程师之前这些都可以先不用考虑,等你们到了这一步我相信你们自然会理解今天我说的。

当然啦,具体用什么样的方式去学习,是因人而异的,如果你想要学习进阶,突破瓶颈却又找不到方向,可以参考下我下面整理的Android高级工程师技术成长路线:

也是一样,Android高级工程师技术成长路线由于csdn机制问题提取码不好直接放出来,需要的朋友可以————【加入此处免费打包获取】

Java语言进阶

  • 泛型与注解在Retrofit中的应用
  • 多线程与Java File IO操作应用实战
  • Rxjava原理分析
  • JVM与内存泄漏原理解析
  • ClassLioader与反射在Hook中应用
  • 动态代理机制在源码中的应用

为什么要学习JAVA ?因为Android应用是由Java语言进行开发的,SDK也是由Java语言编写,所以我们要学习java语言。

另外,虽说kotlin语言得到了Android官方的热推,但是kotlin也是编译成了java语言再运行的。对于Android来说,只要SDK没有用kotlin重写,那么Java语言是都需要学习的。而且Android apk的后台服务器程序大概率是java语言构建,所以学习java也是一种必然。

高级UI与FrameWork

  • UI绘制原理
  • 动画原理
  • 事件响应机制
  • 屏幕适配
  • FrameWork源码解析
  • 相机适配

我们需要从新的角度去分析这些知识点,深入研究他们,要学习源码,模仿源码,然后再hook源码,这样才能说自己懂这块的知识。这些都是做Android开发,做高级工程师的基础。

360° Android app全方位性能调优

  • 从事件
  • 从内存
  • 卡顿调优
  • APP保活
  • 内存优化
  • 高性能编程实战
  • OOM原理解析

一个app的性能好不好我们需要从两个层面努力。第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。

Android前沿技术

  • 热修复/热更新
  • 组件化/插件化
  • RxJava深入研究
  • 图片与网络架构
  • Google I/O大会技术
  • Kotlin项目实操

NDK 模块开发

  • C/C++基础
  • JINI编程基础
  • 图像处理与热修复应用
  • 音视频开发
  • OpenCV人工智能
  • OpenCL 图像绘制

微信小程序

  • 小程序架构介绍
  • UI界面开发
  • 高级API实操
  • 微信对接实战
  • 任务清单项目
  • 电影榜单项目

混合开发

  • Dart语法
  • Flutter线程运行模型
  • Flutter与Native通信架构
  • Flutter内存调优
  • Flutter项目实战

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望大家能谨记这一点。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

领取地址:(https://jq.qq.com/?_wv=1027&k=mlDAdmzK