前言

之前我有个学弟,应届毕业生,秋招拿了一些 offer,这几天非常纠结。

offer 要考虑的因素太多了,盲目地搜索了几天,网上各种各样的声音都有,收获不多。为此咨询我一下,面对这种情况应该如何选择,我相信这个情况不仅仅是我学弟一人有,所以写了这篇文章,是我选择简历是一些新的,希望能帮到大家(一个案例哦!)

正文

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开发,肯定希望他能同时掌握其它的技能,减少用人成本。所以这些技术也需要去学习掌握。

尾声

评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。

有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。