
每个人都有成长的渴望也都会遇到成长的瓶颈。下面这个问题是一个读者问我的如何才能训练成为一个Android开发高手先简单说下这个读者的背景工作 3 年多目前在大厂做后台开发身边有不少编程高手是他想要追赶的目标。最近半年时间他花了一些精力在研究源码和底层原理上但总觉得这些知识和实际工作衔接不好提升很慢学习动力也越来越差希望我能给点建议。我和他语音聊了半个小时讲了一些我个人以及身边同事的案例。交流下来后双方都有所启发。所以再次整理下分享给大家。何谓 “编程高手” 我觉得能分成这样 3 类第 1 类天赋和成就都很高的人中龙凤比如能一个人写出 WPS 的求伯君、一个人开发出电子邮件 Foxmail 的张小龙对开源领域影响很大的章亦春等人。第 2 类有不错的口碑同时广为人知的技术大牛他们一般在知名公司的重要岗位任职过对技术纯真热爱同时热衷分享比如耗子哥、阮一峰、尤雨溪等人。第 3 类工作中被我们视为崇拜对象、未来有希望企及的高 P 或者架构师。前面两类不在我的圈层射程内因此本文主要聊下第 3 类人。这个也是绝大部分读者最关心的、同时可以设定为超越对象的群体。我倾向给「编程高手」下一个更务实的定义那就是实际工作中能做到高效率、高质量、且稳定输出的人。看似容易实则很难。我对这个定义的详细解读如下高效率编程效率能做到团队中的 Top对于复杂需求或者复杂问题能够快速理解具备将复杂工作拆解成一系列简单子问题并搞定这些问题的人。他们能从实际场景出发有造轮子的能力也有不造轮子的觉悟。高质量编程质量能做到团队中的 Top设计方案的合理性、编码的严谨性、测试方法、监控运维方案等都能思考全面的人。稳定输出给高效率和高质量增加的限定。我觉得只有量变引起质变真正形成了自己的方法论能持续搞定一类问题而不是单个问题的人才算是高手。也许你会说要同时做到这 3 点太难了但是实际工作中一定有人能做到某个点或者某几点那么以他们作为这一点的标杆即可。因为所谓的「编程高手」不过是我们设定的一个目标而已你清楚这个目标是什么就足够了不一定非得安在同一个人身上。如何理解 “底层知识” 的价值要成为一个Android开发高手底层知识是必不可少的。这是一句正确的废话就不展开解释了。读者真正的问题在于如何将底层知识和实际工作衔接起来做到相辅相成先看一个具体的例子。对于简历中写自己做过性能优化的候选人我面试时比较喜欢问你是如何定位性能瓶颈并完成调优的如果再次碰到此类问题你的详细思路是什么很显然这是一个系统性的工程问题能同时对技术深度和宽度进行考察。不仅仅是应用层的代码还包括所使用的框架甚至操作系统等等。有性能指标等基础性的知识有监控和压测工具的运用还有成体系的排查思路和优化方法等等。如果是编程低手他们的答案通常有这几类1、性能指标都不清楚遇到问题也不知道该用什么工具这一类人应用层都不达标。2、初步定位到一个疑似瓶颈点后就着手优化最终解决的只是一个浅层次的性能瓶颈问题根本原因并未触达到。3、能定位到根本原因但是对于解决方案的合理性缺少深入思考不追求极致最终只是用了曲线的方案再次隐藏了性能问题。通过这个例子我其实想说明两点1、不具备底层知识你的视野根本就触达不到底层的东西思维以及能力永远只能停留在应用层面能解决的问题有限。2、读源码、学习各种原理所有这些都只是学习和巩固知识的过程真正体现编程水平的是实际解决问题的能力因此如何将知识变成有效的经验这个才是关键做不到要么是实践不够要么是压根没研究明白。然后我们再回到问题身上究竟如何才能做到底层知识和实际工作的衔接呢如果衔接不好那问题出在哪个环节大家可以先思考下过往工作中那些对你编程能力帮助很大的经历你认为你能获得提升最关键的因素是什么是底层知识的储备吗细想一下一定不是而是发现问题的能力。注意我说的是最关键的因素并不是否认底层知识的储备不重要大家可以去观察一个工作中很常见的现象同一个问题你能看到哪一层而Android开发高手又能看到哪一层谁能更快地贴近问题的本质谁又能衍生出一系列的问题这其实就是「发现问题」的能力体现。只有当你意识到它是一个值得深挖的问题时才会有一层一层的思考一层一层的分析。那应该如何提高这方面的能力呢其实就是思考力的提升过程除了观察和刻意练习我想不出更好的建议。多看高手是怎么做的遇到问题时自己多问几个为什么多反思自己的思路是否正确日积月累水平自然会提高。当你具备了发现问题的能力就相当于给知识和经验之间架起了一座桥梁真正做到相辅相成以及互相驱动。成为 “Android开发高手” 的几点建议Android编程作为一门实践性的学科多动手解决问题是最基本的要求了解决问题越多、越难能力提升越快。而在这个过程中如果有知识输入底层知识的储备还有思考的加成发现问题的能力编程水平的提升会更加迅速。我带过的团队里面还有一类人总说自己技术进步很慢工作没有挑战。但是当团队遇到一个技术难题时他根本没有意愿去做深入了解嘴上说热爱技术、渴望成长但是却看不到行动这种人是永远成为不了Android编程高手的。真正的热爱来源于行动上的投入不是找借口不是追求舒服这是很重要的一个区别。Android编程高手是如何练成的这样看来它其实是一个体力、脑力、心力的修仙之路。绵薄之力做为一名Android开发者接下来我想分享一下这些年来我对于技术一些归纳和总结和自己对作为一名Android高级开发者需要掌握那些技能的笔记分享希望能帮助到有心在技术这条道路上一路走到黑的朋友一、架构师筑基必备技能安卓手机的开发语言是JavaKotlin也是对java的封装Android Framework 也是默认使用Java 语言熟练掌握Java 语言是Android 开发者的必备技能。本篇包含知识点1.深入 Java 泛型2.注解深入浅出3.并发编程4.数据传输与序列化5.Java 虚拟机原理6.反射与类加载7.高效 IO二、Android高级UI开源框架进阶解密UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了拒绝无休止的CV亲自去项目实战读源码研究原理吧三、Android Framework开发揭秘众所周知Android是一个基于Linux实现的操作系统。但对于Linux内核来说Android也仅仅只是一个运行在内核之上的应用程序与其他运行在内核之上的应用程序没有任何区别。所以Android也需要运行环境需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。主要内容包含第一章 系统启动流程分析第二章 Binder解析第三章 Handler解析第四章 AMS 解析第五章 WMS解析第六章PKMS Android10.0 源码解读四、Android性能优化实战解析在不同层次的开发工程师手里因为技术水平的参差不齐即使很多手机在跑分软件性能非常高打开应用依然存在卡顿现象。另外随着产品内容迭代功能越来越复杂UI页面也越来越丰富也成为流畅运行的一种阻碍。综上所述对APP进行性能优化已成为开发者该有的一种综合素质也是开发者能够完成高质量应用程序作品的保证。五、Android百大框架源码解析只要是程序员不管是Java还是Android如果不去阅读源码只看API文档那就只是停留于皮毛这对我们知识体系的建立和完备以及实战技术的提升都是不利的。这份学习手册包含Android主流库比如OkHttp、Retrofit、EventBus、ARouter源码等等都有详细的源码解析。六、NDK模块开发NDK是原生开发工具包这套工具允许Android使用C/C代码并提供了众多的平台库。主要内容包含NDK 模块开发JNI 模块Native 开发工具Linux 编程底层图片处理音视频开发机器学习七、Flutter学习进阶2019 年无疑是 Flutter 技术如火如荼发展的一年。每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂从超级 App 到独立应用从纯 Flutter 到混合栈开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术也在面临着各种各样不同的挑战。本篇知识要点1、Flutter跨平台开发概述2、Windows中Flutter开发环境搭建3、编写你的第一个Flutter APP4、Flutter Dart语言系统入门…由于篇幅限制这里只能展示部分内容朋友们如果需要这份完整版的PDF资料合集微信扫描下方二维码【免费获取】。很多人感叹“学而无用”实际上之所以产生无用论是因为自己想要的与自己所学的匹配不上这也就意味着自己学得远远不够。无论是学习还是工作都应该有主动性所以如果拥有大厂梦那么就要自己努力去实现它。以上学习资料均免费放送最后祝愿各位顺利拿到心仪的offer