寒冬之中如何生存(浅谈Android进阶之路)

94 篇文章 0 订阅
94 篇文章 0 订阅

过去十年是移动互联网蓬勃发展的黄金期,相信每个人也都享受到了移动互联网红利,在此期间,移动互联网经历了曙光期、成长期、成熟期、现在来说已经进入饱和期。依然记得在 2010-2013 年期间,从事移动开发工作不知有多火,有工作 1-2 年经验的开发者薪资基本是上万,对招的人专业素质要求也不高,入门即可。从 2016 年底至今来看,局面而是另外一番景象,移动开发市场过度饱和,市场上充斥着太多初级开发者,网上一直流传着移动互联网的寒冬,很多开发者找工作都没以前好找,一些岗位常常面临着百里挑一景象,没有个三五年经验,现在 HR 都是刷刷的翻过。

那么不禁要反问一句,现在从事移动开发,无论是 Android 还是 IOS,未来还有发展空间吗?还有随着移动开发越来越向大前端靠拢,甚至原本一些属于原生开发者的岗位也被前端开发人员胜任,想想在本来拥挤的房间里,还要分割本来属于自己那么点空间给他人用,变得更拥挤了,那滋味肯定是不好受了,那么未来我们的容身之地又在哪里呢?

笔者是从 2013 年底开始从事移动开发,刚毕业那么还是从事服务端开发,写着.NET 技术栈代码,至今也有接近 5 年的经验了。我想说,如果仅仅停留在表面的框架上,仅仅停留在使用别人的轮子上,而对于里面实现机制和原理不求甚解的话,那是很容易被淘汰的。但是如果,在移动开发上有一门深度的技能,比如在 Android 中你对移动架构有一定独特的见解,在性能优化上有一定的造诣,对于Android 系统体系有着清晰的认知,并且在一个行业积累了丰富的行业经验,也是亮点所在,那基本就是属于吃香的类型了。所以简单来说,对于一个概念不能停留在使用层面,要深入研究里面构造如何,为何会有这么一个概念,如果没有这个概念,那又会是呈现什么样的局面呢?开发编程也是一样,要追寻的是编程的道,而不是编程的术,别看现在各种流行框架大行其道,要是深入研究下去,一层一层拨开,你也会惊讶里面的实现机制无外乎就那么几种,套来套去,只不过一些开源库作者或组织封装的好而已。

基于目前市场表现,我们都知道下一个风口是 AI,但是作为一个移动开发者如何在即将来临的 AI 时代吃口红利呢。我的回答是:致力于做一个终身学习者,追本溯源去探寻代码世界哪些不变的道,你又会说了,哪些是道呢,简单举例下,比如编程思想、常用的设计模式、设计原则、算法和数据结构、网络通信机制、操作系统、重构原则、架构思维等等。同时在目前发展情形下,也越来越趋向全栈工程师的路线,借用之前在网上看到一篇文章的图,想进阶全栈工程师之路看需要哪些技能,如下:

 

从图中可以看到技能被分成基础软技能、技术软硬技能,不仅要熟悉移动端开发套路,还要对大前端技术栈也有一定要掌握,同时对于服务端开发流程也要了解,我们很多从事移动开发人员,基本一开始就是从移动端入手,对于服务端开发很多时候是没有概念,这些跟那种从服务端开发转型做移动开发相比起来就处于一定的劣势了,有些甚至不知道 Restful 是什么,还以为是一种框架呢,其实这仅仅只是服务端约定好的接口编码风格而已。

进阶之路

为何会想起写这么一篇文章呢,一方面这几天工作需要,组内正好想规划 2018 年 Android 技术路线,简单来说就是目前我们组处在什么样的水平程度,目前所做项目用的技术处在什么阶段,在未来一年内,项目技术迭代该如何走,走到什么程度。另一方面是从事 Android 开发这几年,一直也没好好规划自己的技术路线,想认真整理下未来进阶之路。我们都知道 Android 技术体系一直很庞大,刚开始学的时候基本是从一个点一个点开始,没有系统全局观概念,同时也是学不过来,从做上层应用开始,到做 Framework 层,然后再到系统层做驱动开发各个层面的开发者都有,绝大部分开发者都是从应用层开发,往往做到 Framework 层就浅尝辄止了,一直以来,做Android 开发有这么两个说法,如果是做应用开发,往应用架构方向发展比较合适,如果是做系统层开发,往往底层驱动比较合适。

看张图:

 

需要高清大纲的可以看文末有惊喜!挑些图中几个点简单来谈谈自己的一些想法。

1)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 的对象,而程序员是不懂原理的,具体内容如大纲所示。

 

2)App开发框架知识体系(app亦对象)

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

 

3)360° Android app全方位性能调优

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

如何写出高性能的代码呢?那就需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了sparseArray替代HashMap。另外,对常用的算法有自己独到的见解,leetcode上有刷个上百道题,这样差不多可以达到精通最常用的排序查找动态规划等算法的能力。再者,高效的算法以及节省内存的数据结构如果配合优秀的符合应用场景的设计模式,那么,这些就为高性能的代码提供了实现依据。

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

 

4)Android前沿技术

现在去很多公司面试,除了你具备基本的能够写一个高性能app的能力后,一般都会在自己的app里面加一些现有的相对较 666 的技术,这些技术我们称之为前沿技术。他们一般包含热升级,热修复,App Instant,强制更新,组件化路由架构Arouter,RxJava,IOC架构方法,Hook技术等等,当然,这些技术你不能只会用,你需要知道他的原理,有时候,你还需要知道如何对这些架构进行改进。另外,非常重要的一点,Android开发者不愿意接受新知识,所以对于现在Google推出的新的技术方案毫无感觉,这些都是被 control C 和control V所毒害,开源让开发者失去了自我,失去了基本的编码能力,失去了深入学习的信心和毅力,所以对于很多google推出的新技术好组件(Google I/O 大会新技术),好框架已经很多人不愿意去学习了这是不应该的,我们需要好好学习啊。

 

5)NDK 模块开发

音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以Android NDK技术已经是我们必备技能了。要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且OpenCV/OpenGl/ 这些又是图像处理必备知识,这些都在我们课程里面有原理级的实战项目。

 

6)提高开发效率的工具运用

工欲善其事必先利其器,如何提供开发的效率,很多开发者在开发的过程中由于gradle不会用导致加载代码非常耗时,这些就是工作成本。还有就是git的使用可以帮我们管理好我们的代码,这个非常关键,因为这个工具可以让我们修改的代码不会因为错误的操作而导致代码丢失。另外,移动开发者,我们至少需要知道如何抓取网络包吧,其中,最常用的stetho就是一个很好的可以进行网络抓包的工具。

 

7)移动架构师专题项目实战环节

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

 

小结

总的来说,技术发展能推动社会的进步,解放生产力,进而提高人的社会生产效率,创造价值。技术落地是需要商业应用场景配合,如何配合呢,就是通过每个不同商业模式来实现。最终一门技术是需要与具体使用业务紧密结合起来,如果脱离技术谈业务显得空洞,脱离业务谈技术显得偏理论,最好是两者相结合。这也就要求我们这些从事软件开发人员在追求技术积累的同时要注重业务积累,让业务驱动技术发展,用技术手段来解决实际业务问题,在技术积累中,辨别哪些是不变的道,哪些又是一时流行的而已,这就需要练就一双火眼金睛了。

 

 

+qq群:853967238。获取以上高清技术思维图,以及相关技术的免费视频学习资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值