前言
近日看到这样一则帖子,引起了网友的热议,网友分享的情况如下:
Android开发,在厦门工作 3 年了,工资不到 1w (目前没跳槽),现在很纠结要不要去一线城市,比如上海,在脉脉看到大神们个个月薪 2w 真的有点心动。 然后自己感觉厦门的软件行业真的很差,工资少加班多,还学不到技术,老哥们给指条路啊!
另有网友高赞回复:
出现这样的情况,其实无外乎Android开发行业竞争压力越来越大。很多Android程序员在三线城市每天都在重复CRUD,技术原地徘徊!投递简历也必定是“十投九挂”。好不容易收到一份面试通知,面试官平时的工作内容又什么都不问,问的都是没怎么听过的名词,什么hybird,NDK,难得问到背过的题,却不按套路出牌问原理,上来就是一顿连环炮,让你措手不及!甚至怀疑自己是个假的程序员,感觉什么都不懂!
我们程序员现在变得越来越浮躁了,欠的技术债太多, 到了要面试的时候,就开始病急乱投医, 一味为了面试去学习些面试题的星星点点, 或者接受各个技术群/博客/资讯网站关于技术的/关于人生的狂轰滥炸, 却积攒不到扎实的深入的技术知识或者应用经验, 这样下去只会越来越焦虑而毫无真正意义上的技术提高.
而问到底层框架,内涵原理,就基本处于无话可说,只能和面试官“执手相看泪眼,竟无语凝噎”。不制造任何焦虑,学习需要的也不是一腔热血,需要的是长期的规划,首先我们需要知道Android开发需要掌握哪些技术栈。
基于目前市场表现,我们都知道下一个风口是 AI,但是作为一个移动开发者如何在即将来临的 AI 时代吃口红利呢。我的回答是:致力于做一个终身学习者,追本溯源去探寻代码世界哪些不变的道,你又会说了,哪些是道呢,简单举例下,比如编程思想、常用的设计模式、设计原则、算法和数据结构、网络通信机制、操作系统、重构原则、架构思维等等。同时在目前发展情形下,也越来越趋向全栈工程师的路线,借用之前在网上看到一篇文章的图,想进阶全栈工程师之路看需要哪些技能,如下:
从图中可以看到技能被分成基础软技能、技术软硬技能,不仅要熟悉移动端开发套路,还要对大前端技术栈也有一定要掌握,同时对于服务端开发流程也要了解,我们很多从事移动开发人员,基本一开始就是从移动端入手,对于服务端开发很多时候是没有概念,这些跟那种从服务端开发转型做移动开发相比起来就处于一定的劣势了,有些甚至不知道 Restful 是什么,还以为是一种框架呢,其实这仅仅只是服务端约定好的接口编码风格而已。
进阶之路
为何会想起写这么一篇文章呢,一方面这几天工作需要,组内正好想规划 Android 技术路线,简单来说就是目前我们组处在什么样的水平程度,目前所做项目用的技术处在什么阶段,在未来一年内,项目技术迭代该如何走,走到什么程度。另一方面是从事 Android 开发这几年,一直也没好好规划自己的技术路线,想认真整理下未来进阶之路。我们都知道 Android 技术体系一直很庞大,刚开始学的时候基本是从一个点一个点开始,没有系统全局观概念,同时也是学不过来,从做上层应用开始,到做 Framework 层,然后再到系统层做驱动开发各个层面的开发者都有,绝大部分开发者都是从应用层开发,往往做到 Framework 层就浅尝辄止了,一直以来,做Android 开发有这么两个说法,如果是做应用开发,往应用架构方向发展比较合适,如果是做系统层开发,往往底层驱动比较合适。
看张图:
挑些图中几个点简单来谈谈自己的一些想法。
移动架构
移动架构是 2017 移动技术年度TOP5话题之一,从中就体会到架构是有多火,记得刚开始学 Android 时候,哪有现在那么框架,那时候谈架构的更多是在服务端开发,比如多层架构,有展示层、业务逻辑层、数据访问层这就是最简单的三层模式,Android系统则是基于事件驱动响应机制设计的单页面架构,其实跟浏览器中的窗口页面是一样的, 系统中一直有个消息轮询监听机制,哪个事件被触发了,相应的响应代码进行处理,这些处理操作是被提前注册到系统中。
最早开始的开发模式基本是基于Android 系统自带 MVC 模式,Activity 基本类似于Control 的作用了,View 和Mode 互相耦合,后来才演化出现在主流的 MVP、MVVM 模式,顺便提一句,MVVM 模式其实是在微软 WPF 技术体系中提出来。
图中显示两个方面:
-
展示层: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components
-
架构层:模块化->组件化->插件化->沙盒/双开技术,比如可以双开微信,类似Docker, 每个页面都是插件,类似Vue.js中每个页面都是组件。
性能优化
简单来说,一个APP 是需要从三个方面被关注的,业务功能、符合逻辑的交互、性能响应。如果我们在使用一个 APP 时候,经常滑动时经常卡顿、时不时崩溃、有些功能设计简直非常规,比如在 Web 网站有树层级等面包屑点击,你非要在手机也搞一个类似树级点击加载,那是不是有点强人所难了,我上拉下拉、左滑右滑不行吗,非要通过点击才行吗?那么性能优化核心是什么呢?追求快、稳、省、小,关注卡顿、内存泄漏和崩溃、代码质量和逻辑、安装包大小四个方面。
推荐学习资料
-
Android进阶学习全套手册
-
Android对标阿里P7学习视频
-
BAT TMD大厂Android高频面试题
以上的全套进阶学习资料整理在我的**GitHub**有下载方式,同时还可以加入我们安卓开发者的圈子一起学习交流!