我是如何申请到Apple WWDC Scholarship

我现在是苏州大学计科院物联网工程大二的学生。在这篇文章中我将分享我学习 iOS 的历程,独立开发app并成功申请到 Apple WWDC Scholarship 的故事,以及一些个人感悟。

学习历程

里程碑一:有自己的想法

我是从大学才开始接触编程的,起点并没有比别人早。大一一个学期学完了C语言,发现单单学习C语言离做出自己的项目还差得远呢。当时就照着课程学习,没有自己的想法,但发现大学的学习还是那么的空,就开始有了自己的想法,有了点“叛逆”。我认为这是我进入大学的第一个里程碑。

我觉得刚开始接触编程兴趣很重要,像之前学校教C语言的方式很容易让我们失去兴趣,另外要有直观的反馈而不是冷冰冰的终端,输出无聊的数字,除此之外还要有成就感,要有那种创造的感觉。

于是,出于兴趣,我开始尝试学习 iOS 开发。最开始我是通过 Stanford University 的公开课 CS193p 和一些参考书籍学习 iOS 开发,但是这个过程很痛苦。

第一点就是从面向过程到面向对象,当时没有学过面向对象,而且了解oc的人都知道oc的语法很奇葩,当时对我来说就是灾难。由于Xcode是英文的,当时很惧怕,完全不知道怎么用Xcode调试,遇到错误信息完全看不懂,也不知道怎么利用这些信息在网上查询。一遇到闪退这种情况束手无策,当时很傻,重看一遍课程重做一遍。这种做法其实是不对的,一定要找到你错误的根源。

后来,学校里的一位老师找人做 iOS 项目,我自告奋勇报名参加。老师给了我一个 Android 的项目 Demo,让我做出 iOS 版的 demo,作为一个测试。在这个过程中,我逐渐学会了运用 Google、Stackoverflow 解决问题,学会了调试、改 bug,通过 git 来版本控制,代码规范等。这段时间内,我学到了很多东西。自己从0到1做项目所遇到的问题数量会远远高于照着教程做时遇到的问题,解决这些问题能使能力获得快速增长。Leaning by doing is the most effective learning method.

里程碑二:不再惧怕英文

这个过程开始慢慢的不在惧怕英文,这对我来说是第二个里程碑。我在学习iOS开发时,买过几本国人出的书,很厚,但是质量真的不高,看了这些书发现几乎没有效果,当我尝试着去看国外英文的文章,其文章质量真的高出不止一个档次。

之后我常在 Ray Wenderlich (http://www.raywenderlich.com)、objc.io (http://www.objc.io/)上看文章,读这两个网站出版的书籍。Ray Wenderlich上我前前后后看了11本书:

raybooks

最近在看objc的这两本书

objcbooks

时间很快到了暑假,我觉得人都是有惰性的,我知道如果我待在家里一定是浪费时间,但是我就决定在暑假实习。在实习过程中独立完成了一个给客户演示的demo,出色的完成了任务,并获得这个公司的一份offer。

里程碑三:接触在线教育

当时觉得对学校里学的东西不感兴趣,就在在线教育平台上学习,Coursera和Udacity,Coursera课程种类多课程来自世界各地的名校,Udacity课程都是计算机课程,由硅谷工程师制作,我在Coursera上拿到了两个证书,在Udacity上付费学习了Full Stack Nanodegree。

里程碑四:参加社区活动

一次偶然的机会,我参加了Udacity 在上海举办的用户见面会,认识了Frank、Jade、Grant,通过他们了解到了GDG,了解到了社区的力量,之后我每周都参加GDG苏州的活动学到了很多,结交了很多朋友。社区的力量就在于你获得对一件事物的知识是一起参加活动的人对该事物的不同的理解而不是你一个人的。

申请 Apple WWDC Scholarship

寒假时我开始准备参加 Apple WWDC Scholarship 的 app。由于我觉得做游戏更能发挥想象力,于是我决定做我从未尝试过的游戏。我选用了 Apple 的 SpriteKit 框架,但却在游戏的内容构思环节卡壳了……这使我深深体会到了灵感的重要性,灵感就是一个项目的源头,没有源头后面的都是空壳。

我的灵感来源很偶然:当时盯着电脑前面墙发呆。
inspriation

突然灵感来了!将墙砖中间加小球,白色分界线看成棒,可以绕着墙砖的顶点旋转,并且给顶点加一些限制。我马上找来牙签在桌子上摆起来,经过实践,这个想法确实可行!随即我就开始做 demo了。

我将分3个方面介绍我开发的过程。

  1. 游戏逻辑
    这个一部分是最花时间的。其中遇到的一个困难是,当我想增加游戏内容时发现,如果扩展我原来的代码便会出现很多冗余代码。我使用 GameplayKit 的 Entity-Component 来重构代码,这个过程就是将具体化成抽象,花了一周左右,之后的游戏性拓展方便了许多。开发过程中遇到了一个又一个的问题,一个又一个的 bug,但都能通过不断调试、查阅文档、观看 WWDC 视频解决。

  2. 后台服务器
    我的 app 有分享自己做的 level 的功能,这就需要有服务器。用到了之前在Udacity上学习Full Stack Nanodegree的知识。同时,要实现跳转到我的 app 的功能,就需要实现 Universal Links,需要配置域名和Https。在实践中,我实现了好多自己的“第一次”。

  1. 设计
    设计是令我最头疼的地方。我没有学过设计,对配色什么的也一窍不通,只会用 Sketch 进行一些基本操作。在我设计游戏的过程中,我认为最难的地方在于如何在一个小的点上表示出3种信息:可旋转的棒的数目、可旋转次数、选择方向,并且要保持美观、直观、简洁。这整整花了我两天的时间。但是,在面对我们不熟悉的方面时,只要去尝试,总会有结果。

在这个开发过程中感受最深的就是,我在不停地给自己创造问题,并靠自己不断地去分析问题、解决问题。 这里没有用遇到问题,而是用创造问题是因为遇到问题是被动的,创造问题是主动的,只有给自己不断地去创造问题,制造麻烦,提高要求,才能不断地完善。

5月10日早上8点左右,我收到来自 Apple WWDC 的邮件。当时的心情并没有原来想象的那么激动。那3个月我花了几乎所有的业余时间用于设计开发,感觉这一切都是水到渠成的。

在开发过程中,我当了次全栈工程设计师(自己创了个名词 ^__^,当然也远远没有达到这个水平),有一种满满的成就感。将自己的灵感用代码来实现的感觉,实在是令人欲罢不能!

对你而言最重要的事物一定比你想要得到的事物更早地出现在路边。

现在我有了一个我自己在上线的app,我今后会去不断更新迭代它,此外我即将前往美国参加WWDC,我希望这两件事能成为我新的里程碑,继续改变我。

APP

我做的app名叫RoDot,这是下载链接 https://appsto.re/us/LFRJbb.i,有兴趣的下载一下,支持一下。

RoDot

RoDotQR