30天从0开始学习Swift
英文原文:From Zero to Swift in 30 Days
确切地讲,我是 30 天前开始学习 swift 的。3 天前,我开发的第一个应用程序通过了苹果公司的审核。相比其他事情,这一开发过程并不算什么,但是对我而言,却是一个巨大的成就。
我没有计算机的学位,也没有专业的开发经验,但是在过去的 5 年中,我一直在一个开发团队中担任产品经理。因为兴趣,曾经也用 Ruby 写过一些 Rails 应用。我一直想和我的工作有一个更直接的联系,所以我决定开始编程。
为什么选择 iOS 和 Swift
- 移动市场是巨大的;手机是个人的。我想开发一些对用户切实有用的软件,并且我非常喜欢人们与手机之间的亲密关系。我们的手机非常了解我们——它知 道我们什么时候醒来,什么时候睡觉,在什么位置,是怎么到达这个位置的,我们的日常安排、我们与朋友、家人的谈话内容,甚至更多。因为我一直使用苹果产 品,所以很自然地选择从 iOS 开始。前段时间,我尝试了下 Objective-C,发现它的地位正在受到威胁,因为 Swift 一直很受欢迎。
- 良好的约束。专注于苹果平台和在适用于口袋般大小的屏幕开发提供了良好的约束。这些约束让我很好的专注在需要学习的技术上(相对于永无休止的网页开发),还促使我把创造力聚焦在用户体验上。
- Swift 是一门快速进化的语言。我喜欢看着事物从底层开始成长和发展,并参与其中,这也是我为什么喜欢在初创公司里工作的原因。有些事情能够使一门不成熟的语言日 趋完善,我加入到一个小团队一起去尝试解决那些有待完善的问题。我很兴奋能有可能为这门语言和社区做出个人的贡献。
入门资源
7 月 1 号当我开始我的学习之旅时,我已经有了一个开发一款简单应用的想法。就我的初衷和当时学习情况而言,带着这一想法是非常有帮助的。
我花了很长时间在网上搜索有关 Swift 的最好的资源、教程和课程。对于初学者来说,网上有很多好的资源, 但大多数都是假定你从没有看过一行代码,并开始得非常缓慢,比如介绍什么是变量,变量如何跳转等。另外还有一些都是技术文章和参考资料(包括苹果的官方文 档),这些貌似只有那些有丰富经验的或者是从 Objective-C 转到 Swift 的同学能够看得懂。
最终,我还是找到了适合我这样初学者的资源,以下是我找到的一些最有用的:
- Paul Hegarty 的斯坦福课程:Developing iOS8 Apps with Swift (用 Swift 开发 iOS 8 应用)。这个在 iTunesU 上是免费的。我是从学习这个课程开始的,并仅在一周之内就完成了前 5 节课和第 2 个作业。课程很快就变得很有挑战性了,所以当我小试牛刀之后,我暂停了我的进度,去学习更多的实用教程。但是这真的是一个很棒的课程,Hegarty 教授真的有两把刷子,以至于我现在都打算重新回顾一遍。如果你被一个问题难住(不要去 iTunesU 上找解决方案),这(http://cs193p.m2m.at/)是一个很有帮助的网站,会解释每个问题并有解决方案。
- 苹果的官方文档:The Swift Programming Language (Swift 编程语言)。如果在这之前你有编程经验的话,相比与苹果的 iOS SDK 文档,这本关于 Swift 语言的书还是很容易读的。它清楚而简洁,可以快速浏览,当你遇到问题时,可以很快地找到对应的参考概念。这个网站(Big Nerd Ranch)为他们的 Swift 训练营成员提供了一些课前文件(pre-reading assignment),包含了一些类似概念的内容,还有面向初学者可实现的实例。
- www.raywenderlich.com。这 个看起来像是个花花公子的个人网站,但是不要被它迷惑了。这个网站是我访问过的最好的学习资源网站。如果你从没有创建过 iOS 应用,就从注册这个网站开始吧,你可以获得简报和经典的教程——这些教程会让你感到如史诗般。只要你愿意,你绝对可以在一天之内完成它。这些教程使我第一 次投入到神秘的 iOS 开发中,它揭开了许多很容易让初学者气馁的谜团,当我使用 Xcode 编程时,它会给我很多特性和功能上的启发。当你完成第一个教程之后,网站还会提供大量额外的免费教程。我可以从中挑选一些去学习,以满足我开发应用的需 要。这里有如此多的很棒的资源,让我迫不及待的要去学习。
我大致的时间安排:
- 第 1 周:入门。我快速地投入到斯坦福课程的讲义和任务中,我通读了大量关于 Swift 语言的书,并且完成了 raywenderlich.com 网站上的经典教程。在这之后,我感觉我已经准备好开始开发我的应用了。
- 第2-3 周:磨砺。就从我开始开发我的应用的那天起,我也开始了在缅因州的一艘帆船上的 12 天之旅。与咖啡和平静的水面相伴,我每天早上都会花几个小时在我的应用上。由于没有网络,我唯有专注在代码上,而不是在 40 个网页之间来回切换,这使我停下来去思考我在尝试做的事情及其原因。这些天我发现我一直在考虑我的代码,并迸发出新的思路,并渴望在第二天早上尝试它们。
- 第四周:我真的做到了。经过一段缓慢的学习过程,我进入了高产阶段,当我一天的成果超过之前几周的总量时我倍感惊讶。最后一天,我清理了我的代 码,并跑通了一些诡异的边界测试用例,这让我出奇的满意。作为一名产品经理,每当我把任务分配给很多工程师时,我会为此感动担忧。当我有能力自己去完成 时,我感觉非常棒。最后我在 Sketch 上创建了一个简单的应用图标,根据引导把应用上传到 iTunes Connect 上,并提交给苹果审核,不到 24 小时,我就通过了审核。
7 月(通过 RescueTime 记录),我在 Xcode 上花了 25 小时,在 iOS 模拟器上花了 2 小时 52 分,在 Preview 上花了 4 小时 23 份(阅读教程),还有 51 分钟花在 Stack Overflow 上。另外我还在手机上读了许多资料。
Swift 社区
为了融入 Swift 社区,我还做的其他的一些事情:
- 订阅 We ❤ Swift 的简报
- 订阅 Dave Verwer 的 iOS 开发周报
- 关注 Medium 网站的 Swift 标签
- 收听 raywenderlich.com 的播客
- 通过 meetup 寻找志同道合的人聚会(我加入了布鲁克林 Swift 开发组和 iOSoho 组)我参加的第一个线下聚会是由 Dave Grandinetti 组织的,叫做“Learning Swift the Euler Way”的谈话式聚会。Dave 开发了一个工具,我很高兴可以去看看这个“EulerKit”,它提供了一些辅助方法可以协助你解决 Project Euler problems。我已经完成了前两个,但是之后会变得越来越难。
- 加入学习小组:(1)helpMeCodeSwitf 是我无意中加入的一个小组织, 现在只有两三个人活跃其中。但是他们超级友好,从不会因为问他们一些菜鸟问题而恼火。(2)swift-lang slack 是一个大一点的组织,它可以给我一些即时的反馈,但似乎没有太多的初学者,这让我不敢轻易加入他们的交谈。或许我应该要求他们为初学者创建一个频道。
以上是我发现的有助于学习 Swift 的资源。如果你有其他好的资源,请添加评论并注明你喜欢它什么以及好在哪里(译者/程林)。