不要妥协。不要为了单纯的做事而做事。要对你自己的工作有激情并尝试做得比他人更好。这会让你持续成长并在长远看来会让你成为一名更加成功的开发者。
15. 坚持是成功的关键
如果你想成为一名成功的安卓开发者(或者你生命中其他想要的),那么你需要坚持。
做事情坚持不了几天或者几周就放弃那并不会让你学到什么东西。尝试着描绘一下作为一名安卓开发者在未来几年里你所想要成为的人的模样,坚持并不断挑战自我,最终实现自己的目标。
开始一件事很容易,但是保持同样的激情和奉献精神,长时间坚持下去却很难(非常的难)。
16. 积少成多,逐步深入
作为一名开发者,你应该时常试着把你所遇到的任何复杂的问题或者特性,转化成小型的、简单的和独立的组件,这样做能够很容易地被理解并能快速地解决问题。
不要被一个项目的大小和复杂度所压倒。只要你使用正确的方式,任何问题都能够迎刃而解。从小的部分开始,慢慢积累并逐步扩张。
17. 保持手里有项目的另一个测试版本
经常有一个后台的测试版本项目能够完全改变你学习东西的方式。如果你在安卓开发界遇到什么新的事物,请养成一个立刻就开始新建一个后台测试项目的习惯。
假设你在某个地方发现了一个很有趣的安卓代码库,你应该立刻想到新建一个后台测试项目来使用这个库,而不是仅仅快速地浏览一下它的文档和 API 。这会让你更加熟悉、更加深入地了解这个类库。
18. 开始写一些测试
我没法再强调这个有多重要了。你并不能完全吃透某个特性,除非你用尽心思给它写测试。测试能帮助你的代码构建出一个信心彼岸。
不要犯那种忽略测试或者认为测试只是一个“可选项”的错误了,这会让你的生活更加痛苦并增加许多的问题。记住,一个没有测试的代码很容易立刻变成旧地遗留代码。
19. 考虑适配 TDD
当你在开发一个应用的时候,考虑选择一种机械地而又高效的方式,以便能够顺利地通过测试。
开始遵守 TDD 的“红-绿-重构”周期模式。首先,你所编写的测试可能会失败(红),然后写一些有效的代码让这个测试通过(绿),接着进一步优化并清理整洁这些代码(重构)。
测试驱动型开发是一种编程期间控制自我焦虑的方式。焦虑感会让你变得很具有试探性。焦虑感让你变得不容易沟通。焦虑感会让你害怕发出反馈。焦虑感让你变得心浮气躁。—— 来自 TDD 的案例
20. 设立一个合适的自动发布机制
作为一名开发者,尝试着让自己不要操心那些可以自动完成的东西,比如应用程序质量的测试和发布。
你应该使用那些自动检测程序质量的工具,像 CheckStyle , PMD , Lint , FindBugs 。在合并主要的改变之前运行所有的单元测试和真机测试是必须要做到的。
当所有这些测试通过后,你就会得到一个允许 APK 发布到 Play 商店或者分发到其他你想要的地方的(比如 Crashlytics Beta )的绿色信号。
21. 拥抱 Reactive 编程的到来
如果你作为安卓开发者想要提升自己的技能,你绝对应该考虑拥抱 reactive 的实现。这会迫使你在构建应用的时候采用完全不同的方式思考问题。
采取 reactive 的方式肯定能够有助于你更加快速地写出交互式应用,并且能够让你的开发更加容易且有趣。
22. 学会使用 Kotlin 进行安卓开发
Kotlin 是目前最受欢迎和热议的语言,自从它来到安卓开发界后。它现在也是开发安卓应用的官方支持的语言。这个简洁高效的语言给安卓开发界带来了一丝新鲜的空气。
对于那些被古老、繁琐以及易出错的 Java 所困扰的人们来说,这是发生在安卓开发者身上最大的一件幸事之一。尝试着使用它,你将会重新燃起对你的开发生活的热爱。
23. 参加聚会并和更多的开发者建立社交关系
我们开发者趋向于内向,喜欢坐在一个角落里,和自己的电脑组成一个自我的世界。
但是请走出你自己的舒适区,和其他开发者发生更多的联系和沟通吧。当你参加开发者会议,社交活动以及和其他有着和你共同兴趣爱好的开发者一起谈论问题的时候,你会学习到很多很多的东西。
24. 熟悉使用键盘快捷键
试着养成一个尽可能不使用你的鼠标的习惯。在 Android Studio 上几乎所有的操作都可以由快捷方式完成。
这会显著地减少你的开发时间并提升你的工作流程。记住一些键盘快捷键可能会在初始阶段花上一些时间,但是从长远时间来看,它会有助于你进入一个真正无鼠标的工作流程状态。
25. 尝试着至少每周学会一个安卓相关的知识
在安卓大千世界里,当你在一开始踏入的时候,有太多需要学习和了解的东西会让你感觉猝不及防。但是如果你给自己下定决心,每周学习一个安卓相关的知识点,那么事情会变得更加容易。
做一个列表记下所有你不会的东西,给他们标上先后顺序和重要性,在接下来每周里开始学习,并一步一步地完成它们。那么在几个月后,你会发现你已经远远不是那个刚开始的自己了。
26. 把所有浪费你时间的事情自动化
我们作为工程师,生来就喜欢偷懒,总是想着找到一种简便的方式来完成一份烦人的工作。
所以,如果你在一天里需要做一些重复且厌烦的事情的时候,尝试着考虑把它自动化吧。这会累计让你每周都节约不少时间,从而可以用来花在做其他高效率以及有用的事情上,并能够减少你的焦虑感。
27. 考虑同时运行两个不同版本的 Android Studio
保持使用一个稳定版本的 Android Studio 用来做你每天需要做的那些很重要的事情。但是也同时考虑保持安装使用一个最新候选版本的 Android Studio 。
有时候早期版本中会有很多令人兴奋的新特性,那都是你很乐意去尽可能尝试使用的。
28. 仔细审查所有你一次性添加的第三方类库
在我们需要的时候我们都喜欢使用添加类库,这当然没问题。但是,要养成一个习惯,审查你所一次性添加的所有的第三方类库,并且移除那些你不再需要的库。
如果你仅仅是使用一个类库的一小部分,那么考虑把它分解出来而不是使用整个库。有那么一个可能性的事件是:审查有时候也会帮你更新那些急需更新的旧类库。
29. 学习更好的方法用来重构遗留代码库
不要犯那种一次性重构一个完整的庞大代码库的错误。这样做会把你陷入到没有退路的困境之中。
考虑重构你现在就需要使用的部分代码库,然后慢慢地延伸扩展到你所需要的其他部分。同样,考虑在碰到其他代码之前为你所需要重构而又怀疑会破坏现有功能的那部分写一些测试。
30. 经常在低端设备上进行开发和测试
如果你想要像专业人士一样开发应用程序,那么不要犯那种总是在高端设备上开发并测试程序的错误。一般来说,我们开发者手头拥有高端的旗舰产品,并且使用它来做应用的开发和测试用。但是这完全正是你需要克制的地方。
尝试着在市场上买点便宜的、低端的设备,并养成在上面开发应用程序的习惯。你将会看到你的应用的一大堆缺陷,而你之前并不知道它们的存在。
31. 买你所能负担起的最好的设备
不要犯那种购买一个低端的工作用机器来做每天工作的错误,那会有损你的开发经验。
考虑使用一个 Mac (超越 Windows )来做开发。你会爱上它那简介而又稳定的特性的。
从现在开始,如果你要买一台苹果笔记本,那么考虑买一个最合适你自己的版本。几百块(美元,编者按 )的额外开销并不会伤害你,反而你会感谢自己做下了这个决定的。
那么一个优秀的Android开发者,需要必备哪些技术?
Android
作为好的安卓开发,首先明确Android是前端,重点是UI,做出稳定的应用是关键。
1.做出稳定的应用是关键。
作为好的安卓开发,首先明确Android是前端,重点是UI,掌握自定义view。
2.建立知识体系
很多人对Android属于一知半解的状态,鼓励去Stackoverflow之类的地方寻找问题的解决办法,但务必了解内在的机理,达成对知识理解的体系,当你建立了一个体系,很多问题就不在复杂,软件开发是precise engineering,不是凭运气。
举个例子,面试的时候,我喜欢挑战面试者一些很离谱的题目,比如,在一个EditText里面,你输了一个字母“A”,这个A是经过了多少安卓特有的流程才能显示到屏幕上的。 初看这是个无聊的问题,大家往往会觉得,这是理所当然的事情,其实不然,这个问题考查了你对view layout/measure的理解,对rendering的理解,对drawing的理解,如果面试者能答出来这个问题,那我一定不担心你会写出卡顿的安卓代码。
刚开始做Android开发的时候,我也答不出这个问题,但几年之后,渐渐养成了一个体系,充分贯通这些“不必要”的细节,我私以为这是个资深程序员必备的条件,什么性能优化都是水到渠成的事情
至于其他的技术,比如video streaming,取决于你是想成为某个领域的专家,还是解决问题的能手,如果是后者,你需要良好的数据结构+算法+读代码+读文档的能力,在短时间内了解优秀的解决办法,然后加以利用,做软件工程不是读PhD,先把需求解决了,再看怎么提高。
3.数据结构算法,源码,原理机制
很多人推荐了各种书,对于Android开发,很好的资源莫过于Google的官方视频,他们指引了正确的方向让你深入了解Android的UI构建和运行机制。见过许多写了很多app,但是不明白其中要点的程序员,我只觉得失望并担忧。当然,既然要做前端UI,黑魔法少不了,学习日新月异的编程思想,Dagger/React等等
如果身在团队中,建立良好的学习氛围,鼓励交流,同时在被产品经理和设计师折磨的时候,理解他们,帮助他们理解Android开发特点
新技术更新很快,很多人担心跟不上被淘汰,其实大可不必,Android只是个解决问题的工具,你需要一个时刻准备用这个工具解决问题的知识体系,换了一个工具也是一样的。比如跨平台开发技术都是殊途同归,手机没被淘汰,Android开发就不会被淘汰。
另外关于NDK开发,音视频,微信小程序,Flutter跨平台技术等等。其实严格来说已经可以算独立出Android的技术面了。但是却又息息相关。因为企业招一个Android开发,肯定希望他能同时掌握其它的技能,减少用人成本。所以这些技术也需要去学习掌握。
Java
**一个优秀的Android开发者,一定有扎实的Java基础知识。**今天给大家分享一下我们必须掌握的Java知识点。
设计模式
-
Builder模式:比如AlertDialog.Builder;
-
适配器模式:比如GridView、ListView与Adapter;
-
命令模式:比如Handler.post;
-
享元模式:比如Message.obtain;
-
单例模式:比如InputMethodManager.getInstance;
-
观察者模式:比如ContentObserver;
-
抽象工厂模式:比如BaseActivity;
深入Java泛型
-
泛型的作用与定义
-
通配符与嵌套
-
泛型上下边界
-
RxJava中泛型的使用分析
注解深入浅出
3.1 自定义注解
-
自定义注解与元注解
-
注解参数与默认
3.2 注解的使用
-
APT,编译时注解处理器
-
插桩,编译后处理筛选
-
反射,运行时动态获取注解信息
3.3 Retrofit中的注解
并发编程
并发就不必多说了,面试必问,Glide/Okhttp等框架自己看一眼就知道里面是如何大量使用的。
4.1 线程共享和协作
-
CPU核心数,线程数,时间片轮转机制解读
-
synchronized、Lock、volatile、ThreadLocal如何实现线程共享
-
Wait,Notify/NotifyAll,Join方法如何实现线程间协作
4.2 站在巨人肩上操作CAS
-
CAS的原理
-
CAS带来的ABA问题
4.3 仅会用线程池是不够的
-
Callbale、Future和FutureTask源码解读
-
线程池底层实现分析
-
线程池排队机制
-
手写线程池实战
-
Executor框架解读实战
4.4 Android AsyncTask原理解析
数据传输与序列化
-
Serializable原理
-
Parcelable接口原理解析
-
Json
反射与类加载
6.1 反射基本概念与Class
-
三种获取Class对象的方式
-
获取构造器实例化对象与属性信息
-
包信息和方法
-
Hook技术动态编程
6.2 ClassLoader类加载器
结语
看到这篇文章的人不知道有多少是和我一样的Android程序员。
35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。
我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。
千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。
有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。
给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。
有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。
给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。
[外链图片转存中…(img-rkvPYA9e-1714641071173)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!