安卓开发浅谈——写在2016年底

为何要写这篇文章?

写这篇文章,主要的目的是总结和展望。现在我只能算入门水平,不过只要我坚持下去,总有一天能够窥见一些门道。我希望记录自己的成长历程,日后再看,能够有一些感悟。因此,这篇文章写给未来的我。

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开发也还可以。对于初出茅庐的我来说,太多选择却相当于没有选择,先在一个领域里面积累足够的经验,做到站稳脚跟,生存下来,才能再谈其他。因此未来几年之内,我会选择继续干安卓开发。好在我个人而言还算喜欢这个工作。至于以后的事情,现在说很多也没有用,只能说多多努力吧。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 141,625评论 20 608
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 10,623评论 2 43
  • 文/孤鸟差鱼 风中的炸弹 没有定时 你别担心 我只是为了吓唬 不知足的鬼 吃着碗里 看着锅里的癖好 得改掉
    孤鸟差鱼阅读 22评论 0 2
  • 大学校园的某个午后,小池在球场上踢球,一脚不慎将球踢中了路过某班班花小芬的脑袋,小池赶忙上去准备道歉,却不料小芬二...
    平底锅先生阅读 52评论 0 0
  • 最近俩宝在家带着到公司开早会有点难度,今天出门发现还有十五分钟九点,到公司也是不能打卡,索性没有上班,去幼儿园...
    俩宝的妈咪阅读 38评论 2 2