我如何自学 iOS 开发
即将回重庆去完成毕业答辩,所以我想回顾我从自学 iOS 开发起至现在的历程,也谈谈对我目前短暂的开发生涯来说最重要的三样东西:兴趣、成就感和世界观。
其实我最开始的兴趣并不是编程,而是对于各种软件、系统的使用。在大三之后,我还是没有用到我真的所需要的那样的软件,也没有打造出我所想象中科技无限便利生活的环境,所以别人编写的程序满足不了我的需求,于是我有了自己编写软件的想法,同时这也是我的兴趣所在,不知道该如何去确切的描述这种兴趣,但我能感觉到,这并不是单纯的编程的兴趣,也许是想要一种改变。
大学时期
那时候是大三寒假末期,我不再像前几年那样整天泡在游戏,我买了二手 Macbook 开始自学 iOS 开发,我从网上找来许多电子书和视频,都是特别零散的学习资源,现在唯一还有印象的就是慕课网。前期我大概把 UIButton,UILabel,UIView 等这些基础控件全部试用了一遍,再是由于 Storyboard 的便利性,大三下期开学时,我已经可以做一些像是温度转换器之类的无聊应用。
然后我开始寻求更广阔的知识,而国内的大部分开发教程都是好几年前的,所以我不得不去找一些国外的新的资源,我偏向于视频学习,但那时候我英文很差,英文的视频教程我没办法看,于是我从英文书开始看起。
得益于 MacBook 的「用力点按」功能,在英文书中有任何不明白的单词只要重重按下触控板就会显示词意,再配上朗读功能还可以知道单词发音,如果是长段的英文就直接放进 Google 翻译。随着时间的流逝,我看英文变得越来越轻松。
在每本 iOS 开发的入门书籍里,都会讲到 UITableView,我那时就在想,不要只按照教程去做,我想独立开发应用,那时候我对 UITableView 最熟悉,所以我就想开发一款待办清单类应用。但仍保持继续学习,只是每当学到一些知识的时候,我会思考如何将它放进我的应用里。
在不断的学习中,不断将照自己的想法写入代码,将电子世界里的代码编译输出,在现实世界呈现并产生改变,这件事跨越两个世界,是极具成就感的。当花一个下午甚至好几天的时间去实现一个功能,或是修复一个错误,成功后,这种成就感无可比拟,这种成就感也推动我不断深入学习。
这段时期里,我差不多每天早上七八点钟起床,然后去食堂买早饭,在路上边走边吃,一直走到图书馆,正好吃完,然后上楼打开电脑写代码。有需要上课的话,就把电脑放在桌子下面写代码,下课再去图书馆写。吃午饭和晚饭前,我都会回寝室,把电脑充电,吃完饭后,再回寝室玩一玩,又再去图书馆。晚上大概九点离开图书馆,把电脑放回寝室后,再去操场跑几圈。
但我也会做其他事,比如晚上我也经常会在寝室看电影,下午也说不定会和朋友打羽毛球,上瘾了也有去网吧玩游戏,天气好还可以在操场晒太阳,下雨可以在我们学校的「花果山」上荡秋千,饭后可以去江边吹吹风,再参加参加校园摄影比赛,还可以作为正方四辩总结陈词……
好像直到大四,我完成了两款应用的开发,其中一款名为:行动日 ,就是我想做的待办清单类应用,已经上架苹果应用商店,这是当时我为它写的介绍:我独立开发的第一个应用:行动日。另一款没能上架,所以我打算在毕业答辩时使用它。
那时我一些同学已经找到实习,我也广投简历,最初的面试经历惨不忍睹,然后才知道去看一般 iOS 面试时的问题,又在好像几个星期时间里,我不断的学习网上所流传的面试题所包涵的知识,最终在上海找到我的实习公司。
实习时期
在开始实习的第一个月里,我被分配到一个使用 OC 的项目,那时候我完全不会 OC,所以代码写得很慢,不过好在有同事可以请教。一个月之后,公司启动新项目,我去了一个使用 Swift 的项目,一直做到现在,已有半年左右,期间获益良多,除开发能力的提升外,也知道产品的开发流程,如何与同事协作等等,大学独自写了半年代码,实习期我和前后端十几位同事共同写了半年代码,到现在也算有一年开发经验。
实习期我感到,虽然每天都在写代码,但我并没有像大学时那样每天都会获取新知识,而只是在积累经验。但承蒙主管和老板们的关照,他们经常和我谈心,一方面担心我刚来上海的生活,一方面是对我的引导。在与他们的谈话中,他们都结合着自己的经历,告诉我去追求「广度」「深度」「责任感」与「自身价值」。
所以有时候,我会去公司天台、公司旁边的交大医学院的教室或者操场继续学习,那时我已经看完了几本的入门级的开发书籍,觉得都大同小异,然后我开始看进阶级的书籍,并关注了一些开发者、博客和 Youtube 频道等等。在看那些博文时,我几乎会对于每一篇都做笔记,但这里的笔记大部分都是对文中的重要段落和代码的摘录。
发现这样的知识转化率并不太高,于是我开始尝试费曼技巧,这是一种十分强大的学习方法,这种学习方法的核心含义是,只有我让别人也能掌握我所掌握的知识,那我才算真正掌握这种知识。所以我开始写博客,为了让别人明白我所写的内容,我被迫将我脑中含糊不清概念弄清楚,被迫去追究细节。
但还是觉得不够,有一些复杂理论或者逻辑,并不方便通过文字、图片、或者视频表现出来,于是我用工资买了 iPad mini 和 Apple Pencil,得益于 Mac OS 和 iOS 之间的无缝衔接,再面对密布的代码时,我不用再去复制摘录,而是提炼,将我脑后中的数据和模型直接画在屏幕上,任意组合排列,这才是我真正想要的学习形态,一个完全大脑映射而出的笔记,不用再从电脑上来回切换 iBook,Safari 和 Xcode,这也是对我来说帮助最大的学习方式。
即使凭着兴趣和成就感,学习也难免会枯燥,所以真正好的学习方式并不是持续学习,而是平衡学习。除了编程以外,我还有很多兴趣和想要做的事情,所以我仍会像大学时那样,每个周末去看看艺术展,去一个来上海后还没去过的地方,和网友一起看《黑镜》跨年,看看经济学的书,尝试拍摄 Vlog,听来来往往的室友讲他们的故事……
来上海实习,我所遇到的都是很好的人,无论是新朋友、同事、领导还是房东,他们都跟我讲过许多话,帮我打开更大的世界的门,也无形中在塑造我编程的世界观。以前我代码的格局很小,只容得下我独断的思想,现在再写代码的时候,偶尔会去想,会去期望,我的代码,我所开发的应用,可以改变这个我所处的环境、社会、乃至世界,为所有使用我开发的应用的人带来益处。
资源推荐
除前文截图中所列书籍之外,再为各位读者提供我最常关注和对我帮助最大的 iOS 开发学习资源,这些网站、资源的背景都与 iOS 开发相关,所以不做特别介绍,如有帮助不胜荣幸:
专业网站
个人博客、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
其他
2019 年 4 月 18 日