客户端开发的成长思考

前言

不知不觉又过去一年,又增加许多客户端开发经验。有关注我更新的人可能会注意到,每隔一段时间我会对经历和环境做分析,同时也对未来做一些思考。从自身经历出发寻找能力的成长点,发掘突破的机会,记录心路历程的改变。
本文从自己的经验来解析客户端开发的成长思路,希望对你有一些帮助。

正文

客户端开发要做什么?

作为客户端开发程序员,首当其冲就是完成业务迭代,服务好产品用户和业务团队。服务好产品用户是业务团队存在的价值,服务好业务团队是客户端开发存在的价值。业务发展要考虑变现,要考虑增长,要考虑留存等等,最终落地的环节往往需要客户端开发来实现。
除了业务迭代,根据业务特色和客户端开发团队特点,会围绕高效研发体系和稳定研发质量不断做优化,也有的会尝试跨端能力建设、新技术探索落地。在更大一点的公司还会关注团队的技术影响力输出,以及不可忽视的安全和合规能力。
为了更好的衡量客户端质量,往往会用卡顿、卡死、crash等基础指标来评估质量,同时也会不断做包大小优化、启动优化、磁盘和流量监控、流畅度优化、cpu和电量优化等等来提升基础体验。同时还要关注研发过程中的效率提升,比如说研发流程优化、编译优化、自动化测试等等。
客户端能做的事情非常多,有服务于用户的业务方向,也有保障质量的基础方向,还有提供各种通用能力的中台方向,还有从事各种跨端建设、音视频处理、网络建设等等。从供需关系来看,智能手机的市场规模是客户端开发岗位需求的天花板,全球接近40亿的智能手机就是客户端开发这个行业的未来保障。至于脉脉“客三消”理论鼓吹的大前端取代客户端开发,是典型的杞人忧天。从事过客户端开发的程序员都知道客户端原生Native开发是不可能被跨端的技术完全取代。RN、flutter等是在某些特定环境下会有不错应用收益,但不管是交互体验、研发体验,各项性能指标都比不上原生开发语言。

行业风险点在哪里?

客户端开发是移动互联网快速发展的产物,本身也有一些从事的风险点,从我的经历来看,主要有以下问题:

重复劳动的陷阱

客户端的很多日常工作是需求开发,需求开发主要是由各种业务逻辑、各类界面的实现。最常见的现象是一年经验用三年,三年经验用十年。由于客户端所见即所得的特点,很多开发者在度过前期的上手期之后,就一直重复使用类似的思考模式去解决问题。如果没有环境压迫,也没有自己主动去思考突破,会在日复一日的劳作中迷失成长。时间较长之后,往往会陷入能力增长的瓶颈期。

岗位需求两级分化

客户端开发的求职者和招聘者之间,现在有一种相互矛盾的现象:求职者感觉外面客户端开发的需求量在不断的变少,招聘者一直在苦恼招不到人。
客户端开发的岗位减少是由于移动互联网的基建越来越成熟,相比流量成本和维护成本都更高的App,很多小公司选择使用了更加便捷的小程序、公众号、抖音短视频等等大公司提供的基础平台,导致了客户端开发的岗位需求量在不断减少。
招聘者苦恼的是招聘不到优秀的开发者,由于互联网行业常年有长期唱衰客户端开发的现象(从以前的PC开发到现在是移动端开发),再加上最近几年兴起的算法岗位和数据分析岗位竞争,越来越少的优秀毕业生投身到客户端的这个行业上,导致优秀的开发者供不应求。

程序员的中年危机

“中年危机”是悬在程序员头上的达摩克里斯之剑,这不仅仅是客户端开发会面临的问题,这是所有大龄程序员都必须面对的互联网从业现状。由于前面提到的互联网基建成熟带来了的客户端岗位需求减少问题,客户端开发在中年危机这个问题显得更有压力。
但是如果觉得从事前端开发或者后台开发就不用面对中年危机,就是太过于乐观了。设想一下,一个公司为了节省成本都不做App了,他还会去招一个40的前端开发或者后端开发吗?
互联网行业在快速发展,薪酬待遇也在不断提升,这也带来源源不断的新人。当一个新人和老人能力相差不大时,性价比更高的新人往往更容易胜出。想要避免中年危机,唯有不断锻炼自己的能力,思考自己的不足之处,提升自己在市场的竞争力。

客户端开发要如何成长?

根据自己的粗浅认知,我觉得有下面几个方向可以努力。

学技术、学做事、快速成长
  • 学技术,不断积累基础知识,既有技术知识,也要了解一些业务常识
  • 学做事,熟悉工作流程,学习独立工作和多人协作
  • 快速成长,需要掌握基本的学习方法论,能够自驱成长
懂设计、有深度、独立思考
  • 懂设计,知道如何应对一个复杂的系统,用掌握的知识设计一个良好的解决方案
  • 有深度,经过一段时间的深入学习,可以在某一个方面上有较为深刻的认知
  • 独立思考,掌握的信息足够,自己尝试做一些思考和判断,并根据环境给予的反馈进行调整
深广度、有规划、扩大影响
  • 深广度,在深度这块能够有扎实的积累,足以解决项目中的疑难杂症,对核心难点进行攻关;在广度能够触类旁通,多接触整个行业的技术知识
  • 有规划,不管是自己的工作,还是负责的范围,都需要三思而后行;先有规划,确定目标、方向和具体的事情,再具体执行
  • 扩大影响,自己已经有足够的技术和业务知识积累,能够尝试去影响更大的范围,影响更多人
理解人、拆分事、长远目光
  • 理解人,做事已经经验老道,但是人是足够复杂到一辈子探索的复杂综合体;理解人就是理解一个团队,理解一个人的成长和做事
  • 拆分事,将足够复杂的事情拆分成可以分给多个人完成事务,或者可以给一个人分多阶段去完成的事物,并在过程中及时跟进保证目标的完成
  • 长远目光,不仅能解决当下的问题,也能看到业务发展中,团队需要的能力,也能储备和规划需要的能力

一些老生常谈

程序员996的问题

大部分公司的官方回答永远是弹性工作制,事情干完就可以走。但是事情永远不可能做完,事情可以做完的公司还有市场竞争力?
我的看法是顺应潮流,合理安排时间。优先完成工作的事情,然后利用多余时间来进行学习。尽量不要把工作安排的满满当当,这样疲于奔命会让生活非常疲惫;也不要夸大工作难度、浑水摸鱼,摸鱼是对自己最大的不负责。按公司提倡的工作时间,合理安排工期,如果还有一些时间可以放松下心态,花点时间学习和成长。

经常做需求没成长

可以从下面几个方向去探索:

  • (深度)不断挖掘代码背后的底层逻辑,即使是简单的加载图片,也有涉及到非常复杂的知识。
  • (广度)探索这些业务逻辑代码的相关知识,理解业务数据,关注产品、设计的重点和思路。
  • (效率)思考更快做完事情的可能,提高自己的效率,再到尝试提高别人的效率。
  • (成长)争取每天有5~10%左右的时间来学习、思考、总结。
工作中如何获得成就感和认同感

学习如何从重复工作中学习和成长是必须的,因为再新的工作也会变成旧的工作。
学习的方向可以是做事、技术、思考、规划、团队等等,找一个当下最需要成长的能力开始锻炼。合理使用环境的压力,形成自己的学习和成长动力;偏技术侧需要自己拆分目标,逐步实现目标,这是非常重要的自驱力。
成长的过程很简单,制定目标,实现目标。目标需要有一定的量化标准,模棱两可让目标变得不可触碰。制定目标也要考虑目标的指引作用,对个人而言,目标描述的过程会比结果更加重要。
努力学习换来好结果,好结果继而激励产生进步动力,建立一个良好的正向反馈循环。

总结

一个职业的未来,要看行业的发展前景。移动互联网的发展规模,注定客户端在短期内仍然是刚需。至于长期发展之后,移动互联网被新的时代取代,那么也会有新的岗位延伸出来,到时再紧跟时代潮流即可。
另外要把业务和技术分开,技术只是一个工具。在前期确实需要积累客户端的知识和相关技术,但是随着时间的推移,慢慢会接触更多的知识。不要给自己设限制,在适当的时机技术栈可以扩大到后端。假如某个人只做某一个模块,那么也需要去接触这个模块的前因后果,数据的产生消费。眼界如果局限在客户端,那么只能知其然不知其所以然。重点是在于人,人才是解决问题的核心,具体的技术只是工具。

你可能感兴趣的:(客户端开发的成长思考)