若是从 13 年移动客户端大火开始算起,至今已经有五个年头了。如今移动端的形势也不须要太多的废话来描述,一句话总结就是:“浪潮退去,谁在裸泳一看就清楚。”我但愿借助这篇文章来聊聊在我心目中,移动互联网下一个五年的趋势和机会,以及咱们 iOS 工程师能作哪些准备,实现自我提升。本文主观性的见解比较多,文笔也比较激进,仅供参考。前端
咱们都知道价格会受到供需的影响,若是某项技能在市场上紧缺,那么掌握这门技能的工做者工资就会相对高一些,好比 14 年前先后能写好 UITableView 就能找到一个相对不错的工做了。在我看来,将来几年的移动互联网,会出现“一个过剩,两个不足”,我会逐个分析并试着给出一些建议。程序员
UI 工程师过剩后端
这一点是我老生常谈的了,首先要注意的是避免成为 API 调用工程师,由于这些 UI 方面的知识对我的价值的增加不是线性的,若是你还记得高中数学,请回忆一下 y = ln(x) 这个函数的曲线。从零到写好 UITableView 给一个工程师带来的收益,远远不是从写好 UITableView 到写好 UIStackView 能比得上的。性能优化
就以 UIStackView 为例吧,先不说它从 iOS 9 才开始支持,而要想应用不支持 iOS 9,怕是要等到猴年马月了。就说它提供的功能,虽然简化了已有场景,但这个功能彻底能够经过封装已有的组件来实现,相信不少大型项目都有,为何还要费力气去兼容版本,以及再学习一个新的 API 呢?人的精力是有限的,若是你老是追着苹果的脚步,每一年补 WWDC 上那些新坑和老债,那么视野就永远只能停留在 iOS 中了。网络
我拒绝追随 WWDC 的另外一个缘由是把本身的职业生涯押注在一个平台或者公司上,是极度不明智,也是极度危险的,即便这是苹果。上半年的时候咱们小组招聘,我负责筛选了一批简历,其中有一位已经三十多岁,十年经验的程序员,他的简历让我感触良多。他本科毕业后就在诺基亚负责塞班系统的研发,大概至关于今天的苹果公司负责写 iOS 系统,看起来光环很是明显了,后来前后去过两家生产安卓手机的大厂,如今又申请 iOS 的程序员职位。在他的简历里,我看不到一个十年程序员该有的技术和思惟深度,只有一个又一个古老名词的堆砌。所以,我衷心的建议各位读者,在你学习一个新技术之前,不妨先花十秒钟猜想一下,这个技术三年后,五年后,十年后会是什么样?猜不许没问题,若是有了明确的答案,还往坑里踩,就只能怪本身了。app
固然,我并非全盘否认 UI 的技术,毕竟程序员拿工资是由于你能为公司创造效益,因此该作的需求仍是要 100% 高质量的完成,也就是说该学的仍是要学。但若是是业余时间的自我提升就另说了,个人建议是找一个 UI 组件认真学习下,把官方文档读一遍,本身写个 Demo 理清楚知识脉络。我并不期望这个组件能真的帮上什么忙,但一个合格的程序员,也历来不该该只作本身会作的事。合格的程序员应该要有触类旁通,快速学习的能力,因此只要找一个组件熟悉一下整个学习流程就能够了。了解一个 UIStackView 的来龙去脉以及如何兼容低版本是一个程序员好学的体现,但若是一个程序员只是每一年学习新的控件,又不能在项目中取得较大的收益,就只能说是学习方法有问题了。ide
从技术角度来讲,苹果的 UI 布局是我见过最落后的方式,不管是前端的 HTML 仍是安卓的 XML 都要比 iOS 先进。这主要是由于把布局信息耦合进二进制代码很是不合理,并且必定程度上损失了动态化和解耦的能力。若是 iOS 的布局方案未来有较大幅度的优化,我能够断言绝对不是 Autolayout 这样的鸡肋工具,或者 Storyboard 这种傻瓜工具。相比之下我更看好一种统一的,可以跨端布局技术,好比 flexbox 规范。函数
其实作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个个人iOS交流群:681503716(验证码:寂静),无论你是小白仍是大牛欢迎入驻,你们一块儿交流学习
专业技能人才不足工具
这里的专业技能指的是移动端这个大话题中里比较垂直的知识领域,大概包含如下几个方面:布局
图像/视频处理
随着网络基础设施的普及,以及流量费用的大幅度下降,4G 基本上已经全面商用了,若是说移动端前五年是文字为主,图片视频为辅的话,在接下来的几年中,用户对高质量图片和视频的要求会日益增加。
因为我对这个领域并不了解,因此可以推荐的并很少,在我印象中,OpenGL 这种跨平台的引擎,计算机图形学的知识,视频编码与协议都是能够花时间研究的,如今有不少优秀的创业公司也急需这类人才。严格来讲这些知识都不算移动互联网方面的知识了,因此门槛较高,但门槛这东西是个双刃剑。它会增长你的学习难度,但一旦你掌握了这门知识,门槛又会变成你我的价值的护城河。
我格外想要声明的是,CoreAnimation 这类的东西若是不是工做中强制要用,通常就别碰了,就像没人会傻到用 SpriteKit/SceneKit 去写游戏同样,这种 API 密集型,又不能跨端的库是没有前途的,真正有价值的动画必定是用一套统一的 DSL(领域特定语言)去实现,而后导出到各个平台上,因此开发者必定要多在动画的原理上下功夫,好比了解矩阵变换,线性代数这些,而不是把时间浪费在阅读官方文档上。
把事情搞定
在任什么时候候,一个靠谱的,能把事情搞定的工程师必定是受到欢迎的。靠谱是一个很虚的概念,我以最近的观察简单的举两个例子。
当项目比较大了之后,随着参与开发的人数愈来愈多,与技术无关的事情也会占据愈来愈大的比重。好比协调和沟通,测试,后端的人力何时到位,某个 Bug 如何追查复现并定位,新版本的需求哪些能够作,哪些缓一缓,能作的需求何时提测,何时灰度,何时正式发版?这些事情很琐碎,须要很强的责任心,并且在求职的时候比较难体现出来(除非有知名的 app 背书),但相应的好处是绩效通常会比较不错,并且在领导心目中的印象会比较好。技术不敏感的同窗也能够考虑这条路线。
虽然我一贯对 UI 开发很不屑,但事实是若是一个 iOS 工程师能把各个系统控件玩得很溜,并且有本身对控件的积累和封装,再了解一些性能优化方面的知识,找到一个至关满意的 iOS 职位也不会太难。若是你走的是这种传统的 iOS 开发路线,不妨问问本身,每一年的 WWDC 都看完了没,移动开发的各类工具是否都能熟练使用(好比 Reveal,Charles 等),能不能熟练到任何复杂的页面,都能经过本身积累的组件在短期内实现?然而根据个人观察,绝大多数应聘者的简历里博客都不多,更别提 Github 上面有持续迭代的代码了。这条路线的缺点是职业生涯天花板相对比较低,基本上到高级 iOS 工程师就为止了。
逆向工程
研究逆向工程的做用不只仅是破解 app,在我看来更可能是学习底层的操做系统。在开发 app 的过程当中,咱们使用系统提供的库,调用 API 就能够实现需求,其中的过程彻底是黑盒。而逆向工程的目的就是要开盒子,利用一些工具从二进制层面入手,反过来推测应用开发者的代码和逻辑。这其中会涉及到不少 C 语言,操做系统,编译原理方面的东西,相对来讲门槛很高。逆向工程对企业对价值也很大, 由于你们都不但愿本身被竞争对手一眼看穿,又对竞争对手对秘密颇感兴趣。
小结
以上是几个我目前能想到的,能够花时间研究的专业知识。这些知识大可能是自成体系的,没有较长时间的积累,很难入门。这一点很是重要,由于不少知识看起来很是专业,门槛也很高,好比我下一节就会提到这样的例子,但这些知识我并不鼓励学习。区分的标准是,你学习的知识是一个知识点仍是一个体系,若是你学习的只是知识点, 那么它只能是整个知识树上的枝枝丫丫,边边角角;若是你学习的是知识体系,就具有了衍生知识点的能力,也就是我反复强调的触类旁通的能力。
上面举的三个例子都是我认为不容易遭到时间的淘汰,比较值得研究的话题。在这些领域上的投入能够理解为线性的,也就是一分耕耘,一分收获。