我如何自学 iOS 开发

我如何自学 iOS 开发

即将回重庆去完成毕业答辩,所以我想回顾我从自学 iOS 开发起至现在的历程,也谈谈对我目前短暂的开发生涯来说最重要的三样东西:兴趣、成就感和世界观。

其实我最开始的兴趣并不是编程,而是对于各种软件、系统的使用。在大三之后,我还是没有用到我真的所需要的那样的软件,也没有打造出我所想象中科技无限便利生活的环境,所以别人编写的程序满足不了我的需求,于是我有了自己编写软件的想法,同时这也是我的兴趣所在,不知道该如何去确切的描述这种兴趣,但我能感觉到,这并不是单纯的编程的兴趣,也许是想要一种改变。


大学时期

那时候是大三寒假末期,我不再像前几年那样整天泡在游戏,我买了二手 Macbook 开始自学 iOS 开发,我从网上找来许多电子书和视频,都是特别零散的学习资源,现在唯一还有印象的就是慕课网。前期我大概把 UIButton,UILabel,UIView 等这些基础控件全部试用了一遍,再是由于 Storyboard 的便利性,大三下期开学时,我已经可以做一些像是温度转换器之类的无聊应用。

然后我开始寻求更广阔的知识,而国内的大部分开发教程都是好几年前的,所以我不得不去找一些国外的新的资源,我偏向于视频学习,但那时候我英文很差,英文的视频教程我没办法看,于是我从英文书开始看起。

1 (我所看过的部分教学书籍)

得益于 MacBook 的”用力点按”功能,在英文书中有任何不明白的单词只要重重按下触控板就会显示词意,再配上朗读功能还可以知道单词发音,如果是长段的英文就直接放进 Google 翻译。随着时间的流逝,我看英文变得越来越轻松。

2 (”用力点按”功能演示)

在每本 iOS 开发的入门书籍里,都会讲到 UITableView,我那时就在想,不要只按照教程去做,我想独立开发应用,那时候我对 UITableView 最熟悉,所以我就想开发一款待办清单类应用。但仍保持继续学习,只是每当学到一些知识的时候,我会思考如何将它放进我的应用里。

在不断的学习中,不断将照自己的想法写入代码,将电子世界里的代码编译输出,在现实世界呈现并产生改变,这件事跨越两个世界,是极具成就感的。当花一个下午甚至好几天的时间去实现一个功能,或是修复一个错误,成功后,这种成就感无可比拟,这种成就感也推动我不断深入学习。

这段时期里,我差不多每天早上七八点钟起床,然后去食堂买早饭,在路上边走边吃,一直走到图书馆,正好吃完,然后上楼打开电脑写代码。有需要上课的话,就把电脑放在桌子下面写代码,下课再去图书馆写。吃午饭和晚饭前,我都会回寝室,把电脑充电,吃完饭后,再回寝室玩一玩,又再去图书馆。晚上大概九点离开图书馆,把电脑放回寝室后,再去操场跑几圈。

但我也会做其他事,比如晚上我也经常会在寝室看电影,下午也说不定会和朋友打羽毛球,上瘾了也有去网吧玩游戏,天气好还可以在操场晒太阳,下雨可以在我们学校的“花果山”上荡秋千,饭后可以去江边吹吹风,再参加参加校园摄影比赛,还可以作为正方四辩总结陈词……

好像直到大四,我完成了两款应用的开发,其中一款名为:行动日 ,就是我想做的待办清单类应用,已经上架苹果应用商店,这是当时我为它写的介绍:我独立开发的第一个应用:“行动日”。另一款没能上架,所以我打算在毕业答辩时使用它。

那时我一些同学已经找到实习,我也广投简历,最初的面试经历惨不忍睹,然后才知道去看一般 iOS 面试时的问题,又在好像几个星期时间里,我不断的学习网上所流传的面试题所包涵的知识,最终在上海找到我的实习公司。


实习时期

在开始实习的第一个月里,我被分配到一个使用 OC 的项目,那时候我完全不会 OC,所以代码写得很慢,不过好在有同事可以请教。一个月之后,公司启动新项目,我去了一个使用 Swift 的项目,一直做到现在,已有半年左右,期间获益良多,除开发能力的提升外,也知道产品的开发流程,如何与同事协作等等,大学独自写了半年代码,实习期我和前后端十几位同事共同写了半年代码,到现在也算有一年开发经验。

实习期我感到,虽然每天都在写代码,但我并没有像大学时那样每天都会获取新知识,而只是在积累经验。但承蒙主管和老板们的关照,他们经常和我谈心,一方面担心我刚来上海的生活,一方面是对我的引导。在与他们的谈话中,他们都结合着自己的经历,告诉我去追求“广度”、”深度“、”责任感“与”自身价值“。

所以有时候,我会去公司天台、公司旁边的交大医学院的教室或者操场继续学习,那时我已经看完了几本的入门级的开发书籍,觉得都大同小异,然后我开始看进阶级的书籍,并关注了一些开发者、博客和 Youtube 频道等等。在看那些博文时,我几乎会对于每一篇都做笔记,但这里的笔记大部分都是对文中的重要段落和代码的摘录。

3 (我的备忘录)

发现这样的知识转化率并不太高,于是我开始尝试费曼技巧,这是一种十分强大的学习方法,这种学习方法的核心含义是,只有我让别人也能掌握我所掌握的知识,那我才算真正掌握这种知识。所以我开始写博客,为了让别人明白我所写的内容,我被迫将我脑中含糊不清概念弄清楚,被迫去追究细节。

但还是觉得不够,有一些复杂理论或者逻辑,并不方便通过文字、图片、或者视频表现出来,于是我用工资买了 iPad mini 和 Apple Pencil,得益于 Mac OS 和 iOS 之间的无缝衔接,再面对密布的代码时,我不用再去复制摘录,而是提炼,将我脑后中的数据和模型直接画在屏幕上,任意组合排列,这才是我真正想要的学习形态,一个完全大脑映射而出的笔记,不用再从电脑上来回切换 iBook,Safari 和 Xcode,这也是对我来说帮助最大的学习方式。

4 (我在 iPad mini 上所记笔记)

即使凭着兴趣和成就感,学习也难免会枯燥,所以真正好的学习方式并不是持续学习,而是平衡学习。除了编程以外,我还有很多兴趣和想要做的事情,所以我仍会像大学时那样,每个周末去看看艺术展,去一个来上海后还没去过的地方,和网友一起看《黑镜》跨年,看看经济学的书,尝试拍摄 Vlog,听来来往往的室友讲他们的故事……

来上海实习,我所遇到的都是很好的人,无论是新朋友、同事、领导还是房东,他们都跟我讲过许多话,帮我打开更大的世界的门,也无形中在塑造我编程的世界观。以前我代码的格局很小,只容得下我独断的思想,现在再写代码的时候,偶尔会去想,会去期望,我的代码,我所开发的应用,可以改变这个我所处的环境、社会、乃至世界,为所有使用我开发的应用的人带来益处。


资源推荐

除前文截图中所列书籍之外,再为各位读者提供我最常关注和对我帮助最大的 iOS 开发学习资源,这些网站、资源的背景都与 iOS 开发相关,所以不做特别介绍,如有帮助不胜荣幸:

专业网站

Udacity Udemy raywenderlich AppCoda objc.io

个人博客、Youtube 频道等

iOS Dev Weekly iOS Goodies NSHipster NSHipster 中国 Use Your Loaf Natasha The Robot Ole Begemann OneV’s Den SwiftGG MrPeak 杂货铺 Lets Build That App Brian Advent Sean Allen

其他

Google