如何修炼成为Android高级应用开发工程师?
这个问题困扰很久。毕竟在《一个程序员的自白》提到的都是做业务,做的业务多了,你的思维方式和见识,就会局限在你的KPI中。身在局中,你很难用空杯的心态去感受技术的力量。或者很喜欢技术带来的快感。所以这个问题也是离职后才想明白的。不是你做的东西多,你的价值就大。而是你能够解决别人不能解决的问题,才能体现出你的附加值。从软件工程的角度讲就是代码管理。代码管理有很多种方式:代码规范,代码结构,代码框架和架构。这些都是约束条件,让工程能够稳定走向成品,才是终极目的。不然为什么叫做工程呢?和建房子是一样的道理。建高楼大厦肯定是找有资质的,有经验的。所以找干过大工程有经验的开发者,都是企业的偏好。
可能这里会很虚,下面谈谈自己的体会。
做Android开发有几种:
1.应用工程师 (App开发,比如各大互联网公司,BAT)
2.系统工程师 (Framework或者Native开发,比如硬核公司:华为,小米,oppo)
3.驱动工程师 (双摄像头相机,蓝牙驱动开发,比如海思,MTK,ST)
还有其他的领域比如后台开发,前端开发(暂时先不考虑)。
是不是把所有的都干了,你就是一个高级工程师呢?这还真不是见多识广能解决的问题。一个人的精力是有限的,真的不要把有限的精力放到无限的苦海中。把一个领域干精通了,达到能够解决工程上的问题,已经非常了不起了。
上面谈的仍然比较空,那么从Android应用开发工程师的角度,谈谈我自己的看法。
任何App产品都有它自己的生命周期。有成功的,也有失败的。有的App生命周期很长,有的也很短。有市场因素决定,也有技术决定。所以大厂背景在这里就体现出来了,一般大厂的产品周期长,技术稳定且丰富。长周期的产品会遇到各种各样的问题,解决这些问题的方案就是走向Android高级工程师不二法门。
这里用一个流程说明:(可能不太形象,如果有更好的方式也可以交流。)
实习:学习性劳动。
一年:学习且熟练劳动。
两年:熟练且能解决问题的劳动
三年:能解决问题且具有创造力的劳动
四年:具有创造力且能规定约束的劳动
......
真的,在T四年还没能达到上面提到的要求。大部分的人也不一定能达到上面的要求,所以四年是一个分水岭。职级确实是一个反应你能力的评价体系。至少说明了你到达了某个标准要求,才给你这个评价。
这里回归正题,如何成为Android高级应用开发工程师?
初级工程师:
1.数据结构和算法
数组,栈,队列,链表,二分搜索树,集合映射,堆,树,AVL,哈希表,图... (这里要求不是考试的能力,而是能够灵活运用,时间复杂度,空间复杂度,由于Java集合框架封装,建议阅读集合框架源码实现)
冒泡,选择,插入,快速,归并,堆排序,希尔排序,动态规划...(实际Android开发中运用并不多,但是这个是基础)
2.Java基础
面向对象(封装,继承,多态),基本语法,集合框架,循环控制,异常
3.Android基础。
Android组件,异步...handler loop binder activity fragment 布局 threadpool
4.功能熟练开发。
UI组件,列表,特效...
5.一般问题解决
中级工程师:
1.设计模式
23种设计模式,理解框架设计原理 MVC MVVM MVP,AOP , IOC...
2.Android框架
10大开发框架 okHttp Retrofit Rxjava Dagger...
3.多线程并发,网络通讯
JUC,ThreadLocal,Syncronized,lock,volatile...
4.组件化,插件化, 热更新
Tinker,Sophix...
5.性能优化
BlockCanary LeakCanary MAT...
6.疑难问题解决
高级工程师:
1.应用稳定性和架构
Aroute,CC,DDCompontForAndroid...
2.系统原理
JVM虚拟机,Dalvik,ART原理和源码,Android系统源码理解...
3.创造性解决问题。
4.进度控制
5.有一定Native开发能力
JNI,C/C++
附加值:
应用安全 ,音视频,图形。源代码阅读的能力必不可少。
kotlin, 各个版本Android的特性,屏幕适配,机型适配。
补充内容: