为何要写这篇文章?
写这篇文章,主要的目的是总结和展望。现在我只能算入门水平,不过只要我坚持下去,总有一天能够窥见一些门道。我希望记录自己的成长历程,日后再看,能够有一些感悟。因此,这篇文章写给未来的我。
2016.12.27
我从上Web课程开始自学安卓,到2016年1月11日找到第一份实习,算起来将近1年开发经验了。
这一年下来,确实学习了不少东西。现在的我,能够使用大部分第三方库,对安卓SDK有一定了解,知道如何追踪和解决bug,知道MVP架构和一些简单的设计模式。
当然,这篇文章不是谈论我会什么,而是要探讨安卓开发到底有哪些重要的东西,以及如何进阶。
Java
Java是安卓采用的语言。我个人觉得安卓对Java的要求并不是很高,Android Studio的各种自动完成和提示也很好用。当然,对Java的基础语法还是必须要掌握的,Core Java这本书就可以选择性地看一看基础的内容,我觉得写的很不错。
轮子
在码农界,一直有这么一个争论:到底要不要自己造轮子?
在我看来,不造轮子,但得知道轮子的原理。假如没有现成的,自己要能够造出来。或者能拿别人的轮子来修改。
所谓轮子就是现成的库或者别的工具。一般而言拿过来就用,很方便省事。但是假如到此为止,不去读源码搞清楚实现原理,等到自己有需求又没有现成的东西,就无计可施了。
一般自己从无到有造一个库比较困难,而对他人的库进行修改以满足自己的需求相对而言更为可行。第三方库的学习和分析是一个费时费力的过程,但回报也同样丰厚。
而自己做库是一个非常耗时耗力的事情,再牛逼的人也不可能说所有轮子都自己造。
所以,结论就是不强求自己做库,但是在能使用第三方库的基础上,要有修改第三方库满足自己需求的能力。
源码
在读第三方库的过程中,当然会遇见很多问题。一个非常明显的问题就是缺乏对安卓源码的了解。说到安卓的源码,又是一个坑。因为安卓的源码可不小,有各种类和函数,更别说更加底层的东西和安卓的快速发展变化。总而言之这个东西很重要,但要学会取舍,不可能眉毛胡子一把抓,而是要重点学习那些常用的东西。
经验
安卓开发的经验是一个很玄的概念,可能有些人3年经验就和一些人的5年经验差不多水平,因此用经验判断水平是不太可取的。
话虽如此,要是说1年经验能强过5年经验,这个概率还真的蛮小的。找工作的过程中我发现大部分安卓全职工作都要求至少3年经验,这明显是一个分水岭。
为什么我选择安卓开发呢?因为看到自己的app会有一种成就感,尤其当这个app被用户认可的时候。当然要是有人指责这个app,不免有点跳脚。app就像自己的作品一样。
回到经验这个话题,年份是一个因数,而干了什么又是另外一个因素了。大学4年自己自学安卓,毕业了就可以声称有4年经验吗?工作和自己自学完全是两码事情。
总的来说,是要积累经验,但同时也不能不学习,重复干一些工作来堆年份。现在技术发展日新月异,如果没有不断学习的能力,二十年经验也白搭。
技术与进阶
假设有了可观的经验,保证不会在简历就被刷下去的时候,就可以来看看那些待遇优越的安卓岗位都要些什么东西,可以向这些方向努力,虽然说到时候肯定会变,但总有不变的东西。
算法和系统设计,这两个是进大公司必须的东西,和安卓开发说实话关系不算很大,算是额外要求。
登上玻璃门,看看三番的一些高级安卓工程师岗位的要求和报酬:
Imgur - Rating 4.7 - Senior Android Engineer $130k-160k
What You Bring To The Table:
- B.S. or higher in Computer Science, or equivalent in work experience
- Minimum of 3+ years Android development experience
- 5+ years of general software development
- Enthusiasm for Android development
- A passion for beautiful, pragmatic code paired with a strong sense of product design
- Love for the Imgur product
这个公司的要求属于比较宽松的那种,其实就一个工作年限。5年的general SDE是什么鬼,真的有人转行安卓吗?
当然,符合要求不代表就能进去,人多位置少,bar自然就高了,但是至少有过机会。
RideCell LLC - Rating 4.4 - Senior Android Engineer $140k-160k
About You:
- B.S. or M.S. Computer Science or related experience
- 3+ years of object-oriented software development experience
- 2+ years mobile application development at the user interface and system levels
- Proficient knowledge of the android SDK
- Gradle build system expert & ability to maintain multi flavor project
- Java OOP expert
- Proficiency with Google API's (maps, places, gcm most important)
- knowledge of RESTful implementation in android and communicating with backend API's
- Proficiency with android lifecycle events in activities and fragments
- At least 1 application deployed in the play store
- Must be willing to work on-site in our San Francisco office
Great to Have:
- Knowledge with 3rd party injection libs (android annotations, butterknife, dagger etc...)
- Knowledge of android development patterns, preferebly MVP or MVVP
- Knowledge of websockets
- Other languages to know (python, js, cocoa, swift, c++)
这个工作总算提出一点实质性的要求了。经验相对而言宽松一些,2-3年的完全够了。要求会谷歌的一些API,这些说实话不是很难,都是拿来就用的东西;然后加分项有依赖注入库,MVP,websocket,还有一些其他语言。这些东西倒是值得注意。
更多的也不再贴上来了。当然,要明白这里的要求很可能不是完全准确的要求,因为有些公司可能要求喜欢写的宽松一些,但是实际上Bar很高;或者有的公司要求写一堆,但很多都是可有可无的。
很多知识,假如没有遇到过,说实话并不好去学习,因为太宽泛了。比较靠谱的就是安卓相关的一些东西,然后扩展一些就是ios开发可以了解一下。至于个别公司的一些特殊要求,没有必要特意去追求,因为适应面太窄。
总结与展望
CS的领域如此广阔,现在大热的一个是Machine learning,还有Big data,安卓和ios开发也还可以。对于初出茅庐的我来说,太多选择却相当于没有选择,先在一个领域里面积累足够的经验,做到站稳脚跟,生存下来,才能再谈其他。因此未来几年之内,我会选择继续干安卓开发。好在我个人而言还算喜欢这个工作。至于以后的事情,现在说很多也没有用,只能说多多努力吧。
网友评论