前言
移动研发火热不停,越来越多人开始学习android开发。但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容。市面上也多是谈论知识图谱,缺少体系和成长节奏感,特此编写一份android研发进阶之路,希望能对大家有所帮助。
这篇文章里,我们只谈技术,不谈软技能。
在这里我把攻城狮分成初级、中级、高级和资深四个阶段,分别对研发设计能力、工具使用、系统原理和架构等作出要求。
初级
我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成一个功能。这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。
需要的技能有:
1. 掌握android 四大组件知识,深入了解相关生命周期;对于Application、Fragment、Intent也必须掌握。 2. 掌握android 基本布局和控件的属性和使用,常用布局有LinearLayoutRelativeLayoutConstraintLayout等,控件有TextViewImageViewRecyclerViewScrollView等。 3. 对android的资源访问使用有基本了解,了解android针对不同国家、语言、屏幕、API的适配原理。 4. 掌握android系统服务和工具类的使用,对网络访问和数据库操作有基本认知。 5. 熟练掌握研发工具,如IDE、模拟器、网络代理、日志等。
中级
而到达中级就需要付出一些努力了,需要了解更多知识,可以仿照开源库去造轮子练习。中级工程师要能够熟练完成功能研发。需要的技能有:
1. 熟悉SOLID基础设计原则,掌握23种设计模式。 2. 对于研发语言特性java/kotlin有深入理解,如反射、动态代理、apt等。 3. 对android架构有基础了解,对apk结构和打包原理有深入了解。 4. 对于android各个版本特性有基本了解,如MD设计、权限管理、doze模式等。 5. 熟练掌握各种研发调试工具,如git、gradle、mat、layout inspector等。 6. 掌握HandlerAsyncTask原理,熟悉多线程开发。 7. 对绘页面制原理有初步理解,能够实现一个复杂自定义控件。 8. 能够熟练掌握开源库的使用,如图片库(GlideFresco)、网络库(VolleyokhttpRetrofit)、工具(DaggerRxJavaEventBus)等。 9. 熟悉图片优化常用方法,避免编写内存泄漏的代码。
高级
如果到达中级,那么恭喜你已经可以应付大部分情况了。但要能更进一步,就需要深入理解android系统的运行原理,达到融会贯通,可以作为android端上的架构师。
1. 掌握java高级特性,如JUC、线程池、NIOBIO等;掌握jvm虚拟机知识,如内存模型、GC原理、类加载机制、线程模型等。 2. 对android运行环境有深入理解,理解android沙盒机制,掌握AIDL原理及Binder通信原理,了解app和activity启动原理。 3. 掌握热修复原理,各大厂商方案的优缺点。 4. 对于android事件分发有深入理解,重点掌握触摸事件机制。 5. 深入理解android绘制原理,理解VSYNC和surface机制和窗口原理。 6. 深入理解android动画原理,包括补间动画和属性动画。 7. 对于android安全机制有基本认知,理解android安全原理。 8. 深入理解端上设计范式思想,如mvcmvpmvvmclean-arch等。 9. 理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。 10. 对新技术敏感,理解掌握下一代架构dynamic feature等。
至此,android端研发你已经炉火纯青,能够面对各种情况,达到泰山崩于前而色不变的境界。如果还想继续前进,就需要突破技术栈,从更高架构层次考虑问题。
资深
而到了资深层次,技术栈已经不再是阻碍。能够从更高层面看待问题,理解整个系统的设计,作为系统架构师的角色存在。
1. 理解微服务、SOA思想,对于后端开发有一定涉猎。 2. 了解前端研发工具和思想,知道vue react等研发框架。 3. 深入理解跨端技术,如phonegap、weex/RN flutter、小程序快应用等。
总结:
希望你能对照上面的知识图谱,彼此印证查缺补漏,不断在技术道路上前行。有什么疑问和建议欢迎一起探讨。
Android架构师之路
在上面,我们探讨了成为系统架构师的硬技术技术指标。但成为一名合格的架构师,不仅仅对于技术精通即可,还需要有更多的软实力,讨论一些架构以内代码之外的东西。
在说软实力之前,我们先探讨下架构师的职责。个人理解团队中架构师不仅仅是写代码、设计优化架构,还需要对老板汇报技术规划、对团队宣讲,打造技术氛围、提升团队整体技术水平,打造团队技术影响力,负责招聘吸引更多的人加入团队等。
因此一个合格的架构师至少需要以下三点能力:
观察力
要做好一名好的架构师,得有细致的观察能力,善于发现代码中存在的问题,可优化的点,以及未来的机会。大部分开发同学经常会忙于开发各种需求,对于技术架构关注并不多,代码架构往往就在需求迭代中慢慢腐化。
而很多时候,我们就像温水中的青蛙,感觉不到存在的问题。于是就需要架构师这样的角色,从独立的视角看待架构,发现代码中存在问题。 哪些需求优化,哪些基础库可以升级,哪个地方性能存在问题,哪个地方又制约了研发效率。 架构师的独立视角并不代表不需要懂业务,相反架构师是最需要贴近业务的研发,并且理解业务的来龙去脉和未来发展规划,制定符合业务发展的架构。
对于技术也同样要保持敏感度,了解社区前沿技术的发展,从中捕获机会,落地到研发中,保持团队技术的先进性。
抽象总结能力
并不是所有的问题都需要解决,并不是所有的问题都需要现在解决。
经常有人戏称架构师是PPT工程师,必然的做PPT是架构师必备的一个能力,背后反映的是架构师呕心沥血的思考沉淀。如果工程师只是看到一个个的问题,只聚焦在点上,那么永远不可能成长为架构师。
真正的架构师,能够从全局系统层面观察分析问题,并加以抽象总结凝练,输出一份ppt。从更高更远的层次看待问题,再将问题层层分解,有节奏的处理问题。对上汇报技术团队价值,对下同步未来发展,对外宣扬技术成果,对内打造技术成就感。
沟通能力
我们程序员给外界的印象经常是内向沉默寡言不善交际,而实际上程序员是我见过最闷骚的一个团体了: )为什么程序员会给其他人留下这种印象呢?
大概是因为程序员最擅长的就是同机器打交道,而机器是最有逻辑性的,逻辑对了特定的输入必然返回特定输出,给人确定性的体验。而同人打交道就需要考虑各种因素,场合、情感、立场、性别甚至是种族政治等,会有各种意想不到的情况出现。
工作中编码仅仅是很小一部分,其他部分需要同各个团队通力协作完成。同业务方PK需求,同老板沟通思路,同团队沟通架构落地策略打法,同兄弟部门沟通技术方案,同客户沟通问题等等。良好的沟通能力是保证架构被认可、能落地的关键因素。 同团队成员进行有效沟通,为大家答疑解惑,一起探讨技术问题,也是保证架构师融入团队很好的办法。
总结:
以上仅仅是我目前水准,暂时能想到的一些方面。相比硬实力来说,软实力通常显得更加虚无缥缈。只有平时不断总结、多思考、多交流、多锻炼,才能有效提升软实力。
最后
不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。
关于这一点,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。
首先是超级详细得不能再详细的Android开发学习思维导图,因为图片实在是太大了,所以我就只把二级目录的内容放出来。
接下来就需要梳理知识,提升储备了!(Android移动架构师七大专题学习资源)
- 架构师筑基必备技能:深入Java泛型 注解深入浅出 并发编程 数据传输与序列化 Java虚拟机原理 反射与类加载 动态代理 高效IO
- Android高级UI与FrameWork源码:高级UI晋升 Framework内核解析 Android组件内核 数据持久化
- 360°全方面性能调优:设计思想与代码质量优化 程序性能优化 开发效率优化
- 解读开源框架设计思想:热修复设计 插件化框架解读 组件化框架设计 图片加载框架 网络访问框架设计 RXJava响应式编程框架设计 IOC架构设计 Android架构组件Jetpack
- NDK模块开发:NDK基础知识体系 底层图片处理 音视频开发
- 微信小程序:小程序介绍 UI开发 API操作 微信对接
- Hybrid 开发与Flutter:Html5项目实战 Flutter进阶
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
然后再是通过源码来系统性地学习
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
刷大厂面试题备战,增加大厂通过率
以上内容均放在了开源项目:【github】 中已收录,大家可以自行获取。