客户端开发未来展望

从移动互联网开始辉煌到现在差不多也有十多年的时间了,整个移动互联网的发展可谓是波澜壮阔,相信未来一定有好事的人把这段经历记录下来。但是最近两年的互联网行业开始出现一种暮气,整个行业面临着增长停滞的困境以及可能被整顿的风险。从前年开始大厂的 HC 开始逐渐变少,从去年到今年大厂开始一轮又一轮的裁员,个行业弥漫着焦虑的气息。虽然目前的现状让人扼腕,但是着似乎才是真实的商业世界。

整个行业的开发岗位变少,客户端开发的岗位就更少,那作为客户端开发的我们面对整个行业泥石俱下的现状,我们应该怎么做,做哪些准备来面对未来?以后只能去卖保险和送外卖或者开网约车?虽然这些行业也很好,但是有没有可能有别的技术发展路径呢?

本文只讨论客户端 App 开发的状况,如果你是专门做端上音视频领域的人的话,这些细分领域虽然也算大的客户端开发框架内,但是具体行业现状我并不清楚,不敢瞎说。

# 为什么客户端开发岗位变少了?

客户端的岗位为什么衰退的这么厉害,其实前两年技术圈子就流行一句短语「客三消」,意思就是客户端的岗位三年内消失。这说法肯定是夸张的,但是跟移动互联网火热的时候相比,这几年的客户端岗位确实是肉眼可见的指数级下降,我自己感觉有几个原因

  1. 业务需求变的少了。 业务需求少了也就不需要那么多人去研发产品了。回想 14,15 年所有的大公司都在开疆拓土,小公司如雨后春笋纷纷冒出来做各种各样的客户端产品,各种风险投资也涌进来,大家都不缺钱,疯狂找人大干快上。这时候是移动开发最好的一段时间,市场对移动端人才的需求特别强烈,找工作也很容易。随着时间推移,移动互联网这座金矿被开采殆尽,很多业务形态逐渐进入稳定,研发节奏变慢并不需要那么多客户端开发,留给新进创业者的机会也变得越来越少了,风险资金也在逐渐撤出移动互联网领域。整个行业都进入了一个平缓发展的时期,对人才的需求没那么强烈了。这是客户端岗位逐渐变少的一个最主要的原因。整个行业的大势过去了。
  2. 跨端的冲击。 从移动互联网开始发展的时候,跨端开发的技术探索就没有停止过。因为这是一项非常诱人的路径。打通了这条路径,开发效率指数级提升,并不只是从两个开发(iOS+Android)变到一个开发这么简单,对于复杂的业务来说也减少了很多的沟通成本。所以各个大厂也前仆后继的进行各种跨端的尝试。目前已经有比较成熟的跨端框架来供开发者选择了,对于很多业务形态来说,这些跨端的框架能满足产品需求,所以公司也就不需要再养两个昂贵的客户端开发,或者说客户端自己卷,转向了跨端开发。这也进一步造成了客户端岗位的减少。
  3. 微信小程序出现。 微信小程其实和跨端非常相似,但还是略有不同,所以单独拎出来聊。微信小程序是给了前端工程师来切客户端蛋糕的机会。最近两年很多小公司最主要的产品形态已经不是客户端 App 了,而是微信小程序,相比 App 小程序在很多场景上是非常有优势的。而且对于公司来说一个前端能把所有的活儿都干了还要客户端做什么?

我觉得以上这些都是客户端需求萎缩的原因,面向未来看的话,客观地说(并不是刻意制造焦虑),这个趋势只会继续增加。所以对于客户端开发者还是很有压力的。所以怎么办?我简单聊聊我的一些看法。首先我觉得有必要简单回顾一下从移动互联网到现在的整个开发的路径。

# 过去到现在

我是 12 年开始接触的移动互联网开发,年底在北京找到了一份做 iOS App 的工作。当时就职的公司目前还在而且一直保持着它所在垂直领域的NO.1。但是现在回想起来当时的面试简直是很简单。基本上就是 UIKit 层面的考察和基本对 C 语言的理解(当时主要语言还是 Objective-C),没问题就直接入职了。

最初的开发就是写界面,UITableView 为主,很少涉及到底层原理,当时还是 MRC 手动管理内存的方式,所以开发的过程经常遇到内存管理不当导致的泄漏和崩溃问题,14 年的时候项目使用 ARC 管理内存方式后类似的问题比较少。

随着开发的不断深入以及业务发展的需要,大家开始对底层知识有更加深入的理解需求,客户端面试开始逐渐涌现八股文,比如 Runtime 和 Runloop,随之而来的是各种机制的原理以及项目的各种优化实践。对于大厂来说这时候 App 变得巨大,开发人员变多,为了提升效率开始搞组件化开发。然后逐渐探索自动部署发布相关的方案。这个过程基本上持续到了现在。

跨端开发最早开始最流行的H5Builder,然后开始 ReactNative,再到最近两年的 Flutter。随着公司的需求越来越多,使用的人越来越多,跨端的框架也越来越发展比较好,这个也是持续在进行的进程。我相信未来跨端开发大概率会成为主流。

# 客户端开发面临的选择

  1. 深耕客户端某个领域。比如音视频相关的领域,我自己觉得这个方向适合对技术和这个方向真的有热情的朋友,有的时候也是需要一些机会去做。比如公司的产品就是重音视频相关的,那就有机会去解除这些技术,慢慢推开这个领域的门。
  2. 跨端开发。就像 iOS 里 SwiftUI 最终一定会替换掉 UIKit 一样,跨端开发未来一定会侵蚀掉大部分客户端开发工作,这个是值得投入时间去了解和学习的,我自己感觉并不需要对两个框架都了如指掌,但是至少要用这两个框架中的一个去实际开发过某个项目,对跨端开发框架有个基本的使用体验。尽管目前跨端框架还有很大的成长空间,但是想想 UIKit 不也是一步步慢慢走过来的么,对跨端开发保持关注,未来再找相关的工作,面试官一定会优先用有跨端经历的人。所以如果公司有新的 App 项目,尽量做好准备说服领导使用新的跨端开发框架。
  3. 大前端。客户端前端化的趋势也很明显,比如微信小程序这几年成长的非常的快,就是使用的前端的技术,前端其实入门比较简单,做深入比较难。对于客户端开发来说,转前端门槛其实并不是很高,从我自己来说,去年写了公司的两个推广小程序,感觉技术上手还是挺快的。瓶颈就是对UI 样式的布局不够熟悉,以及 JS 使用不够熟练,坦率地说,这些也并不是门槛,相信每个能搞明白 Runloop 和 Runtime 的人,搞清楚前端这些也不算难事,唯一需要不断投入的就是时间精力。
  4. 拥抱未来 XR。XR 目前的形势感觉并不明朗,整个产业领域并没有出现类似当年 iPhone 一样的杀手产品,也并没有造成行业的井喷。但是大家的共识是 XR 端是移动端的未来,最近知名的 iOS 公众号 SwiftGG 也创建了 XR Bro 的公众号来专注 XR 领域的学习,所以保持适当的关注和参与,等大潮来的时候抓住机会。
  5. 成为创作者。很多开发者有很好的产品思维,从开始工作的时候就开始做自己的应用,输出自己的内容,现在也取得了很好的成绩,往未来看的话,我觉得还是有很多的非常细碎的需要等待满足,这些事个人开发者的机会,我自己的感觉是个人开发者有点像摆摊卖艺的手艺人,自己包揽整个 App 的开发,得益于苹果的完整的商店生态,让很多个人开发者也有不错的收入。

虽然形势不好,面临的选择有限,但是多少还是有机会的,毕竟总体市场虽然饱和了,但是就业市场也是在不断发生变化。我们开发者能做的就是保持自己不断的学习前进。对于跨端开发和前端的内容学习,如果所在的公司有对应的项目实践其实是最好不过的,我一直觉得有项目驱动的话学习起来会事半功倍,所以也还是要在公司里争取多做事情的机会。

关于客户端转后端的看法,我自己的想法是如果不是对后端特别感兴趣的话慎重转,而且如果要转就早点转,别犹豫。像我现在已经在客户端这方面工作了十年,如果再转后端(全职学习 Allin)意味着之前的前端学习经验在转行过程中很多排不上用场了,除了基础的计算机领域的知识,比如算法,网络和对操作系统概念的理解,别的基本上排不上用场了,在分工这么专业的今天,再去做转行可能要投入比预想更多的时间精力,所以转方向还是要慎重。

整个行业目前都存在着年龄焦虑,这种焦虑确实是实实在在的,但是软件开发这个行业也很年轻,未来这个工作的年龄上限到底是什么,我自己感觉不太好说,每个人的情况和际遇都不一样。但是普遍来说,年龄大找工作不太好找确实是客观事实,我觉得最后一个选项其实也很好,就算以后不做这一行,但还是保留了这方面的一些兴趣爱好,保持创作,创作是永远不会过时的。

技术开发还是要跟着整体的行业走,从更广的时间角度来讲行业也是有周期的,虽然现在整体行业处在下行期,但以后还是有可能会有新的想不到的行业上行的方向,虽然并不知道有多久,保持乐观,找准自己的定位,持续发力。


关注我的微信公众号,我在上面会分享我的日常所思所想。