本文是翻译,版权归原作者所有
原文地址(original source): https://blog.growth.supply/from-zero-to-swift-in-30-days-8ad97b630e00
作者(author): https://twitter.com/katiesmillie
确切地说,我是在 30 天前开始学习 Swift 语言的。三天前,我的第一个对外公测版的应用被 Apple 审核通过了。这个对外公测的版本和最终产品比较起来,算不上什么,但是对我而言,这是一次极大的成就。
我没有计算机科学的学位,也没有做为开发人员所需要的专业经验,但是最近 5 年,我在软件开发组里的角色是产品经理,本着玩的心态,曾经做了一些 Ruby on Rails 方面的应用。我一直想和我忙碌的工作取得更加直接的联系,因此我决定开始写代码。
庞大的移动;私人化的移动。我想做一款人们真正在用的软件,人们和他们的手机有着亲密感,我爱这种感觉。我们的手机太懂我们了——我们什么时候起床、睡觉,我们在哪里以及怎样去那里,我们的日程表,和朋友、家人的交谈等。这是我感兴趣的地方,我很早就是一名 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 社区:
订阅 WeHeartSwift 的 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,面向那些乘坐大都会运输署(MTA)【注3】的公交、 且喜欢优化他们地铁费用的纽约人 。这是一款非常简单的工具应用。
RoundTrip—MTA 的应用,敬请期待!
算出向你的 MetroCard 充入多少钱,以致于不会剩下用不到的钱。如果你充值超过 5.5 美元,MTA 将给你 11% 的奖金,且充值的最小幅度只能是 5 美分。这两个条件交织在一起,让匆忙行走的人们做心算,情何以堪呀。
评估你每月的乘坐次数,和买一张 30 天的、无限制的 MetroCard 做对比,看能否省钱。你还能记录你的行程,查看你乘坐频率的统计。
如果你想成为公测人员、或想知道什么时候可以获取这个应用, 请在这里注册 、或关注 @helloroundtrip 。
感谢了解我的旅程,感谢 @cm 和 @amrithap ,帮我评审本文的初稿。
我正在寻找一份工作、或以实习生身份做 iOS 开发人员!如果你有机会,请联系 katie@katiesmillie.com 。
我的 twitter 是 @katiesmillie ,网站是 katiesmillie.com
注1:iTunes U是一种网络公开课,诸多名校如:哈佛、MIT、牛津等都把自己的课堂的音频、视频、文档,放在网上,可以通过itunes这款软件来下载。 iTunes U都是免费的。 http://baike.baidu.com/view/5418286.htm
注2:An edge case is a problem or situation that occurs only at an extreme (maximum or minimum) operating parameter. https://en.wikipedia.org/wiki/Edge_case
注3:大都会运输署(Metropolitan Transportation Authority,一般简称 MTA),亦称为大都会捷运局,是管理纽约市公共交通的管理机构,成立于1967年,管辖著范围达4000平方英里、总人口1800万的大纽约地区(包含纽约市五大区、纽约州12个县、新泽西州及康乃狄克州部分地区)内的交通运输,该机构拥有并管理纽约地铁、公共汽车及渡轮。其辖下单位包括纽约市公共运输局、大都会北方铁路、长岛铁路、长岛公车公司、桥梁暨隧道管理局、以及大都会运输署公车公司。 http://zh.wikipedia.org/wiki/%E7%B4%90%E7%B4%84%E5%A4%A7%E9%83%BD%E6%9C%83%E9%81%8B%E8%BC%B8%E7%BD%B2
注4:”down the rabbit hole”, 是一种隐喻,表示进入了一个未知、奇幻或精神上错乱的地方,在电影《爱丽丝梦游仙境》里有被用到: https://en.wikipedia.org/wiki/Rabbit_hole 。《爱丽丝梦游仙境》是路易斯·卡罗(Lewis Carroll)出版的儿童文学作品。故事的主角爱丽丝,从兔子洞掉进一个充满奇珍异兽的梦幻世界,遇到各种懂得说话的动物。这童话1865年出版,一直深受不同年纪的读者喜爱。 https://zh.wikipedia.org/wiki/%E7%88%B1%E4%B8%BD%E4%B8%9D%E6%A2%A6%E6%B8%B8%E4%BB%99%E5%A2%83
注5:预览程式(Preview)是Mac OS X操作系统中的影像检视器及PDF阅读器。跟Mac OS X本身一样,是从NeXT的OpenStep操作系统里衍生出来的。 https://zh.wikipedia.org/wiki/%E9%A0%90%E8%A6%BD%E7%A8%8B%E5%BC%8F