一位大龄野生 iOS 开发者的 AR 转型求生记 | 掘金年度征文

2,829 阅读6分钟

说明

iOS 开发早已经远离风口了,虽然不至于真如网上调侃的那样:iOS 没人要了,但是事实上除了大神级程序员和基础扎实的科班新人,其余的程序员基本都面临着和我一样的困境:

  • 大龄:80 后很多, 90 后只有一半左右,95 后几乎没有;
  • 野生:绝大部分都不是科班出身,普遍算法基础差一些;

这些都导致我们这些普通的 iOS 开发者工作环境不好,薪资不理想。而很多水平不错的程序员都已经开始了转型之路:IoT,AI,区块链,小程序,RN,Flutter...

我也尝试做过一段时间蓝牙 wifi 开发以及小程序开发,但是出于个人兴趣和特长,还是选择了朝 AR 方向发展。从 2016 年开始,就决定笨鸟先飞,业余学习苹果上的 3D 游戏框架,因为我认定苹果如果搞 AR,必然是以自己的 3D 游戏框架 SceneKit 为基础的。后来,果然如此,于是我顺势开始研究苹果推出的 ARKit,但是,学习的过程中遇到了越来越多的问题:

  • 只能业余研究,间断学习,导致极其不熟练,很多时候都是大概知道是这么回事,一写代码困难重重;
  • 基础太差,一是常规的算法和数据结构不熟练,二是图形学基础几乎为零,导致经常完全不知道自己抄的代码是什么意思;

前两年开始,我注重补足基础,一方面学习算法和数据结构知识,另一方面尝试学习 OpenGL 和 Metal。

但是学习的过程极其困难,无专人指导,碎片化学习,又找不到适合自己的教程,导致我刚一开头就举步维艰,受挫极其严重。断断续续花了一年多业余时间学习,最后也只能勉强在 leetcode 上做几道 Easy 难度的题目,而 OpenGL 则只学会了画三角形和立方体。

一直到 2019 初,我才终于在算法和数据结构上有了比较大的进展,下半年又成功顺势进入了 AR 行业,终于成为了一名 ARKit 开发者。

算法

之前多次在算法学习上受挫,导致我差点放弃,曾经试过在 MOOC 上学习某知名大学的算法课,让我一度怀疑自己的智商不适合当程序员。

而作为一个小厂大龄野生程序员,学算法成本极高但受益又很少。几度放弃又重新开始,主要还是为了我的 AR 梦想,要学会 AR ,算法是跨不过去的坎,躲不开的债。

过去一年多,我都在一边不断啃算法,一边不断寻找适合我的学习方法,终于还是在上半年找到了适合我的算法入门教程,完成了算法基础的突破。能比较顺利的在 leetcode 上刷题了, 简单难度的可以很快拿下,中等的也基本有了思路,只要时间充足一般也能写出来了,成功达到了入门级水平。可能让各位大神感到搞笑,但是这就是我的真实水平。

上半年空闲时,终于在 leetcode 上刷够了 100 道题,虽然大部分是简单难度的,但对我自己是个很大的进步。因为我的坚持终于熬过了最低谷,走上了正向循环的道路。

这里不直接推荐某个课程,因为每个人水平不同,习惯不同很难有统一解决方案。不过,我觉得一个好的课程应该有以下特点:

  • 算法内容是正确的
  • 相对系统完整地讲解
  • 先从数据结构开始,然后再讲算法
  • 适当配合刷题
  • 讲解风格适合个人口味

大家如有需要,可以自己去找一下,看哪个适合自己。

AR

当初学习 ARKit 时,因为是碎片化学习,学一点忘一点,十分痛苦。为了更好地学习记忆,我干脆翻译/写作了一堆文章来帮助自己整理相关知识。不知不觉积累了 100 多篇,这也有效帮助我进入了向往已久的 AR 行业,成功成为一名 ARKit 开发者。

长期的理论学习和写作,让我对 ARKit 的各种功能和 API 烂熟于心,在工作中确实帮助很大。当然,也发现了很多以前没搞明白的细节,吃了不少苦头,于是又总结了一系列实际开发小技巧:

如今,我感到自己已经基本掌握了 ARKit 的基础知识,打个比方的话,就相当于 iOS 开发熟练掌握 UIButton/UITextView/UITableView 等常见组件和 API 的水平。本质上来讲,这是个很低的入门级水平,只是暂时勉强够用而已。

总结与展望

2019 年,我从不断学习中找到了自己的正反馈循环,终于不再整天迷茫: 30 岁程序员还在写代码有前途没有/iOS 没人要了该怎么办/ARKit 不火怎么办/35 岁没做到管理岗位怎么办?

2019 年仍是 AR/VR 的寒冬,各项技术和产品并不成熟。2020 年估计也只是略有起色而已,真正的消费级 AR 产品普及还任重道远。但我将继续在这条道路上努力,没有功德圆满,没有一步登天,只是进一步有进一步的风景和快乐。

2020 年规划:算法

明年,算法学习仍将继续,leetcode 刷题是我的主要任务之一,另一个算法相关的任务是:线性代数与计算几何。就是学习一下计算点/线/面/多边形/几何体之间相互关系的几何算法。

2020 年规划:图形学

虽然已经翻译了很多 MetalKit 内容,但是我的图形学水平由于缺少实践又无人指导,实际上理论水平相当低,实践能力更是差。知乎上的大神说得很好:学习图形学的最佳方式,就是手写一个渲染引擎,就算简单又破烂也没关系。

我没有能力自己去写一个引擎,但是按照 Raywenderlich 家的入门级 Metal 教程,去完成一个简易版 3D 引擎还是有希望的。

最后,还要感谢掘金这个平台,以及各位朋友对我的支持,没有大家的互动和反馈,我早就坚持不下去了。2019 再见,2020 奋力前行。

掘金年度征文链接

掘金年度征文 | 2019 与我的技术之路 征文活动正在进行中......