1.1.3 Android工程师的角色方向与定位

Android工程师的方向一般可以分为三类:专业方向、业务方向、操作系统方向

个人认为对于初学者来说,一定要在开始的时候对各个方向有一个比较清晰的了解,然后有机会的话尽量按照兴趣来选择自己的职业方向,这样才能在今后的路途中走的更远更开心。

而对于非初学者而言,更加关注于能做什么应该做什么而不是喜欢做什么则要更重要一些,因为在这个时候的重新定位往往沉默成本巨大,专注于当前的领域才能最大化的提升自身价值。

一、专业方向

1、学术研究

比如数字信号处理、图像处理、人工智能、云计算、大数据等等,做好这类工作需要有比较强的理论知识,当然了,我说的是做好,仅仅了解概念性的东西谁都可以做到。

这类工作的专家一般就职于知名大公司,比如:Google、IBM、微软,国内的有百度、阿里、腾讯等,我觉得这类人与其说是工程师倒不如说是"科学家",因为他们钻研于更前言的领域并工作多年,而且很多时候是在做学术研究,对学术性的理论性的知识有着深厚的积淀。

就拿Android领域来说,我们常用到的手势识别算法、指纹识别算法以及声纹识别、人脸识别等生物认证算法,都需要让他们用数学的方式编码的方式展现出来,另外针对特定的平台进行驱动优化算法优化等等,这部分工作也由这样的工程师来做。

一般来讲,我们中的多数人离这样的职位还是比较遥远的,当然也不排除有志者,有志者事竟成!


学术研究

2、工程实现

社会的进步需要科学家,不过单单有科学家是不够的,我们还要有站在科学家肩膀上的人,这样的人就是我们通常意义下的工程师。他们懂得所从事专业领域的相关概念,但一般来讲不必非得深入研究,因为他们的目标很明确,就是通过使用各类开源资料去实现某个功能进而迅速做出产品。

比如在做网络数据交互时,他们不用深入研究网络七层模型的机理与具体实现,他们只需要懂得调用操作系统提供好的API并熟练运用里面少则十几个多则几十个复杂的方法来实现网络数据交互功能就可以了,这也正是他们工作的意义所在。

通常来讲,大多数的我们工作在这一领域。


工程实现

二、业务方向

1、UI界面显示

正如上一篇文章所提到的,Android系统框架可以分为五层,也可以简单的分为两层:Linux系统内核层+GUI交互界面层。但是Android中所用到的Linux内核并不是Google自己开发的,所以说我们所谓的Android操作系统更准确的说应该是在Linux上套的一个人机交互界面。

事实上这样的交互界面有很多,比如我们熟知的嵌入式领域的QT就是其中的一种,只不过Google靠着强大的自身迅速并大份额的占领了市场,所以才造成了Android今天家喻户晓的这个局面。

那么毫无疑问,Android应用开发怎么能少的了交互界面的设计呢!只不过一般在公司里这部分工作由美工专门负责,或者我们说由界面工程师来完成,但是界面工程师的工作一般和代码无关,他们更多的是熟练使用各种绘图制图软件来创作APP强大颜值中的各种元件,所以自然需要美术或设计科班出身,也正因如此,他们对“美”的感知和创作能力超乎常人,这也恰恰是这个岗位所需要的。


UI界面显示

2、业务逻辑

与界面相比,软件的业务逻辑显得更为核心一些,虽然说都很重要。原因也是显而易见的,因为整个工程的代码跳转和逻辑规则都在这里!

举个栗子吧:比如我们要实现一个类似微信的应用程序,我们需要考虑用户初次登录如何跳转、用户再次登录如何跳转、已经存在的用户登录如何跳转、采用哪些身份验证方式以及具体如何实现、采用哪些网络请求方式以及如何与服务器端进行交互等等。

另外,除了对这些正常的逻辑跳转进行设计和实现之外还要考虑各种异常情况,比如:登录失败怎么办、身份验证失败怎么办、网络状况很差或者突然中断怎么办、数据库插入或者更新失败怎么办等等。而且与实现基本功能的正常逻辑跳转相比,这些对异常情况处理的代码逻辑要更为庞大复杂和缜密。当然了,这正是我们工作的主要方向也是我们应该长时间努力专研和积累经验的地方。


业务逻辑

三、操作系统方向

通常情况下做Android应用开发尤其是初学者并不会涉及到太多Android操作系统的内容,因为各层工程师的知识壁垒相对其它职位来讲还是很大的,这也是开发者的共性,不过这里还是要说一下。

操作系统方向所包含的内容,简单地说就是制作出一台装好操作系统的嵌入式设备(手机也是嵌入式设备),比如说: 为产品规划硬件,按需求、性能、成本选择主芯片,搭配周边外设,交由硬件开发人员设计;给单板制作和安装操作系统、编写驱动;定制维护、升级等系统方案;还可能要配置、安装Android等GUI系统; 为应用开发人员配置开发环境;从系统角度解决疑难问题等等。这个领域,通常被称为"底层系统"或是"驱动开发"。

经常有人说,芯片原厂都做好驱动了,拿过来改改就可以了,这有什么好做的呢?当然了,如果原厂源码毫无BUG并且我们的硬件跟原厂的单板完全一样,而且还不想优化性能、削减成本,不想做一些有特色的产品,那我们完全不必怀疑这话的正确性。然而事实却是,如果一个企业对原厂产品没有任何改进没有任何创新定制化改进的话,那么就只有死路一条了。所以说内核、驱动工程师的重要性可见一斑。

这类工作的特点也是显而易见的
优点是:在软件和硬件之间起桥梁作用,对于实体产品,有可能是软件出问题也可能是硬件出问题,一般是底层系统工程师比较容易找出问题;
缺点是:入门周期长,即使全天学习也要绝对需要半年以上;它的职位机会绝对比应用工程师的职位少很多;没有1、2年经验,招你到公司后一开始做的还是应用工程师的工作。

操作系统

那么到底我们应该如何做出正确的选择呢?

我想说的是:“其实这个问题本身就是错的。选择没有对与错,只有适合和更适合。如果你有的选择,那么挑自己喜欢的感兴趣的,如果没得选,那就挑选一个最有价值的,如果都有价值,那就挑选一个长期来看更有价值的。”

你当下的经历、当下的学习,在未来的一天肯定会影响到你,所以无论何去何从,用心做好当下的事尤为重要。

感谢优秀的你跋山涉水看到了这里,不如关注下让我们永远在一起!

推荐阅读更多精彩内容