开篇

关于我

我是一名移动开发者,也做Web和混合开发,目前有6年的开发经验。

最早接触的是iOS开发, 那是在大三尾巴上的时候,那个暑假去魅族实习,挣了万把块钱,就”败了”一台MBP 13。当时买它的主要原因还不是想做Apple的开发,是源于我们的Team Lead。他从微软回来后加盟的魅族,也在微软做过Scrum Master, 带领团队。他提到在美国,老美们都用Mac开发,说它是开发利器,加上我们当时做Ruby on Rails,每次看他”秀”终端操作和工具的时候,总觉得那才是一个开发应该有的样子。当然你用其他系统一样可以开发,一样可以使用终端操作。除此之外,我还想学iOS开发,毕竟魅族当时也被誉为”中国的Apple”,我们的产品经理也是苹果粉,天天在爱范儿关注着各类信息。就这样,在他们的持续熏陶下,我踏上了iOS开发的道路。

整个大四一年算是学习iOS的入门阶段,尤其是刚开始,完全搞不懂内在逻辑,只能把别人代码拿下来,跑通了就算谢天谢地了。就这样断断续续的学习,直到本科毕业。毕业后加入了一家旅游公司,算是腾讯系,一开始在里面做Java,负责优化网站搜索引擎,有深度,但是很枯燥。做了一个月后,本来我以为我就要在Java的道路上一去不复返时,公司来了两个iOS开发,负责移动端的研发工作。那时的我就像发现救命稻草一样,赶紧和领导商量能不能调去移动组。领导也很快答应了。刚来的移动负责人增民也很开心,毕竟又多一个”小弟”,而且还做过一段时间iOS,上手应该很快。没成想上手开发才知道我对很多知识点还是一知半解,写出的代码用他的话说就是”out of control”。但他依旧没”放弃”我,让我和另一个iOS开发(Matt, 从PHP转行过来)一起正式开始了iOS的升级打怪之路。

就这样过了半年,我从一个行业小白慢慢踏进了这行的门,理解了基本的UI开发,熟悉了UIKit。我们三个也成了好朋友,虽说那时候(2014年)我们公司就开始实行996,但我们还是会在有限的时间内一起出去搞团建。直到现在我们依旧联系,聊聊技术,聊聊国内的生活。也是从那时起,我开始写博客,不过没坚持多久我就离职了,收拾好行囊奔赴新西兰求学。

来了新西兰用了半年时间(有效读书时间)拿下研究生学位,并在读书期间和奥大教育系合作,开发了一款教学App; 还找到了一份移动开发工作(local本地公司),之后顺利拿下了绿卡。之后就跳槽到现在的公司,目前是Fiserv高级移动开发兼Scrum Master。

重开博客

写这篇博客的时候我已经28岁了,国内很多这个年龄的开发已经开始转管理岗了。相比国内,国外好些,做开发的生命周期长点,新西兰公司也不太在乎你的年纪,干的动你就干。但即将30岁,我总得想清楚自己以后的路怎么走,要成为什么样的人。移动开发是我的本职工作,自然要精,但怎样算精?学习无止境,时间有限,不要瞎学。

移动开发最火的时候已经过去,现在网上不少iOS开发抱怨不好找工作了,拿不到那么高的工资了。但细细分析就会发现这群人中大部分都做着和刚入行差不多的事情,也基本都局限在UI的开发上; 网络,本地存储,线程这些基本的操作也都局限在会用而已。那如何才能摆脱这种困境,完成iOS的进阶呢?

笔者认为,一个优秀的iOS开发,必然不仅仅局限在iOS的世界中。与其相关的任何技术,都应该有所积累和个人见解,并且善于总结,iOS的世界很宏大,为了避免无效的积累,有一套自我学习的标杆和方向是格外重要的。以下知识点就是我总结的iOS进阶之路知识体系。

  • 开发基础/进阶(Cocoatouch Frameworks, Runtime, 编译, 内存, 线程等)
  • 测试(Unit/UI Test, PEN Testing, Performance Test, TDD等)
  • 架构(MVC, MVVM, MVP,响应式编程)
  • CI/CD(DevOps, Jenkins, fastlane, 以及一些轻量级工具等)
  • 网络(服务器的实现,缓存优化,认证及安全等)
  • 存储(沙盒机制,持久化方案,Keychain)
  • 安全(本地数据保护,网络安全,反编译和代码混淆)
  • 多媒体(音频,视频,图形图像)
  • 版本控制(Git, Code Review等)
  • 证书(原理,重新签名等)
  • 优化(统计埋点,App瘦身,电量优化等)
  • 跨平台方案(Flutter, RN, 实现原理)
  • 智能时代(ARKit, CoreML)
  • 软实力提升(敏捷开发,项目管理)
  • Android开发

网上有很多iOS知识体系的脑图,大家也可以参考。重要的是找到适合自己学习路线,将平日的学习有的放矢的归类。

博客的宏观路线

笔者的博客名: Full Stack Mobile Developer。看上去可能不好理解。我在此稍作解释。就如我上文提到的: 一个优秀的移动开发,必然不仅仅是局限在移动的世界中。无论是网络知识还是安全知识,都应该有涉猎,并有自己的一套解决问题的逻辑, 技术选型,风险评估等等。总而言之就是: 对于移动开发,从产品的设计到发布这个过程中,你能提供所有环节的技术支持和团队管理能力。这些如果都能很好地完成,那么这名移动开发就可以称为”全栈移动开发”,而且满足无论是组长还是技术组长的考核要求。

本博客就建立在这个目标之上,之后的文章也都会归属于以上的大类。同时我也会维护一个github仓库,把博客涉及到的代码资源公开,以方便读者们学习和交流。