痴人说梦?来看看程序员究竟是如何做到年薪 50 万的?

我比较了解Android这块,我就直接从Android的角度出发吧。

至于说转管理的事,忽略了,程序员转管理肯定是可取的,但是本文只从技术的角度来说一个程序员如何做到年薪50万。(Ps:略长,相信可以给看完的朋友一点帮助

一个Android程序员达到年薪50万的同时,他也是一名架构师了。(这里防杠一下:月薪是月薪,年薪是年薪,月薪1w一定比年薪12w要高,原因有:年底多薪、年终奖以及各种福利待遇等)

那么,一个年薪50万的Android程序员(架构师)应该要具备哪些知识呢?

我们一个一个分开来讲~

一、项目经验

**项目经验是程序员们最重要的财富,也是面试中必问的问题。**一般面试官都会借着项目经验来考查应聘者的沟通能力和思考能力。但实际我们大部分的情况都是做产品的一个功能或一个模块,虽然我们能很好的完成工作上的要求,但是对于面试这肯定是不够的。对于面试来说,我们还要完成以下四点。

  1. 知道你的项目到底是做什么的,有哪些功能。
  2. 知道你做的项目在整个项目中所处的位置及作用,并能清晰地阐述模块间的调用关系。
  3. 知道你项目的整体架构和使用到的中间件,并对中间件的原理有一定的了解。
  4. 能流畅地阐述自己在项目中解决过的比较复杂的问题。

(Ps:**“面试造火箭,工作拧螺丝”**大家心里要有杆秤,自行衡量)

二、Java语言进阶与Android内核

Android应用是由Java语言进行开发的,SDK也是由Java语言编写,所以我们要学习java语言。另外,虽说kotlin语言得到了Android官方的热推,但是kotlin也是编译成了java语言再运行的。对于Android来说,只要SDK没有用kotlin重写,那么Java语言是都需要学习的。而且Android apk的后台服务器程序大概率是java语言构建,所以学习java也是一种必然。

那么Java中哪些东西是我们Android程序员需要学习的呢?由于Android程序员习惯了 C V 代码块,所以与Android中比较相关的稍微比较难的Java基础几乎都是一个门槛,像:泛型、多线程、反射、JVM、Java IO、注解、序列化等,都是被 CV 的对象,而很多程序员是不懂其原理的,具体的学习内容如图所示。

1.泛型原理与Android网络库数据解析应用原理分析

2.无所不能的反射原理及Android类加载核心

3.Java虚拟机原理

Dalvik虚拟机与JVM的区别

4.多线程及线程池原理技能拔高

多线程与Android线程性能优化

线程在RxJava中的实战

5.Java I/O核心原理及其在Android中的内核应用

6.注解原理与dagger2/retrofit的密切关系

7.序列化与数据自动解析原理

JSON

三、App开发框架知识体系(高级UI与FrameWork)

这块知识是现今使用者最多的,我们称之为Android 2013~2016年的技术。但是,即使是这样的技术,Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道,天天在复制这些代码;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理、代码深处的内涵。所以我们需要从新的角度去分析这些知识点,深入研究他们,要学习源码,模仿源码,然后再hook源码,这样才能说自己懂这块的知识。

这些都是做Android开发,做高级工程师的基础。

1.职业生涯规划

2.面向Android中的一切实体(高级UI/Framework)

2.1Activity与View相关实体知识体系

2.1.1Task启动原理与调用栈内核

2.1.2ViewGroup源码解析

2.1.3View源码分析与高级自定义View项目实战

  • RecyclerView

  • CardView

  • ViewPager

  • SmartRefreshLayout

  • 自定义View

  • WebView

2.1.4事件分发的核心机制

2.1.5Handler通信原理与框架手写

2.1.6Hook Resource源码实现 theme项目实战

2.2FrameWork源码

2.2.1Service内核原理

2.2.2Fragment内核

2.2.3XMS生命周期与内核管理原理

2.2.4Intent数据传输原理和内核

3.实体间的通信方案

3.1各实体之间通信原理与方法

3.2Apk之间通信方案原理总结

4.实体中数据存储专题

四、性能优化

一个app的性能好不好我们需要从两个层面努力。

  • 第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;
  • 第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。

如何写出高性能的代码呢?

那就需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了sparseArray替代HashMap。

另外,对常用的算法有自己独到的见解,leetcode上有刷个上百道题,这样差不多可以达到精通最常用的排序查找动态规划等算法的能力。再者,高效的算法以及节省内存的数据结构如果配合优秀的符合应用场景的设计模式,那么,这些就为高性能的代码提供了实现依据。

另外一个就是对写好的代码进行调优,那么调优的方向就是使用Profiler工具进行测试和检查,看哪里有性能消耗大的操作,然后分析对于代码的问题。调优的方向就变成了如何对内存调优,对耗电调优,对网络流量调优,当然,还有对启动速度,页面切换效果与速度,开机白屏体验,闪屏方面的原因等进行分析和调优。最后再加上一个屏幕适配相机适配。

1.高性能代码编码实战

1.1不可思议的OOM

1.4View过渡渲染层级优化

1.5设计模式

1.6数据结构

1.7排序算法

1.8查找算法

2.用户体验及资源消耗优化

2.5图片库的选择

2.8网络优化

2.9Profiler

3.手机适配

4.代码质量调优

五、NDK模块开发

音视频、高清大图片、人工智能、直播、抖音等等这些年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以Android NDK技术已经是我们必备技能了。

要学习好NDK,其中关于C/C++、jni、Linux基础都是需要学习的。除此之外,音视频的编解码技术、流媒体协议、ffmpeg这些都是音视频开发必备技能,而且OpenCV、OpenGl这些又是图像处理必备知识,这些在学习的过程中都应该有原理级的实战项目。

1.基础开发流程

2.图像处理与热修复应用

3.音视频开发应用

4.人工智能应用

六、Android前沿技术

现在去很多公司面试,除了你具备基本的能够写一个高性能app的能力后,一般都会在自己的app里面加一些现有的相对较为“666”的技术(或者是“无奈本人没文化,一句卧槽走天下”的技术),这些技术我们称之为前沿技术。他们一般包含热升级,热修复,App Instant,强制更新,组件化路由架构Arouter,RxJava,IOC架构方法,Hook技术等等。

当然,这些技术你不能只会用,你需要知道他的原理,有时候,你还需要知道如何对这些架构进行改进。

另外,非常重要的一点,很多Android开发者不愿意接受新知识,所以对于现在Google推出的新的技术方案毫无感觉,这些都是被 control C 和control V所毒害的结果,开源让开发者失去了自我,失去了基本的编码能力,失去了深入学习的信心和毅力,所以对于很多google推出的新技术、好组件(Google I/O 大会新技术)、好框架已经不愿意去学习了。这肯定是不可取的,作为一个程序员如果不能不断地提升自我、自发的进阶的话,30、35这种在网上看到的别人的焦虑,也会发生在你的身上,原因很简单,就是**“技术更替”**,老的技术渐渐被遗忘,新的技术又不会,学习能力还没有应届生强,一旦公司效益不好要裁员,你猜猜谁才是这个“幸运儿”?

1.热升级

2.热修复

3.App Instant

4.强制更新

5.组件化框架设计

6.图片加载框架设计

7.网络访问框架设计

8.RXJava响应式编程框架设计

9.IOC架构设计

10.Google I/O大会最新技术及技术更新

11.Hook技术

七、移动架构师项目实战

架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。

八、提高开发效率的工具运用

“工欲善其事必先利其器”

如何提高开发的效率?

很多开发者在开发的过程中由于gradle不会用导致加载代码非常耗时,这些就是工作成本。

还有就是git的使用可以帮我们管理好我们的代码,这个非常关键,因为这个工具可以让我们修改的代码不会因为错误的操作而导致代码丢失。

另外,作为移动开发者,我们至少需要知道如何抓取网络包吧,其中,最常用的stetho就是一个很好的可以进行网络抓包的工具。

九、微信小程序

移动架构师不可不学习微信小程序。

1.小程序介绍

2.UI开发

3.API操作

4.微信对接

5.任务清单项目

6.电影榜单项目

7.本地生活项目

8.购物商场项目

十、Hybrid开发

混合开发的flutter现在已经逐渐变成了主流的混合开发框架,另外由于阿里系的强大存在,导致阿里系的公司都在用Weex混合架构,这些都是一个Android工程师开拓视野,走向未来必不可少的基本技能。

1.Html5项目实战

2.Flutter

2.1你好,Flutter

2.2Flutter编码语言Dart详解系列

2.3Flutter框架原理与使用技巧

2.4Flutter架构知识落地实现

最后

漫漫开发之路,我们只是其中的一小部分……只有不断的学习、进阶,才是我们的出路!才跟得上时代的进步!

我做事不喜欢光说不练,既然指出了年薪50万的程序员要会这些知识,那我也把我的一些库存都分享给大家。

我从事Android开发十多年了,今年年初我花两个月的时间收录整理了一套知识体系,包括移动开发高级架构技术脑图架构学习视频面试专题文档,有想法深入的系统化的去学习的,可以加入Android开发交流群(820198451),我会把我收录整理的资料都送给大家,帮助大家更快的进阶。

上述的图片都来自于**《移动开发高级架构技术脑图》**想要这个可以另外说明清楚

Android架构师之路很漫长,一起共勉吧!

帮我作曲:主歌A段: 他站在灯塔光芒下, 笼罩在点点星光下; 让月亮也为他照亮, 连时间都暂停, 不愿让他停下。 他望着天上银色星河, 浩瀚宇宙她深不可测。 用心聆听来自星星的呼唤, 连大海都沉醉于, 他轻哼的歌谣。 过渡: 岁月分外长久, 风也为你停留。 再狂野,再无解, 像候鸟也总会南迁; 时间会看到一切。 孩子啊,你无畏做噩梦, 你们即将乘风破浪,追着光起航。 转身的那一刻,谁又知青春已飘走。 走得悄无声息,他也已白发满头。 多想冻结在时间之外,倒流在回忆时空 副歌A: 我也曾像孩子做着无忧的美梦, 梦里藏着无穷无尽交织的错乱时空。 你若回到过去的那列绿皮火车, 回到那个冬天,点亮我的一生。 如果能对着他说,仿佛痴人说梦, 是对未来的梦,回到那小时候。 他会听着我写的歌慢慢长大, 阳光将洒在大地上,时光它会找到。 主歌B: 岁月分外长久, 风也为你停留。 再狂野,再无解, 像候鸟也总会南迁; 时间会看到一切。 副歌B: 我也曾像孩子做着无忧的美梦, 梦里藏着无穷无尽交织的错落时空。 你若回到过去的那列绿皮火车, 回到那个冬天,点亮我的一生。 如果能对着他说,仿佛痴人说梦, 是对未来的梦,回到那小时候。 他会听着我写的歌慢慢长大, 阳光将洒在大地上。 他会听到吗。 结尾: 他站在粼粼波光下, 他站在灯塔光芒下; 和时间对话,两个时空下, 啊~ 慢点走吧。
最新发布
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值