Android开发5年,字节腾讯惨被血虐,我真的不适合这行吗?

很多人工作了十年,但只是用一年的工作经验做了十年而已。

高级工程师一直是市场所需要的,然而很多初级工程师在进阶高级工程师的过程中一直是一个瓶颈。

移动研发在最近两年可以说越来越趋于稳定,因为越来越多人开始学习Android开发,造成市场参差不齐。正所谓入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,并且对于初级中级高级需要怎么进行成才,很多人都比较迷惑。

做了6年Android开发,你会的还只有初级工程师的技术吗?掌握了高级工程师的技术了吗?

我们先来看一下关于Android程序员的一个岗位薪资职位图谱情况:

为了方便大家成才,我把初级、中级、高级和资深四个常见的岗位需要掌握的一些知识进行如下整理。

初级

初级研发工程师的定义是掌握基础的Android知识,能够独立完成一个功能,工作年限大概在1-2年,这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。这个级别的人往往需要掌握如下一些技能:

  • 掌握Android 四大组件知识,深入了解相关生命周期,对于Application、Fragment、Intent常见的开发知识也必须掌握。
  • 掌握Android 基本布局和控件的属性和使用,常用布局有LinearLayout、RelativeLayout、ConstraintLayout等,控件有- TextView、ImageView、RecyclerView、ScrollView等。
  • 对Android的资源访问使用有基本了解,了解Android针对不同国家、语言、屏幕、API的适配原理。
  • 掌握android系统服务和工具类的使用,对网络访问和数据库操作有基本认知。
  • 熟练掌握研发工具,如IDE、模拟器、网络代理、日志等。

中级

我对中级工程师的定义是能够熟练完成功能研发外,还需要掌握常见开源库的一些原理,并仿照开源库去造轮子练习。这个阶段的人大多工作3-5年,业务开发能力熟练,碰到任何一个问题都能够得到解决,这个级别的人往往需要具备如下技能:

  • 熟悉SOLID基础设计原则,掌握23种设计模式。
  • 对于研发语言特性java/kotlin有深入理解,如反射、动态代理、apt等。
  • 对Android架构有基础了解,对apk结构和打包原理有深入了解。
  • 对于Android各个版本特性有基本了解,如MD设计、权限管理、doze模式等。
  • 熟练掌握各种研发调试工具,如git、gradle、mat、layout inspector等。
  • 掌握Handler\AsyncTask原理,熟悉多线程开发。
  • 对绘页面制原理有初步理解,能够实现一个复杂自定义控件。
  • 能够熟练掌握开源库的使用,如图片库(Glide\Fresco)、网络库(Volley\okhttp\Retrofit)、工具(Dagger\RxJava\EventBus)等,能够对这些常用的库进行二次封装。
  • 熟悉应用常见的优化方法,避免编写内存泄漏的代码。

高级

对于高级,就不仅限于功能和业务开发,还需要深入理解Android系统的运行原理,达到融会贯通,部分可够作为Android端架构师。这一阶段的人大多工作5-8年,具备开源库设计能力,同时对于Android系统的运行原理也比较了解。

  • 掌握java高级特性,如JUC、线程池、NIO\BIO等;掌握jvm虚拟机知识,如内存模型、GC原理、类加载机制、线程模型等。
  • 对Android运行环境有深入理解,理解Android沙盒机制,掌握AIDL原理及Binder通信原理,了解app和activity启动原理。
  • 掌握热修复原理,各大厂商方案的优缺点。
  • 对于Android事件分发有深入理解,重点掌握触摸事件机制。
  • 深入理解Android绘制原理,理解VSYNC和surface机制和窗口原理。
  • 深入理解Android动画原理,包括补间动画和属性动画。
  • 对于Android安全机制有基本认知,理解Android安全原理。
  • 深入理解端上设计范式思想,如mvc\mvp\mvvm\clean-arch等。
  • 理解架构演进,有良好的分层和拆分思路,掌握模块化、插件化、动态部署等。
  • 对新技术敏感(,理解掌握下一代架构dynamic feature等。

如果达到这一水平,恭喜你,你已经超过70%左右的人,但是如果要再进一步,比如架构中/开发专家,那么除了理解Android的一些核心原理外,还需要具有架构设计能力,能够从更高层面看待问题,理解整个系统的设计。

专家

作为开发专家,那么除了理解Android的一些核心原理外,还需要具有架构设计能力,能够从更高层面看待问题,理解整个系统的设计。

  • 理解微服务、SOA思想,对于后端开发有一定涉猎。
  • 了解前端研发工具和思想,知道vue react等研发框架。
  • 深入理解跨端技术,如phonegap、weex/RN flutter、小程序快应用等。

那么除了上面的技术方面你与高级工程师差在哪里呢?

1、工作经验与技术积累

说到高级工程师大家的第一印象自然就是工作经验丰富,技术够牛逼。

注意这里说的是工作经验,并不是指工作时间。有的人踏踏实实做项目,业余时间想着多学点新技术,坚持读书,认真写博客总结,多实践,加上自己本身悟性又不差的,2、3 年的时间都可以有别人 3、5 年的工作经验,成长为公司的高级工程师水到渠成。而有的人混日子,做的项目得过且过,业余时间玩游戏,追剧,也许你在公司工作了 10 年看起来兢兢业业,然而你对自己没有更高的要求,安于现状,不求进步,这类人即使有 10 年的工作时间,却只能止步于此。

靠着自己持续不断的学习,以及工作经验的积累,一步一步,见得市面多,踩的坑也多,技术越来越牛逼也是理所应当的事,而技术是一个高级工程师最基本的要求,然而我却认为只要不是傻子,对技术有点追求的人,想达到这点不难,只是时间长短问题而已,除了技术,你跟那些真正的高级工程师还有其他方面的差距!

2、责任心

高级工程师责任心一定很强,责任心是体现一个人的态度问题,对于一个 bug ,他们永远都会重视,想尽一切办法找到原因并尽快解决,而有的人对于 bug 却是得过且过,解决 bug 的态度就是尝试,认为从表面上解决了就 ok 了。

我们 CTO 十几年的软件开发经验,有用户反馈 bug ,不管多忙,不管什么时间,一定停下手头上的事情,去找到原因并解决。我在薄荷的经历,曾不止一次跟着他为了解决一个 bug 搞到深夜,有几次深夜发现一个导致用户不能付款的 bug ,我都躺床上睡觉了,被 CTO 喊起来半夜赶往公司去修复的经历,当时还觉得不理解,时间长了,我才意识到这种责任心是职业素养,现在也深深的被感染,在任何时候、任何时间,我的手机、电脑都是不离身,出问题一定第一时间进行响应!

对比下你们,你们的责任心够强么?

3、主动

有没有这种经历?就是项目做完了,感觉没事可做了,那就刷刷微博,聊聊 QQ 吧。

然而那些优秀的工程师是怎么样的?

他们项目做完了会想着哪里代码写的不够好,会想着重构下。
自己在赶某个功能的时候太匆忙了,刚好利用这段时间看看有没有更好的办法实现。

这个项目做完了,学到了不少东西,又踩了不少坑,写写博客总结下。
做完这个项目感觉架构方面的知识挺缺乏,自己赶紧学习下相关的知识吧。

初级工程师是等着被分派事情做的,分派的事情做完了感觉就没事可做了。而高级工程师会自己主动找事做,他们永远不会觉得自己的时间多余,重构、优化、学习、总结等等等,有一大堆可以主动做的事。

4、敢于承担

初级工程师在拿到一个稍微复杂点的需求的时候第一印象就是好复杂,我实现不了,哪怕这个技术别家证明可以实现。而高级工程师则不会不做技术调研就说 no ,敢于接受挑战,除非在做过充分的技术调研之后,确信确实实现不了,否则都会付出 200% 的努力去实现它。

对于技术如此,同样的对于一些解决方案、架构设计、历史遗留问题的解决甚至项目负责人等的挑战都会勇于承担,你不逼下自己,给自己点压力,你永远不知道自己的潜力有多大,而就是在这一次次攻克难关的过程中,你的成长是飞速的!

所以,不妨试着让自己承担一些有挑战的工作!

5、团队合作精神

如今这个时代再也不是英雄主义时代了,团队才是一切,任你能力再出众,但是跟一个团队比起来,你还是寡不敌众。所以,优秀的高级工程师永远有团队合作精神,永远以团队利益为优先,任何时候,不要做拖团队后腿的那位!

富有凝聚力的团队是一个公司最具竞争力的核心武器,所以,请从思想上让自己有这个意识,团队永远大于个人!

6、参与业务、产品

我见过太多的程序员,产品经理给出需求的时候,闷头就开始写代码,中途需求变动了,然后就开始在心里大骂产品经理傻×,简直就是所谓的「码农」,虽然我们都拿「码农」来自嘲,但是我相信我们都不希望成为真正的码农,我们要做的是工程师!

而工程师跟码农的区别就是,他们不只是闷头 Coding,他们会参与产品、参与业务,虽然我们的主要职责是开发,但是如果能在需求阶段跟产品经理一起讨论,也许在产品、业务上你不专业,但是可以从技术的角度来一起思考,一起参与进来,尽量帮忙把需求更完善些。

初级工程师拿到需求会直接开始做,然后做着做着发现有问题了,要么技术实现不了,要么逻辑有问题。

而高级工程师拿到需求会考虑很多,技术的可行性?对现有业务有没有帮助?对现有技术架构的影响?扩展性如何?等等…之后才会再进行设计编码阶段。

所以好的工程师是可以对产品有很大的帮助作用的,而且跟产品经理多进行沟通交流,除了技术外,对产品、对业务、对商业你也能学到不少东西,以后的路会更广。

所以,不要做闷头 Coding 的码农,做关心业务、产品的工程师!

以上是我总结的优秀的高级工程师的一些标准,别总说你跟那些人只是技术上的差距而已,除了技术,其他地方可能差的更远。技术可以靠时间来弥补,但是其他几个方面可是时间无法弥补的,希望大家自己对照下,不管是所谓的高级工程师也好,还是之后的小组 Leader,甚至再之后的架构师、CTO,这些特质是必须具备的,问问自己,你们的差距还有多远?

如何提升?

如何构建完整的知识体系,深挖Android技术?

很多工作了1-3年的Android人,想够一够 3w月薪的岗位,但在底层技术上却有很大的问题:

毕业几年,表面上用过很多技术,但都没能深入学习,一年的工作经验,干了好几年。结果就是遇到实际问题时无从下手,最终还是走着普通工程师的道路,和高手的距离越来越远。

都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。

技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?以下这些资料可以我想可以帮助到你:

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

相信它会给大家带来很多收获。如果你有需要的话,可以点击获取

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

2020年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。2020年已经过去三分之二了,希望明年回想2020年的你,不是碌碌无为,我们一起加油变成更优秀的自己!

猜你喜欢

转载自blog.csdn.net/ajsliu1233/article/details/108406817