如何做一名有高度的移动开发工程师?10年大厂Android开发者经验总结

2019年对应程序员来说,是一个多灾的年份,很多公司都进行了不同比例的优化和裁员。最近是找工作的高峰期,从很多同学的面试经历来看,现在只会单纯写业务代码的人找工作特别难,比如很多大厂的面试官都会针对性能优化的细节,考察你是否真正搞懂底层的机制和原理。环境的要求越来越高,所以我们也要积极转变,踏踏实实的学习。

如何成为一名 Android 开发高手,是很多Android开发人员的终极理想。作为一名Android开发工程师,除了需要掌握基础的Android知识,能够熟悉的进行应用开发之外,了解Android 系统层、Linux 内核层再到硬件层的优化路径,也是想要成为 Android 开发高手的必备技能。

之前,我写了一篇《2019总结:Android 寒冬难前行?—我的进阶之路,送给正在迷茫的你!》的文章,文章中将Android开发进行了初级、中级、高级和专家的划分,当时思考的是层层递进,并不是说掌握某项技能你就是专家了。

做一名有高度的工程师

作为一名技术工程师,不管你是从事前端开发还是后端开发,T 型技术人才理论都比较适合,所谓的“T”指的是横向和纵向两个维度。纵向解决的是深度问题,横向解决的是广度问题。并且我比较推崇先有深度再有广度,因为技术都是一通百通的。

作为一个有高度的移动开发工程师,需要能纵向深入,也要能横向全面地思考每一个问题。比如说,我们需要实现一个数据埋点上报系统,团队希望治理数据的准确性和实时性问题,如果站在客户端的角度上看,就是思考如何去实现一套数据不会丢失、实时性高以及高性能的埋点上报组件。我们知道,这里面的进程模式、存储模型、同步机制等都很复杂,要做一个高可用的上报组件确实需要具备一定的技术深度。

但是如果站在更高的角度上看,你会发现上报组件的优化并不能从根本上解决团队的数据问题。埋点的规范是什么?埋点的流程是什么?产品、研发、数据、测试几个团队对于数据有哪些痛点?我们需要梳理一个埋点从产品定义、客户端埋点开发、测试验证、后端数据处理、数据展示和监控的整个过程。针对团队的数据治理,我们需要体系化的思考每一个点的问题,从更高的角度去全局考虑。

单一终端到跨端

作为一个诞生了10余年的移动操作系统,Android的发展经历了石器时代,农耕时代和电气化时代,现在Android系统已经非常完善,资料和框架也很多。

回想一下,因为当时 Android 系统的不成熟和不完善,反而造就了一个百花齐放的移动开发时代。在这个时代里,我们总可以找到很多优化的点,并且持续打磨。随着应用业务复杂性和要求的提升,单纯在客户端的单点优化已经满足不了业务的诉求了,比如在直播、小程序这样的复杂场景。

此时,我们第一步就是要跳出自身客户端的角色限制,从更为全局的角度看问题、思考问题。你需要明白,客户端的实现只是其中一小块内容而已。

假如你接到一个提升H5页面打开速度的任务,极致优化的基础是我们能深入研究浏览器的渲染原理和缓存机制,但是前端和后端能够做些什么,又应该做些什么呢?除此之外,页面哪里产生、如何发布、发布到哪里、如何下载、如何解析、如何渲染、如何衡量和监控页面的性能,这些全部都是我们需要思考的问题。

从平台到中台

相信很多搞过Android开发的同学都搞过组件化,所谓组件化,指的是可编译成单独的app,一般只负责单一业务,具备自身的生命周期。
组件化只是客户端技术最基本的抽象的体现。怎么理解呢?以性能组件为例,虽然我们收集了应用各个维度的性能数据,但是这些数据在后台如何聚合、如何存储、如何分析、如何报警,我们并没提供解决方案。

每个接入的应用还是要花很大的力气去搭建一整套系统,为了解决这个问题,集成式服务化的建设开始出现,比如以 Google 的 Firebase 为代表的各个开发者平台。为了解决应用不同的场景,我们不断地孵化出不同的服务平台,此时中台的概念被提了出来。

什么是中台呢?简单的理解就是把这些分散的平台又统一为一个超大的平台。有人会想我们是不是在开历史的倒车?还记得当年我们将一个庞大的系统分拆成各个子平台是多么的艰难。事实上,这里中台的“统一”,更多是面向开发者层面的,例如都使用同一个账号、不需要重复注册、平台之间互相闭环等。

在国内,阿里的中台是做得最好的。当然腾讯、头条这些公司也都意识到了它的重要性,最近都在积极调整组织架构,成立了专门的中台部门。但是无论是中台还是平台,都是靠无数大大小小的优化点堆积起来得,它们都需要慢慢地积累,很难在非常短的时间内建设得非常完善。

关于中台,可以参考阿里的《从平台到中台【上】》《从平台到中台【下】》

总结

经历了10余年的打磨,Android早已过了爆发期,现在更多的是走向平稳,所以移动应用也更多的专注在性能和优化上,如果你既有技术深度,又要有广度那肯定是会受人追捧的。

所以对于工作年限不是很久的开发者来说,是应该先钻研深度,还是扩展广度呢?

我建议你应该至少先在一个技术领域付出大量的精力,深入钻研透彻,然后再去思考广度的问题

这是因为经验丰富的程序员学新的东西都非常快,因为现在已经不那么容易出现太多全新的技术,所谓的新技术其实都是旧技术的重新组合和微创新。成长是没有捷径的,只有深度原理,了解它的实现流程,你才能走的更远。

所以无论你是在初创团队,还是在大厂,都要在业余时间坚持学习,持续探索自己的技术深度。这样在将来,无论是初创团队内部的晋升,还是跳到大厂,这样努力的经验都可以成为未来无数次面试、加薪的一大亮点。

最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

Android高级进阶知识点总结

在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android高级架构视频学习资源】

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【Android思维脑图(技能树)】

上述【高清技术脑图】以及【配套的架构技术PDF】可以 加我wx:X1524478394 免费获取

原文地址:https://blog.51cto.com/14332859/2461072

时间: 2024-11-06 07:12:52

如何做一名有高度的移动开发工程师?10年大厂Android开发者经验总结的相关文章

我也想成为一名出色的web前端开发工程师

随着互联网的发展,正式的前端工程师角色被行业认可,到了2010年,互联网开始全面进入移动时代,前端工程师的地位越来越重要,前端领域的技术发展也越来越快,各种新的思想.设计模式.工具和平台都快速发展,对前端工程师的技能要求也越来越高. 何为前端工程师?前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性.组件

如何做一名好的管理者

题目:如何做一名好的管理者 1.思想永远第一位 2.要有预测性的眼光 3.决断正确,即便错误,自己也要敢于担起来 4.永不逃避责任,跟自己相关的工作,埋头苦干也要做好 5.不要把工作的性子定位在自己的手头的零碎工作上面,而是提升一个层次或者两个层次,三个层次,或者更高的层次开待一件事情,你将发现你是不可或缺的,你的一切付出都是有意义的,值得这样去做 6.在处理一些自己工作相关的专业事情,你需要有一定的预估与判断的能力,例如:因为一次路由器故障不能上网,你判断一周之类还会出现类似的问题:公司的路由

关于【做一名软件测试工程师,需要具备什么】的我的看法

在软测考试前的几天,我在知乎上看到一片很有意思的问答:做一名软件测试工程师,需要具备什么? 在看网友们的回答之后,我也有了自己的想法... 首先整理了一下其中几个我觉得较为好的网友的回答在这里同大家分享: 网友:陈晔,测试业界打杂第一人 一.知己识人所谓知己就是清楚的认识自己,什么才是对自己最重要的.就测试这个职业来讲,我认为自己得到什么,学到什么才是最重要的.很多人看到这里可能觉得是正确,这种大道理谁都知道.但是平时呢大部分往往,嗯,保证产品 质量,保证公司企业的质量.但是有多少测试做的事情是

做一名程序员需要学哪些知识

问这个问题的人都该打,先拖出去,赏一丈红~ 如果你是计算机学生或者意欲从事IT行业的人,那么再仗50大板!! 为什么?因为你肯定想都没有想过这个问题,一个典型的伸手党,这对于从事计算机的人来说是大忌!!且看下面这2个主要原因: 1)程序不可能一帆风顺,如果有这个时候,那么你可能在做梦,总会遇到各种各样的问题,难道你每次遇到问题都张口问“哪个大牛,来帮我看看这个程序什么问题吧,怎么老是提示错误呢?”,如果真的是比较复杂的问题还好,大牛看过之后替你解决了,自己也更有经验了,如果是差一个逗号之类的问题

如何做一名优秀、甚至卓越的WEB前端工程师

程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优秀.甚至卓越的WEB前端工程师. 何为:前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业. Web前端开发技术主要包括三个要素:HTML.CSS和JavaScript! 它要求前端开发工程师不仅要掌握基本的Web前端开发技术,网站性能优化.SEO和服务器端的基础

MySQL 动态sql语句执行 用时间做表名

1. 描述 在使用数据的时候,我时候我们需要很多数据库,而且想用时间来做表名以区分.但是MySQL在存储过程中不支持使用变量名来做表名或者列名. 比如,有一个表我们想以"2015-07-16 12:00:00"命名. 2. 解决方案 如果只是更换一个普通的表名的话,很简单,直接使用下面sql语句即可: alter table old_table_name rename new_table_name 但是要以时间为表名,动态命名的话就不可以了.首先我们可以用NOW()函数获取系统当前的时

做一名合格的软件使用者

每消费一款免费的盗版的产品,就意味着向充满创意的世界又远了一步,因为连别人的劳动成果都不懂得尊重的人不配享用产品的盛宴.在满足于这些不义之源的小便宜的时候, 这个人将逐渐丧失用自己努力去挣得的MONEY享受正品的权利和能力,丧失与那些充满创造力的作者进行深度交流的资格,因为使用盗版软件会在你内心产生深深的自卑感,让你不能真正自信坦荡地去体验软件所带来的乐趣和便利. 虽然盗版势头很猖狂,不可能在短期内改变.但我们有能力去做自己能够做的事情.在我们开始使用一款赏心悦目.方便易用的软件之前,请略微多做

浅谈如何做一名优秀的WEB前端工程师

浅谈如何做一名优秀的WEB前端工程师 随着近两三年来RIA(Rich Internet Applications的缩写,中文含义为:丰富的因特网应用程序)的流行和普及,前端开发这个行业也开始备受关注. 前端开发的入门门槛其实很低,与服务器端语言先慢后快的学习曲线相比,前端开发的学习曲线是先快后慢.Web前端开发核心技术主要包括HTML.CSS.JavaScript等.HTML仅仅是简单的标记语言!CSS 只是无类型的样式修饰语言.当然可以勉强算作弱类型语言.Javascript 的基础部分相对来

MYSQL存储过程中 使用变量 做表名--转

原文地址:http://blog.csdn.net/business122/article/details/7528859 今天写一个对数据库做快照的存储过程,用到了动态表名,突然发现MYSQL不支持直接使用变量做表名,GOOGLE了下,采用以下方法: DECLARE dbName VARCHAR(30); SET dbName = 'aaa'; SET @STMT :=CONCAT("CREATE TABLE ",dbName," SELECT id from gamedb