Swift--在 30 天内,从零开始学习 Swift
2015-09-21 10:22 doudo 阅读(368) 评论(0) 编辑 收藏 举报本文是翻译,版权归原作者所有
- 原文地址(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 方面的应用。我一直想和我忙碌的工作取得更加直接的联系,因此我决定开始写代码。
为什么选择 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】的公交、且喜欢优化他们地铁费用的纽约人。这是一款非常简单的工具应用。
- 算出向你的 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