在 30 天内,从零开始学习 Swift
确切地说,我是在 30 天前开始学习 Swift 语言的。三天前,我的第一个对外公测版的应用被 Apple 审核通过了。这个对外公测的版本和最终产品比较起来,算不上什么,但是对我而言,这是一次极大的成就。
我没有计算机科学的学位,也没有做为开发人员所需要的专业经验,但是最近 5 年,我在软件开发组里的角色是产品经理,本着玩的心态,曾经做了一些 Ruby on Rails 方面的应用。我一直想和我忙碌的工作取得更加直接的联系,因此我决定开始写代码。
为什么选择 iOS 和 Swift?
庞大的移动;私人化的移动。我想做一款人们真正在用的软件,人们和他们的手机有着亲密感,我爱这种感觉。我们的手机太懂我们了——我们什么时候起床、睡觉,我们在哪里以及怎样去那里,我们的日程表,和朋友、家人的交谈等。这是我感兴趣的地方,我很早就是一名 Apple 用户了,当然从 iOS 开始比较好了。我短暂地体验了一把 Objective-C,它比较恐怖,而 Swift 一直都受人喜欢。
约束的好处。Apple 平台,可装入口袋的屏幕,在这种范围内去开发应用,就需要良好的约束。这些约束让我专注于要学习的东西(与之相对的是,web 开发中深不见底的兔子洞【注4】),并促使我围绕用户体验进行创新。
Swift 是一门快速发展的语言。我喜欢在刚开始时参与,观察该语言的发展及演化,并成为小社区的一分子——这就是我为什么喜欢在创业公司工作的原因。创业公司允许用一种相对不太成熟的语言来攻关某个问题,加入更小的群组,尽量让人和事衔接起来。对于向语言和社区贡献一己之力的可能性,我感到兴奋。
初学者资源
7 月 1 号,我开始了这段旅程,当时的想法是做一个真正简单的应用。始终把这一点摆在最高位置,有助于激励我、并应用我学到的东西。
为了找到 Swift 相关的最好资源、教程和课程,我投入了很长时间在互联网上搜罗。有很多面向初学者的优秀资料,但是大部分都假设你从来没有写过一行代码,起点非常低。比如,这是一个变量,看下变量跳转。另一些资料是技术文章和参考材料(包括 Apple 的文档),貌似有个前提:你有丰富经验、或从 Objective-C 转到了 Swift。
下面是一些不错的资源,对于我这种水平的初学者,我觉得非常有用:
Paul Hegarty 的斯坦福大学课程《Developing iOS8 Apps with Swift》,可免费在 iTunes U 【注1】里获取。我从这里开始,在一个多星期里,听了前五节课,又做了一份家庭作业。这份教程很快就变得有挑战了,因此在我入门之后,为了找到下面更实用的教程,我暂停了这个进度。不过,这是一份非常棒的课程,Paul Hegarty 教授熟悉他的资料,因此我打算回头继续学。如果你在练习上遇到了困难(你在 iTunes U 里找不到解决方案),那么这个网站解释了每个问题的设置和方法。
Apple 推出的 Swift 编程语言教程。如果你之前有过一些编程经验,这本 Swift 语言的书,和 Apple 的 iOS SDK 文档相比,将非常易于阅读。它清晰、扼要、可快速浏览,当你碰到问题时,你能明白在哪里能够找到某些概念。Big Nerd Ranch 针对其训练营打造了一份《Swift Pre-reading Assignment》,包含了类似概念,但为初学者准备了更多实用的例子,供你练习。
www.raywenderlich.com。这像是某个家伙的个人网站,但是不要被它的外表欺骗了。这个网站是我曾经遇到过的、最好的资源站。如果你从未创建过 iOS 应用,那就注册 newsletter,访问「史诗般的教程」吧——有那么一刻,感觉其极具史诗风格,但是,如果你愿意,用一天时间就能搞定。这个教程让我初次深入 iOS 开发的古怪世界,为我们揭开了很多容易让初学者望而生畏的秘密。我自己在开发自己的应用时,会参考这份教程,以唤醒我对 Xcode 里的某些特性或功能的记忆。在你学完这一份教程之后,该网站还有大量另外的免费教程,我精心挑选着学了一些概念,它们对于我做应用的想法有帮助。有如此多的优秀内容,以致于我早点儿想回去看看。
(大概的)时间线
第一周:沉浸其中。我沉浸在斯坦福课程里的演讲和练习里,通读了大量 Swift 语言书籍,完成了来自于 www.raywenderlich.com 的「史诗般教程」。之后,我就准备开始着手我的应用了。
第二、第三周:打磨。在我开始写代码的那一天,我碰巧启动了为期 12 天的、在缅因州的帆船上的生活。咖啡、平静的水面,我每天早上在这个地方待上好几个小时。这里不能上网,我可以高度集中在 Xcode 里,而不用在 40 个浏览器标签里来回穿梭。这迫使我停下来,认真思考了我正在尝试做的事情及其原因。在这些天里,我发现自己在思考代码时,会想出新方法,第二天早上就迫不及待地尝试。
第四周:我目前正在做的事情。有一根陡峭的学习曲线,但是和前几周相比,我在一天里有着更高的效率,感觉太神奇了。在最后一天,我清理了代码,弄通了奇怪的边界情形【注2】,令人惊奇、着实满意。做为产品经理,我对这些场景感到厌烦,把多个小任务分配给工程师。我自己就有能力去除这些工作,感觉不错。最后,我用 Sketch 创建了一个基本的应用图标,按照步骤上传到了 iTunes Connect,并做为公测应用提交给了 Apple。这个版本用了不到 24 小时。
在 7 月份(根据 RescueTime 统计),我在 Xcode 花了 25 小时,在 iOS 模拟器上花了 2 小时 52 分钟,在预览【注5】上花了 4 小时 23 分钟(阅读教程),在 Stack Overflow 上花了 51 分钟。我还在手机上阅读了很多资料。
Swift 社区
我还做了一些其它事情,让自己融入 Swift 社区:
订阅 We ❤ Swift 的 newsletter
订阅 Dave Verwer 的 iOS Dev weekly
关注 Medium 上的 TAG:「Swift」
观看 www.raywenderlich.com 上的播客
找到当地的 meetup(我参与了 Brooklyn Swift Developers* 和 iOSoho)
加入一个 Slack 小组:(1)helpMeCodeSwift 是我偶然进去的一个小团体。现在只有少部分活跃的人,但是他们超级友好,从来不会对各种小白问题感到厌烦。(2)swift-lang slack 是大团体,有问必答,不过貌似没有太多初学者,对于进入这种交谈的情况,我稍稍感到不安。可能我应该只是为初学者建立一种渠道。
说了这么多,都是我觉得有帮助的。如果你有其它的优秀资源想推荐,请在评论里,把你喜欢的东东、以及它为什么好的理由都写上。
我第一次参加的 meetup 是由 Dave Grandinetti 发表的「Learning Swift the Euler Way」演讲。Dave 开发了一个工具 EulerKit,我很激动地签出了,它包含了一些 helper 方法,能为解决 Project Euler 问题助一臂之力。我参加了前两次,此后就有些吃力。
最后,我的第一个应用——RoundTrip
我的应用,名字是 RoundTrip,面向那些乘坐大都会运输署(MTA)【注3】的公交、且喜欢优化他们地铁费用的纽约人。这是一款非常简单的工具应用。
RoundTrip — MTA AppRoundTrip — MTA 的应用,敬请期待!
算出向你的 MetroCard 充入多少钱,以致于不会剩下用不到的钱。如果你充值超过 5.5 美元,MTA 将给你 11% 的奖金,且充值的最小幅度只能是 5 美分。这两个条件交织在一起,让匆忙行走的人们做心算,情何以堪呀。
评估你每月的乘坐次数,和买一张 30 天的、无限制的 MetroCard 做对比,看能否省钱。你还能记录你的行程,查看你乘坐频率的统计。
如果你想成为公测人员、或想知道什么时候可以获取这个应用,请在这里注册、或关注 @helloroundtrip。
感谢了解我的旅程,感谢 @cm 和 @amrithap,帮我评审本文的初稿。