说明
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 奋力前行。