The skills, resources, and networking that will get you to your goal
实现目标的技能、资源和人际网络
In this article I want to walk you through what I think it takes to become an iOS developer in 2021. I’m aiming this squarely at two groups of people: absolute beginners to Swift – folks who have never built anything for iOS before – and also so-called false beginners, who are folks who might have tried to learn Swift before but never really reached their goal of getting a full-time job.
在本文中,我想带您了解我认为在 2021 年成为 iOS 开发者所需的条件。我将目标明确地针对两个群体:绝对初学者——那些从未为 iOS 构建过任何东西的人——以及所谓的假初学者,他们是曾经尝试学习 Swift 但从未真正实现全职工作的目标的人。
Regardless of what level you are right now, the goal here is the same: getting you in the right position to apply for a junior iOS developer role at a company.
无论你目前处于什么水平,目标都是一致的:让你处于合适的位置,以申请公司的一名初级 iOS 开发者职位。
We’re going to look at the skills you should be learning, the courses you can take, how to get connected to the community, common mistakes folks make, and more, and best of all everything I’ll talk about will be completely free so you won’t need a penny to follow along.
我们将关注你应该学习的技能、可以参加的课程、如何与社区建立联系、常见的错误,以及更多内容,最重要的是我所讨论的一切都是完全免费的,所以你不需要花一分钱来跟随。
Seriously, too many people think spending a ton of money is the fast track to reaching their dream job, when really the most important things are determination and willpower. And here’s a hint for you: if you’re already thinking you want to skip ahead in this article, maybe you should consider working on your willpower!
认真地说,太多人认为花很多钱是实现梦想工作的捷径,其实最重要的是决心和意志力。给你一个提示:如果你已经在考虑想跳过这篇文章,也许你应该考虑提高自己的意志力!
There are 7 sections to this article:
这篇文章分为 7 个部分:
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until September 29th.
赞助 参加一个免费的速成课程,适合想要获得专家级技术和实践技能的中级/高级 iOS 开发者——这是成为全面高级开发者的快速通道!赶快报名,因为该课程仅在 9 月 29 日前开放。
What is the absolute minimum set of skills you need to get a job in iOS development? I think there are five things in total:
在 iOS 开发中,获得一份工作的绝对最低技能组合是什么?我认为总共有五个方面:
That’s it. And that list is super short intentionally, for a number of reasons:
就是这样。这个列表故意很短,原因有很多:
Let me break down the five things into smaller chunks.
让我把这五件事拆分成更小的部分。
First on the list of Swift. This is the core programming language from Apple – it has no concept of showing information on an iPhone’s screen, or downloading data from the internet, it’s just a language like JavaScript or Python. You use it to create variables, write functions, and so on; it’s just pure code.
首选 Swift。这是苹果公司的核心编程语言——它没有显示信息在 iPhone 屏幕上或从互联网下载数据的概念,它只是像 JavaScript 或 Python 一样的语言。你用它来创建变量、编写函数等等;它只是纯粹的代码。
Swift is only a few years old, which means it uses almost every cutting-edge language feature out there. On the one hand this means you get to avoid all the crusty old behaviors that are common in older languages like C++ and Java, but it does also mean it has quite a few more advanced features that might blow your mind at first. And that’s okay: lots of parts of Swift are relatively straightforward, and some parts will take you longer to really figure out, so just take your time and keep at it – you’ll get there!
Swift 只有几年的历史,这意味着它使用几乎所有最前沿的语言特性。一方面,这意味着你可以避免像 C++和 Java 等旧语言中常见的那些陈旧的行为,但这也意味着它有很多更高级的特性,刚开始可能会让你感到震惊。这没关系:Swift 的许多部分相对简单,而某些部分会让你花更长时间来真正理解,所以请慢慢来,继续努力——你会搞定的!
The second core skill I listed was SwiftUI, which is a framework from Apple that lets us write apps for iOS, macOS, tvOS, and even watchOS using Swift. So, while Swift is the programming language, SwiftUI provides the tools that makes apps – how to show pictures, text, buttons, text boxes, tables of data, and more. Just to be clear, SwiftUI isn’t somehow a replacement for Swift – it’s a framework built on top of Swift that lets us make apps, so you need both Swift and SwiftUI to succeed.
我列出的第二项核心技能是 SwiftUI,它是苹果公司提供的一个框架,让我们可以使用 Swift 为 iOS、macOS、tvOS,甚至 watchOS 编写应用程序。因此,虽然 Swift 是编程语言,但 SwiftUI 提供了制作应用程序的工具——如何显示图片、文本、按钮、文本框、数据表等。需要明确的是,SwiftUI 并不是 Swift 的替代品——它是建立在 Swift 之上的框架,让我们能够制作应用程序,因此成功需要同时掌握 Swift 和 SwiftUI。
If you thought Swift was new, you ain’t seen nothing yet – as I record this SwiftUI isn’t even two years old! But despite being so new, the iOS community has embraced it wholeheartedly because it’s just so awesome to work with.
如果你认为 Swift 是新的,那你还没见过真正的新事物——当我录制这个时,SwiftUI 甚至还不到两岁!但尽管如此年轻,iOS 社区已经全心全意地接受了它,因为它实在是太棒了。
Now, Apple has an older framework for building iOS apps called UIKit, and if you ask a bunch of folks whether you should learn SwiftUI first or UIKit first you’ll get a range of answers. In fact, there’s every chance that if you look in the comments for the YouTube video for this article you’ll find a bunch of folks telling me I don’t know what I’m talking about and that UIKit should be a priority.
现在,苹果有一个用于构建 iOS 应用的旧框架,称为 UIKit。如果你问一群人应该先学习 SwiftUI 还是 UIKit,你会得到各种各样的答案。实际上,如果你查看这篇文章对应的 YouTube 视频的评论,可能会发现一堆人告诉我我在说胡话,并且 UIKit 应该是优先考虑的。
So, in case you were curious here’s why I think you should focus on SwiftUI as a core skill:
所以,如果你感到好奇,我认为你应该将 SwiftUI 作为核心技能的原因如下:
Seriously, the world’s biggest companies are choosing SwiftUI, including Apple itself, and when Apple recently launched widgets in iOS 14 they made it a requirement that you must use SwiftUI – UIKit just isn’t possible there.
认真地说,全球最大的一些公司,包括苹果自己,都在选择 SwiftUI。当苹果最近在 iOS 14 中推出小部件时,他们将使用 SwiftUI 作为一项要求——在这里,UIKit 是不可能的。
The third and fourth skills I mentioned were networking and working with data. Compared to Swift and SwiftUI these are a piece of cake, or at least they are at the level you need to be in order to get a junior iOS developer job.
我提到的第三和第四项技能是网络和数据处理。与 Swift 和 SwiftUI 相比,这些要简单得多,或者说,它们的难度正好是你获得初级 iOS 开发者职位所需的水平。
Networking is the practice of fetching data from the internet, or sending data from the local device to a server somewhere. There are stacks and stacks of ways of doing this, but honestly the absolute least you need to know is how to fetch some JSON from a server.
网络是从互联网中获取数据或将数据从本地设备发送到某个服务器的实践。实现这个的方式有很多,但老实说,你需要知道的最基本的就是如何从服务器获取一些 JSON。
And that’s where the other core skill comes in: working with data. Again there’s a huge range of ways you can load and save data, but the absolute least you need to be able to do is convert that data you got from a server using your network code into some information your app can show.
这就是另一个核心技能的用武之地:处理数据。同样,你可以加载和保存数据的方法有很多种,但你需要能够做到的最基本的是将从服务器通过网络代码获取的数据转换为你的应用可以展示的一些信息。
So, really the third and fourth core skills go hand in hand: fetch some data from a server, then convert it into information you can show in your app. Some developers joke that this kind of code is half the job of iOS developers, and it’s certainly true that we use these skills a lot.
所以,实际上第三和第四项核心技能是密切相关的:从服务器获取一些数据,然后将其转换为可以在应用中展示的信息。一些开发者开玩笑说,这类代码占据了 iOS 开发者工作的一半,确实我们经常使用这些技能。
The last skill isn’t coding at all: it’s version control, using something like Git. Again you really don’t need much here, but it’s important you’re able to publish your code somewhere like GitHub so recruiters are able to see your work publicly.
最后一项技能根本不是编码:而是版本控制,使用像 Git 这样的工具。同样,您在这方面并不需要太多,但能够将您的代码发布到像 GitHub 这样的地方非常重要,以便招聘人员能够公开看到您的作品。
I don’t think anyone in the world truly understands all of how Git works, but that’s okay – you just need to know enough of the basics to store your data safely, and to be able to work with others.
我认为世界上没有人真正理解 Git 的所有工作原理,但没关系——你只需要了解足够的基础知识,以安全存储数据,并能够与他人合作。
So, putting those five together there are two massive ones – Swift and SwiftUI – plus three small but important ones. Honestly, if you can just focus on those five things without getting distracted you’ll take massive strides towards your first iOS developer job.
所以,将这五个结合起来,有两个重要的——Swift 和 SwiftUI——以及三个小但重要的。老实说,如果你能专注于这五件事而不分心,你将大幅度向你的第一个 iOS 开发者职位迈进。
And that’s it: those are the five core skills I think you need to be an iOS developer. There are thousands of people out there who only have those skills, and are able to build and ship fantastic apps on the App Store.
这就是全部:我认为成为一名 iOS 开发者需要的五项核心技能。外面有成千上万的人只具备这些技能,能够在 App Store 上开发和发布出色的应用程序。
Once you’ve really gotten to grips with the five core skills, you are absolutely 100% in a position to ship your own apps and work as an indie developer, and also in a position to apply for junior iOS development positions and work for a company should you want to. There are no other special qualifications you need – get those core skills down, and you’re in a good place.
一旦你真正掌握了五项核心技能,你就绝对有能力发布自己的应用程序,成为独立开发者,同时如果你愿意,也可以申请初级 iOS 开发职位并为公司工作。你不需要其他特别的资格——掌握这些核心技能,你就处于一个良好的状态。
But if you’ve worked your way through those skills and want to go further, then there are five extensions skills I would encourage you to learn. These are skills that will take you from your good place up to being in a fantastic place – you become even more employable, and the range of apps you’re able to build will grow even further.
但是如果你已经掌握了那些技能,并想要更进一步,那么我鼓励你学习五个扩展技能。这些技能将使你从一个良好的状态提升到一个精彩的状态——你会变得更加可雇佣,你能够构建的应用程序范围也会进一步扩大。
The skills are: 技能如下:
As before, I want to explain each of those in more detail so you can understand why I think they are important – and why I consider them extension skills rather than core skills.
和以前一样,我想更详细地解释这些内容,这样你就可以理解我为什么认为它们很重要——以及我为什么将它们视为 扩展 技能,而不是 核心 技能。
First, UIKit. This is Apple’s older user interface framework, and has been used for building apps since 2008 – it’s 13 years old as I write this, which in software terms is old. But that age doesn’t mean UIKit is bad, and in fact as you become comfortable with the way it works you’ll be surprised by how elegant it can be.
首先,UIKit。这是苹果公司较旧的用户界面框架,自 2008 年以来就用于构建应用程序——在我写这篇文章时,它已经 13 岁了,在软件术语中是旧的。但这个年龄并不意味着 UIKit 不好,事实上,随着你对它的工作方式变得熟悉,你会惊讶于它可以多么优雅。
There are lots of things that make UIKit worth learning, including:
有很多理由让 UIKit 值得学习,包括:
You might think all that makes UIKit sound great, so how come I made it an extension skill rather than a core skill? Well, because UIKit has problems too:
你可能会觉得这些使 UIKit 听起来很棒,那么为什么我把它做成了扩展技能而不是核心技能呢?嗯,因为 UIKit 也存在问题:
@objc
attribute to make it available to UIKit’s Objective-C underbelly, needing to use protocols and delegates to show simple data.@objc
属性标记代码以使其可用于 UIKit 的 Objective-C 底层,需要使用协议和委托来显示简单数据。And that’s why I consider UIKit to be an extension skill: it takes significantly more time and effort to learn compared to SwiftUI, which in turn means it takes a great deal more determination – you’ve got to really want to learn it, otherwise you’ll get confused, bored, angry, or potentially all three. Sure, SwiftUI doesn’t have all the features of UIKit, but at least you can make quick progress and feel a sense of momentum and success before you move on to UIKit.
因此,我认为 UIKit 是一项扩展技能:与 SwiftUI 相比,学习它需要投入更多的时间和精力,这意味着你需要有很强的决心——你必须真的想要学习它,否则你会感到困惑、无聊、愤怒,或者可能三者都有。当然,SwiftUI 并没有 UIKit 的所有功能,但至少你可以快速取得进展,并在继续学习 UIKit 之前感受到一种动力和成功感。
The second extension skill I mentioned is Core Data, which is Apple’s framework for working with application data. In the core skills section I listed both networking and working with data, and it’s true: with those skills in place you can fetch whatever you want from a server and show it in your app. What Core Data does is go a step further: it allows you to manipulate that data once you have it, for example searching for particular values, sorting the results, and more, all very efficiently. It can also link up very easily to iCloud, meaning that your user’s data gets synchronized across all their devices.
我提到的第二个扩展技能是核心数据,这是苹果用于处理应用程序数据的框架。在核心技能部分,我列出了网络和数据处理,确实如此:掌握这些技能后,你可以从服务器获取任何你想要的内容并在应用中显示。核心数据更进一步:一旦你拥有数据,它可以让你操纵这些数据,例如搜索特定值、对结果排序等,所有这些都非常高效。它还可以与 iCloud 非常容易地连接,这意味着用户的数据会在他们的所有设备之间同步。
Core Data has a whole bunch of downsides, with the biggest one being that often it just isn’t very pleasant to work with. Core Data is about as old as UIKit, and although it worked great with Objective-C it does not feel as comfortable in Swift. It does have good integration with SwiftUI, which makes it feel a bit less strange, but it’s still a surprisingly complex topic.
Core Data 有很多缺点,最大的一个是它在使用时往往不太愉快。Core Data 和 UIKit 差不多同龄,虽然它在 Objective-C 中运作良好,但在 Swift 中它 并不 感觉那么舒适。它 确实 与 SwiftUI 有良好的集成,使其感觉不那么奇怪,但这仍然是一个令人惊讶的复杂话题。
So, why have I listed it as an extension skill? Because like UIKit, Core Data is also extremely popular – hundreds of thousands of apps have been built using it, and it’s used in many companies large and small. Also like UIKit, Core Data is really powerful, and although you could recreate the most important parts of it in your own code, why would you want to?
所以,为什么我把它列为扩展技能?因为像 UIKit 一样,Core Data 也非常受欢迎——数以万计的应用程序是使用它构建的,并且它被许多大小公司使用。同样像 UIKit 一样,Core Data 真的很强大,尽管你可以在自己的代码中重建它最重要的部分,但你为什么要这么做呢?
The third skill on my extension list is testing: writing special code that tests your main app code works the way you expect. Tests allow us to be sure our code works correctly, and more importantly allows us to continue to be sure it works correctly even after we’ve made significant changes to it – if you change 500 lines of code to implement a new feature and all your tests pass, you’re good to go.
我扩展列表中的第三个技能是测试:编写特殊代码来测试您的主应用程序代码是否按预期工作。测试可以确保我们的代码正确运行,更重要的是,即使在我们进行了重大更改之后,它也能让我们继续确保代码运行正确——如果您更改了 500 行代码以实现一个新功能并且所有测试都通过,那么您就可以继续了。
So, testing is important, and will help you write better quality software. Why, then, is it an extension skill rather than a core skill? There are three reasons:
测试很重要,它将帮助您编写更高质量的软件。那么,为什么它是一项扩展技能而不是核心技能呢?有三个原因:
So, testing is important, testing matters, and I would love for you to learn how to write great tests. But do it after you’ve grasped the basics of building apps – get some success under your belt, feel the sheer excitement of having your app live on the App Store, then get to grips with testing.
所以,测试很重要,测试很关键,我希望你学会如何编写优秀的测试。但在你掌握构建应用程序的基础知识 之后,先取得一些成功,感受一下你的应用程序在 App Store 上上线的激动心情,然后再深入了解测试。
The fourth extension skill I want to talk about is software architecture, which really is about the way we craft our code. When you’re just learning you’re going to write some terrible code – code so bad it probably breaks the Geneva convention. And that’s okay, because that’s how you learn: you don’t start good – you get good by being bad for a long time, just as LeBron James wasn’t born a champion basketball player.
我想谈谈的第四个扩展技能是软件架构,这实际上是关于我们编写代码的方式。当你刚开始学习时,你会写一些很糟糕的代码——糟糕到可能违反日内瓦公约的代码。这没关系,因为这就是你的学习方式:你不是一开始就好——你通过长时间的坏来变好,就像勒布朗·詹姆斯并不是天生的冠军篮球运动员。
The point is that you persevere with your bad code, until you learn to do better. And that’s where software architecture comes in: looking at proven techniques for structuring your code to make it easier to read, easier to use, easier to modify, and easier to take care of in the longer term. Sometimes these techniques rely on the way Swift works – language features you can use to write better code. But there are many more techniques that work in any programming language, and we usually call these design patterns.
关键在于你坚持使用坏代码,直到你学会写得更好。这就是软件架构的用武之地:借助经过验证的技术来构造你的代码,使其更容易阅读、更易使用、更易修改,并在长期内更易维护。有时这些技术依赖于 Swift 的工作方式——你可以用来编写更好代码的语言特性。但还有许多其他技术适用于任何编程语言,我们通常称这些为 设计模式。
One major point you should start to learn about as part of this skill is how you break up your code. For example, if you’re building one screen in your app you might have a login button, an image gallery, and a list of friends all on that screen. But ideally you make each of those parts separate components – a login button component, an image gallery component, and a friends list component – so you can re-use any of those components in other parts of your app.
你应该开始学习的一个重要点是如何拆分你的代码。例如,如果你在应用程序中构建一个屏幕,你可能会在该屏幕上有一个登录按钮、一个图片画廊和一个朋友列表。但理想情况下,你应该将每个部分做成单独的组件——一个登录按钮组件、一个图片画廊组件和一个朋友列表组件——这样你就可以在应用程序的其他部分重用任何这些组件。
Software architecture is much more subjective than the other skills I’ve mentioned so far. For the others – for example, SwiftUI – you can think to yourself, “well, I know how to do X, Y, and Z, so I feel confident I’m a good SwiftUI developer.” Software architecture is a very broad topic and honestly a lot of the time there is no obvious “right” way to solve a problem, so I think the best benchmark for it is this: if you look back on your code from six months ago, or a year ago, or three years ago, etc, do you think “wow, that code is bad!”
软件架构比我提到的其他技能更主观。对于其他技能——例如,SwiftUI——你可能会想,“好吧,我知道如何做 X、Y 和 Z,所以我对自己是个优秀的 SwiftUI 开发者充满信心。”软件架构是一个非常广泛的主题,老实说,很多时候没有明显的“正确”解决方案,所以我认为最好的基准是:如果你回顾自己六个月前、一年前或三年前的代码,等等,你是否会想:“哇,那段代码真糟糕!”
Again, writing bad code is okay as long as it’s putting you on the path to writing better code. I certainly look back on code I wrote five years ago and grimace in places, because I know more now than I did back then – and that’s a good thing.
再写坏代码是可以的,只要它能让你走上写更好代码的道路。我当然会回顾自己五年前写的代码,在某些地方不禁皱眉,因为我现在知道的比当时更多——这是一件好事。
The final extension skill I want to talk about is multithreading, which in simple terms is the practice of making your code do more than one thing at a time. Multithreading can be a real headache, because it’s hard for our brains to understand – when your code does one thing at a time we can think it through linearly, but when two or three things happen at the same time, potentially overlapping each other, it can really bend your brain.
我想要谈论的最后一个扩展技能是多线程,简单来说就是让你的代码同时做多件事情的实践。多线程可能会让人感到头疼,因为我们的大脑很难理解——当你的代码一次只做一件事时,我们可以线性地思考,但当两三件事情同时发生时,可能会相互重叠,这真的会让你感到困惑。
So, although multithreading is a great thing to have as an extension skill, you need to be careful – your goal ought to be to understand just enough of the concepts and code to make it work well, without going a great deal further. Honestly, a lot of developers think multithreading will make their code run three or four times faster immediately, and in some cases it will, but it many other cases your code will actually run slower, and now you have all the additional code complexity to deal with.
所以,尽管多线程作为一个扩展技能是非常重要的,但你需要小心——你的目标应该是理解足够的概念和代码,使其运作良好,而不必深入。此外,很多开发者认为多线程会立即让他们的代码运行快三到四倍,在某些情况下确实会,但在许多其他情况下,你的代码实际上会运行得更慢,现在你还需要处理所有额外的代码复杂性。
If you don’t believe me, check out this quote from David Smith – he’s one of the Swift team at Apple, and previously spent years working on the very core of Apple’s frameworks:
如果你不相信我,可以看看戴维·史密斯的这句话——他是苹果 Swift 团队的一员,之前在苹果的框架核心工作了多年:
My concrete recommendation is: you should really strongly consider not writing async/concurrent code. I know this sounds weird in 2018, but the cost in complexity and performance is high.
我具体的建议是:你真的应该认真考虑不要编写异步/并发代码。我知道在 2018 年这听起来很奇怪,但复杂性和性能的成本是很高的。
So: learn a little of how multithreading works in Swift just so you can see you understand the concepts and implementation, but try not to go overboard!
所以:学习一些 Swift 中多线程的工作原理,以便你能理解这些概念和实现,但尽量不要过于深入!
At this point I’ve outlined all the core and extension skills I think you need in order to work as a full-time iOS developer. But I also want to talk about some of the most common mistakes folks make while learning, because I see these a lot and I know it sets people back.
在这一点上,我已经概述了我认为你作为全职 iOS 开发者所需的所有核心和扩展技能。但我也想谈谈人们在学习过程中常犯的一些错误,因为我看到这些错误很多,我知道这会让人们退步。
Just to give you an idea, my site teaching folks Swift has over 700,000 unique visitors every month, serving up over 5,000,000 page views, so I feel pretty comfortable in saying I know the common mistakes folks hit.
为了让你有个概念,我的网站教授人们 Swift,每个月有超过 700,000 个独立访客,页面浏览量超过 5,000,000,所以我可以自信地说我了解人们常犯的错误。
There are seven main problems folks hit, and I want to cover them in order. They are:
人们常遇到七个主要问题,我想按顺序逐一讨论它们。它们是:
Let’s walk through each of those individually.
让我们逐个来看看。
The first and by far the most common problem folks hit is trying to memorize everything – reading through a tutorial and thinking they must remember everything in there by heart. Please, please, please don’t do that: it’s a recipe for disaster, and will suck all your willpower out of you until you never want to program again.
人们遇到的第一个也是最常见的问题是试图记住所有内容——阅读教程时想着必须记住里面的所有内容。请,请,千万不要这样做:这简直是个灾难的方程式,会消耗你所有的意志力,直到你再也不想编程。
No one memorizes everything. No one even comes close to memorizing everything. Even if you just think about the APIs Apple publishes, which are the pieces of code we can use to build our apps, there must be well over a hundred thousand out there. If you restricted that just to the core components of app building, you’re still probably looking at several hundred – all working in a very precise way that requires a lot of learning to utilize.
没有人能记住所有的东西。甚至没有人能 接近 记住所有的东西。即使你只是考虑一下苹果发布的 API,这些是我们用来构建应用程序的代码片段,市面上肯定有超过十万个。如果你把范围限制在应用构建的核心组件上,仍然可能会有几百个——它们都以非常精确的方式工作,需要大量学习才能使用。
Instead, what happens is that you learn how to do something new, then promptly forget it. So you look it up and use it again, then promptly forget it. So you look it up a third time and use it, and this time you only mostly forget it – some parts stick in your brain. This repeats again and again, each time with you having to refer to a tutorial or some other reference guide, until eventually the really core things have stuck in your head to the point where you can do it without referring elsewhere.
相反,发生的情况是你学习如何做一些新的事情,然后迅速忘记它。所以你查找它并再次使用,然后很快又忘记了。所以你第三次查找并使用这项技能,这次你只会大多数忘记——有些部分留在了你的脑海里。这一过程不断重复,每次你都必须参考教程或其他参考指南,直到最终真正核心的知识深深印在你的脑海中,以至于你能够在不参考其他地方的情况下完成它。
If you weren’t already aware, forgetting is a key component of learning. Each time you forget something and relearn it, it goes into your brain a bit deeper and a bit more thoroughly. Each time you relearn, your brain makes new connections with other things you learned, helping you understand more about the context of what you’re trying to do. And each time you relearn, you’re making it clear to your brain that this particular topic is worth stashing away in its long-term memory.
如果你还不知道,遗忘是学习的一个关键组成部分。每当你忘记某件事并重新学习时,它就会在你的大脑中更深、更彻底地存储。每次你重新学习时,你的大脑会与你学习过的其他事物建立新的联系,帮助你更好地理解你所要做的事情的背景。而每次你重新学习时,你都在向大脑表明这个特定主题值得存储在长期记忆中。
But if you set out trying to memorize everything, you’re going to have a hard time. Instead, don’t worry about forgetting things: knowing where to look them up is much more important than memorizing the specific Swift code to accomplish something. When you forget something and have to relearn it, I encourage you to think of that as a good thing – that information will sink in deeper the second, third, and tenth time you learn it, so you’re doing your brain a favor.
但是如果你设定目标,试图记住一切,你会很困难。相反,不要担心忘记事情:知道在哪里查找比记住具体的 Swift 代码来完成某个任务要重要得多。当你忘记某件事并且需要重新学习时,我鼓励你把它看作是一件好事——那条信息在你第二次、第三次和第十次学习时会更深入地印入脑海,所以你是在帮助你的大脑。
The second most problem I see folks hit is what I call shiny object syndrome – they find a tutorial series that works well for them and start making some progress, but after a week or two of that they see some other tutorial series they want to follow and jump ship to that instead. I’ve had folks email me saying they’ve tried four, five, or even six different series and are – for some weird reason – finding they aren’t learning anything.
我看到的第二个问题是我称之为闪亮物体综合症——他们找到一个对他们有效的教程系列,开始取得一些进展,但在一两周后,他们看到其他想要跟随的教程系列,然后转而去学习那个。我曾有朋友给我发邮件,说他们尝试了四、五甚至六个不同的系列,但出于某种奇怪的原因,他们发现自己什么也没学到。
The problem here usually is that large parts of learning anything aren’t exciting. That’s not the fault of the teacher necessarily, it’s just a fact of learning to code – some things give you great results with hardly any work, and other things take a lot more time to understand, don’t yield fancy results, or are just one part of a larger concept.
这里的问题通常是,学习任何东西的大部分内容并不令人兴奋。这并不一定是教师的错,这只是学习编码的一个事实——有些东西几乎不费力气就能获得很好的结果,而其他东西则需要花费更多时间去理解,不会产生华丽的结果,或者只是更大概念的一部分。
When you hit these steep learning curves, shiny object syndrome becomes powerful – with so many free tutorials out there you can jump ship to any one of them and start again, and you’ll immediately be back in the shallow part of the pool again, covering easier parts you’ve already learned. But unless the original course chose a particularly weird topic to cover, you’re probably going to have to learn it eventually and you’re just kind of delaying the inevitable.
当你遇到这些陡峭的学习曲线时,吸引新事物的症状变得强大——有这么多免费的教程,你可以随时跳转到其中任何一个,重新开始,而你会立即回到浅水区,复习你已经学过的简单内容。但除非原课程选择了一个特别奇怪的话题,否则你最终可能还得学习它,而你只是在拖延不可避免的结果。
So, I’m not asking you always to resist shiny object syndrome, because I know it’s hard. Instead, at least be conscious of it: when you hit a problem, try asking someone else for help and powering through rather than switching.
所以,我并不是让你总是抵制闪亮物体综合征,因为我知道这很难。相反,至少要对此有所意识:当你遇到问题时,试着向其他人寻求帮助并坚持下去,而不是切换。
Speaking of asking someone else, the third problem I see folks hit is when they go all lone wolf with their learning – they have it in their head that they are fully capable of learning to build iOS apps using Swift all by themselves, and don’t need the help of others.
谈到向其他人请教,我看到的第三个问题是,很多人独自学习——他们心里认为自己完全有能力独自学习使用 Swift 构建 iOS 应用,不需要别人的帮助。
This approach does work for a very small number of people, usually the ones who have extensive experience with other programming languages or platforms. But for the overwhelming majority of people, trying to learn like this is a horrible experience – every mistake or misunderstanding takes five times as long to figure out, it’s extremely easy to lose motivation, and you’re missing out on a whole lot of inspiration from seeing others succeed.
这种方法确实对少数人有效,通常是那些在其他编程语言或平台上拥有丰富经验的人。但对于绝大多数人来说,这样学习是非常糟糕的体验——每一个错误或误解都需要五倍的时间来解决,失去动力极其容易,而且你错过了看到他人成功所带来的大量灵感。
If you’re naturally into this “lone wolf” style of learning, let me encourage you to change: share what you’re learning, find others who are learning too, and get into the habit of asking questions. Not only will you discover there’s a fantastic community of learners who will surround you with support and encouragement, but you’ll also be inspired by their work and in turn inspire them with your work. Trust me, I’ve seen this happen hundreds of times and it is utterly transformative.
如果你天生喜欢这种“孤狼”式的学习方式,我鼓励你改变一下:分享你所学的内容,寻找其他正在学习的人,并养成提问的习惯。你不仅会发现有一个支持和鼓励你的优秀学习者社区,还会受到他们工作的启发,反过来用你的工作去激励他们。相信我,我见过这种情况发生过数百次,真的会改变一切。
The fourth big problem I see folks hit is when they insist on using beta versions of Apple’s development tools. I get it: every year Apple introduces a new iOS, a new macOS, and more, always delivering exciting new things for us to try. It is totally natural for folks to want to learn the latest, greatest that’s out there, particularly if they know that Swift has a long history of change.
我看到的第四个大问题是,人们坚持使用苹果开发工具的测试版。我明白:每年苹果都会推出新的 iOS、新的 macOS 等,总是提供令人兴奋的新事物供我们尝试。人们想学习最新、最好的东西是非常自然的,特别是他们知道 Swift 有着悠久的变革历史。
However, folks get into all sorts of problems when they try to learn with beta software:
然而,人们在尝试使用测试版软件学习时会遇到各种问题:
So, I know it’s exciting to learn new stuff, and I realize you might think you’re getting ahead of the game with new features, but trust me: it isn’t worth it. Always stick to the latest public releases of Apple’s developer tools, at least until you’re feeling comfortable with them.
所以,我知道学习新知识是令人兴奋的,我意识到你可能认为通过新功能获得了先机,但相信我:这不值得。始终坚持使用苹果开发者工具的最新公开版本,至少在你对它们感到舒适之前。
The fifth big problem folks hit when trying to learn is relying on Apple’s documentation. Apple’s developer publications team works hard to document as much as they can from the company’s huge range of frameworks, but their job for the most part is to write reference material – things you read when you’re trying to use a particular piece of their tools, rather than creating a structured course to help you learn to build iOS apps.
人们在学习时遇到的第五个大问题是依赖苹果的文档。苹果的开发者出版团队努力记录公司众多框架中的尽可能多的内容,但他们大部分的工作是编写参考材料——你在尝试使用他们的某个工具时阅读的内容,而不是创建一个结构化的课程来帮助你学习构建 iOS 应用程序。
I’ve lost track of how many times folks have asked “how can I learn Swift?” only to be answered “just read Apple’s Swift reference guide.” This approach does work for some people, and I know that because it worked for me – I read it cover to cover when Swift was first announced. However, for most people it’s a bit like trying to learn a human language by reading a dictionary: it’s designed to cover everything in the language, rather than teach you the most important parts and how to apply them.
我已经不记得有多少次人们问“我该如何学习 Swift?”然后得到的回答是“只需阅读苹果的 Swift 参考指南。”这种方法对某些人有效,我知道因为我就是其中之一——当 Swift 首次发布时,我从头到尾读了一遍。然而,对于大多数人来说,这就像试图通过阅读字典来学习一门人类语言:它旨在涵盖该语言的所有内容,而不是教授你最重要的部分以及如何应用它们。
So, if you have extensive experience with other languages you might find reading Apple’s reference guides to be useful, but if you’re just starting out then maybe come back to them after a few months.
所以,如果你对其他语言有丰富的经验,你可能会发现阅读苹果的参考指南很有用,但如果你刚刚开始学习,那可能过几个月再回来看它们。
The sixth big problem folks hit is trying to learn Objective-C. This was Apple’s primary development language before Swift was introduced, and although you’ll find remnants in some old codebases the overwhelming majority of existing code is now Swift, and almost all new code is also Swift.
第六个大家遇到的大问题是试图学习 Objective-C。这是苹果在引入 Swift 之前的主要开发语言,尽管在一些旧代码库中你会发现残留的部分,但现有代码的绝大多数现在是 Swift,几乎所有 新 代码也是 Swift。
I spent years writing Objective-C before Swift came along and really grew to love it, but it has an extremely steep learning curve compared to Swift and misses out on most of Swift’s important features. I remember when I first tried out the iPhone SDK when Apple announced it, and being horrified by Objective-C because it was entirely unlike anything else I had seen so far.
我花了多年时间编写 Objective-C,直到 Swift 出现并让我真正喜欢上它,但与 Swift 相比,它的学习曲线非常陡峭,并且缺少大部分 Swift 的重要功能。我记得当苹果公司宣布 iPhone SDK 时,我第一次尝试它,对 Objective-C 感到惊恐,因为它完全与我之前见过的任何东西都不一样。
For a learner, Objective-C and Swift have almost nothing in common. Yes, they both share the same frameworks from Apple, but unless you’re actually planning to work at Apple – the only company in the world still producing large amounts of Objective-C – then you should leave Objective-C well alone and focus entirely on Swift.
对于学习者来说,Objective-C 和 Swift 几乎没有任何共同点。是的,它们都共享来自苹果的相同框架,但除非你确实打算在 苹果 工作——这是世界上唯一仍在大量生产 Objective-C 的公司——否则你应该完全放弃 Objective-C,专注于 Swift。
And the final major mistake I see folks make when learning Swift is to dump on other languages as if they were somehow inferior to Swift. The usual target is JavaScript, but you’ll also see folks take shots at Python, Java, Ruby, Go, and more, and for what? It’s not a competition, folks – those languages don’t have to lose in order for Swift to win.
我看到人们在学习 Swift 时犯的最后一个重大错误就是贬低其他语言,好像它们比 Swift 低劣一样。通常的攻击目标是 JavaScript,但你也会看到有人对 Python、Java、Ruby、Go 等进行抨击,究竟为了什么呢?这不是一场竞争,大家——这些语言不需要失败,Swift 才可以获胜。
In fact, Swift and SwiftUI regularly take inspiration from other languages and frameworks – whenever new language features are considered the community looks at similar implementations in Rust, Python, Haskell, and other languages, and SwiftUI itself is hugely inspired by the React framework in JavaScript. So, when I see folks in our community say SwiftUI is JavaScript-free or similar, I just cringe – nothing could be further from the truth.
实际上,Swift 和 SwiftUI 经常从其他语言和框架中汲取灵感——每当考虑到新的语言特性时,社区都会查看 Rust、Python、Haskell 和其他语言中的类似实现,而 SwiftUI 本身深受 JavaScript 的 React 框架的启发。因此,当我看到我们社区的朋友们说 SwiftUI 是无 JavaScript 的或类似的说法时,我只能感到不适——事实恰恰相反。
Now for the part most people will care most about: what are the actual resources I think you should use to learn Swift, SwiftUI, and more – to reach your goal of being an iOS developer?
现在大多数人最关心的部分来了:我认为你应该使用哪些实际资源来学习 Swift、SwiftUI 等,以实现成为 iOS 开发者的目标?
There are lots out there, and I really appreciate the fact that the Swift community has such a broad range of people sharing their experience. However, here I’m specifically going to look at resources that are free – places where you can go and learn to build fantastic apps without paying a cent.
有很多资源,我非常感激 Swift 社区有如此广泛的人共享他们的经验。然而,在这里我将特别关注那些免费的资源——你可以去的地方,学习如何构建出色的应用程序而无需花费一分钱。
There are two reasons for this:
有两个原因:
So, I’m only listing free resources here because I don’t want you to fall into those traps – don’t splash out a hundred bucks or more for your first course, and don’t buy a dozen cheap courses because you think that makes you a developer.
所以,我这里只列出免费的资源,因为我不想让你陷入那些陷阱——不要为你的第一门课程花一百美元或更多,也不要买一堆便宜的课程,因为你认为那会使你成为一个开发者。
First, Apple has two major resources that can help you. The first is its Teaching Code site, which lists student and teacher resources for learning Swift from the absolute basics up to professional certifications. Their curriculum is massive, so it might take you a little while to find the best entry point for you, however once you’re there you’ll find lot of things to explore.
首先,苹果公司有两个主要资源可以帮助你。第一个是它的 教学代码网站,该网站列出了学生和教师用于学习 Swift 的资源,从基础知识到专业认证应有尽有。他们的课程内容丰富,因此你可能需要一些时间来找到最适合你的入门点,但一旦你找到了,就会发现有很多东西可以探索。
And second, Apple has a series of SwiftUI tutorials that walk you through building real apps. These do not teach you Swift, though, so you’ll need to follow their Swift-focused curriculum first.
而且,苹果有一系列的 SwiftUI 教程,可以指导你构建真实的应用程序。不过,这些并 不 教你 Swift,因此你需要先按照他们针对 Swift 的课程学习。
Like I said earlier, Apple also makes a guide specifically for the Swift programming language, but there’s a very good chance it won’t work for you – it’s designed as a reference rather than a structured tutorial, so it’s quite dense reading.
正如我之前所说,苹果也为 Swift 编程语言制作了一本指南,但很有可能它不适合你——它被设计为参考资料,而不是结构化的教程,因此阅读起来相当密集。
What Apple’s tutorials don’t do is try to provide a structured way to learn, and that’s where my own free tutorials come in. I have hundreds of articles and videos about Swift, SwiftUI, UIKit, and more, but there are two in particular I want to recommend: the 100 Days of SwiftUI, and the 100 Days of Swift.
苹果的教程并不提供一种结构化的学习方式,这正是我自己的免费教程的用武之地。我有关于 Swift、SwiftUI、UIKit 等的数百篇文章和视频,但我特别想推荐两个:100 天的 SwiftUI 和 100 天的 Swift。
The 100 Days of SwiftUI course takes you through learning the fundamentals of Swift using articles, videos, and interactive tests, then walks you through building over 20 real-world apps using SwiftUI – again all with articles, videos, and interactive tests to help make sure what you’re learning is sinking in. Each tutorial builds on what you already learned, so the learning curve is nice and gradual.
100 天 SwiftUI 课程将带您学习 Swift 的基础知识,使用文章、视频和互动测试,然后引导您使用 SwiftUI 构建 20 多个实际应用程序——同样通过文章、视频和互动测试来确保您学习的内容得以消化。每个教程都是在您已经学过的基础上进行的,因此学习曲线平滑而渐进。
If you’d rather learn UIKit rather than SwiftUI, that’s where the original 100 Days of Swift comes in – it’s a similar idea, but built using UIKit rather than SwiftUI for folks who prefer that path.
如果您更愿意学习 UIKit 而不是 SwiftUI,那么原版的“100 天的 Swift”就是为此而来——它的想法类似,但使用的是 UIKit 而不是 SwiftUI,适合喜欢这条路径的人。
There are some fantastic YouTube videos walking you through the fundamentals of SwiftUI, including:
有一些精彩的 YouTube 视频带你了解 SwiftUI 的基础知识,包括:
Although they aren’t quite so structured, there are other sites that have high-quality Swift and SwiftUI tutorials, including BLCKBIRDS, Ray Wenderlich, Donny Wals, Antoine van der Lee, and more – I really encourage folks to visit a range of resources and find what works for them.
虽然它们没有那么结构化,但还有其他提供高质量 Swift 和 SwiftUI 教程的网站,包括BLCKBIRDS、Ray Wenderlich、Donny Wals、Antoine van der Lee等 – 我非常鼓励大家访问各种资源,找到适合自己的内容。
If you prefer to learn using apps, there are two I would recommend, both completely free. The first is Apple’s Swift Playgrounds app, which lets you learn Swift right on your iPad or Mac. There are lots of interactive lessons aimed at kids, but there are also some more advanced lessons that will help push your skills further.
如果你更喜欢使用应用程序学习,我推荐两个完全免费的应用程序。第一个是苹果的 Swift Playgrounds 应用,让你可以在 iPad 或 Mac 上学习 Swift。它有很多面向孩子的互动课程,但也有一些更高级的课程,可以帮助你进一步提升技能。
The other app is one I make myself, and it’s called Unwrap.
Unwrap works on all iPhones and iPads, and lets you learn, review, and practice the fundamentals of Swift using videos, tests, and more. It covers all the fundamentals of Swift, and works great alongside the 100 Days of SwiftUI curriculum.
另一个应用是我自己制作的,叫做 Unwrap。Unwrap 可以在所有 iPhone 和 iPad 上运行,让你通过视频、测试等方式学习、复习和实践 Swift 的基础知识。它涵盖了 Swift 的所有基础知识,并与 SwiftUI 100 天课程完美结合。
Finally, you’re going to need to learn to find answers online. This might mean going to Stack Overflow, but honestly I hope not because it’s not a terribly pleasant place.
最后,你需要学会在网上寻找答案。这可能意味着要去 Stack Overflow,但老实说,我希望不是,因为那不是一个特别愉快的地方。
Instead, ask questions on the Hacking with Swift forums, on your favorite Slack group, in the iOS Dev Happy Hour sessions, on Twitter, and more – we are genuinely a very warm, welcoming community with a lot of folks willing to help you reach your goals.
相反,可以在 Hacking with Swift 论坛上、在你最喜欢的 Slack 群组中、在 iOS 开发欢乐时光会议上、在 Twitter 上等地方提问——我们真的是一个非常热情、友好的社区,有很多人愿意帮助你实现你的目标。
Speaking of our community, I want turn to a really important topic that will help meet folks at a similar position to you, help you you learn more effectively, and help you find job openings too – it’s just a win all around.
谈到我们的社区,我想转向一个非常重要的话题,这将帮助处于类似位置的人,让你更有效地学习,并帮助你找到工作机会——这对大家来说都是一个双赢的局面。
The topic is this: connecting to the iOS development community. This means learning where to look for news and interesting ideas, where to go when you want to meet folks and share tips, and helpful places where you can ask questions.
主题是:与 iOS 开发社区连接。这意味着学习在哪里寻找新闻和有趣的想法,在哪里可以遇见人们并分享技巧,以及可以提出问题的有用地方。
Let’s start with the easiest one first, which is using Twitter. Twitter is a really fantastic way to follow things that interest you, and in the case of iOS development there are a handful of folks I would really recommend.
让我们先从最简单的开始,那就是使用 Twitter。Twitter 是关注感兴趣事物的绝佳方式,而在 iOS 开发方面,我有几位非常推荐的人。
These people tweet about their own work, yes, but the reason I think they are great to follow is because they also tweet a lot about other people’s work too – they will help you see a range of perspectives on a particular topic, and they share all sorts of interesting ideas and things to try.
这些人确实会发布关于自己工作的推文,但我认为他们值得关注的原因是他们也会大量发布关于他人工作的推文——他们会帮助你看到某个特定话题的多种视角,并分享各种有趣的想法和尝试的事物。
There are 10 folks I would suggest you follow on Twitter:
我建议你在推特上关注 10 位朋友:
Of course, Twitter isn’t the only place where you can keep up with the community – there are newsletters, Slack groups, Zoom meetups, forums, conferences, and more. I don’t want to bore you too much, so I’m going to list one of each of those here:
当然,Twitter 并不是你可以关注社区的唯一平台——还有新闻通讯、Slack 小组、Zoom 会议、论坛、会议等等。我不想让你感到无聊,所以我将在这里列出其中的一个:
This is a question I get asked a lot: how long does it take to go from knowing nothing about Swift to being able to get an entry-level iOS developer position.
这是我经常被问到的一个问题很多:从一无所知到能够获得入门级 iOS 开发职位需要多长时间。
Obviously the answer is “it depends”, but that would be a cop out here so let me address it in a few different ways.
显然,答案是“视情况而定”,但这样回答显得不够诚恳,所以让我用几种不同的方式来阐述。
First, what you cannot do is rush through several courses at the same time. Remember what I said about shiny object syndrome? Yeah, that – many people really do think they can double up with two courses at the same time, then rush through four, five, or even more hours every day and still end up with a high-quality understanding of the topics they covered.
首先,您不能做的就是同时匆忙上好几门课程。还记得我说的关于闪光物体综合症吗?对,就是这个——许多人真的认为自己可以同时上两门课程,然后每天快速学习四、五个甚至更多小时,最终仍能高质量地理解他们所涉及的主题。
To be clear, I have seen folks try that so many times and it fails every time. Every single time – it never works, and I see folks say it was because the tutorials were bad, or because Swift was too hard, or for literally any other reason than that they tried to rush through something that was complex.
要明确的是,我见过人们尝试那样做很多次,每次都失败。每一次——它从来没有成功过,我看到人们说这是因为教程不好,或者因为 Swift 太难,或者出于任何其他理由,而不是因为他们试图匆忙完成复杂的事情。
Literally just today I received an email saying, “Hi Paul! If I spend four or five hours a day studying Swift, how fast can I finish?” And that’s just not how learning works – not learning Swift, not learning to play the piano, not learning to ice skate, or whatever.
今天我收到了一个电子邮件,上面写着:“嗨,保罗!如果我每天花四到五个小时学习 Swift,我能多快完成?”这根本不是学习的方式——无论是学习 Swift,学习弹钢琴,学习滑冰,还是其他任何东西。
Learning Swift is really hard in places, and learning to build apps takes a lot of trial and error, a lot of making mistakes, and a lot of wrong turns. And that’s all okay – it’s better than okay, it’s great! Because each time you try something, each time you make a mistake, and each time you take a wrong turn, you learn something along the way and when you finally come to the solution you’ll understand it in much more depth.
学习 Swift 在某些地方确实很困难,学习构建应用程序需要大量的尝试和错误,需要犯很多错误,也需要走很多弯路。这都没关系——这不仅没关系,甚至很好!因为每次你尝试某件事,每次你犯错误,每次你走弯路时,你都在过程中 学习 到一些东西,当你最终找到解决方案时,你会更深入地理解它。
So, the TL;DR here is don’t try and rush – take your time, don’t be afraid to explore tangents that come along, don’t be afraid to experiment with your projects, and don’t be afraid to go back to something you learned previously and relearn it as needed.
所以,简而言之,不要急于求成——慢慢来,不要害怕探索出现的旁支,勇于尝试你的项目,不要害怕回去重新学习之前学过的东西,根据需要重新学习。
Second, you should take into account what kind of background you had before you came to Swift. You see, learning to build apps takes a wide variety of skills, and if you’re coming to the table with lots of existing knowledge such as version control, data structures, algorithms, and more, then you have a real head start compared to folks who are coming new to computer science in general alongside to coming fresh to Swift and other Apple frameworks.
其次,你应该考虑一下在来到 Swift 之前你拥有怎样的背景。你看,学习构建应用程序需要各种技能,如果你具备很多现有的知识,例如版本控制、数据结构、算法等等,那么相比那些刚接触计算机科学以及刚开始学习 Swift 和其他苹果框架的人,你就有了真正的先发优势。
So, we could think about a few different places you might be right now:
所以,我们可以想象你现在可能在几个不同的地方:
And what if you have no CS degree, no bootcamp, and no prior coding experience? Then I’d say you’re looking at 9 to 12 months to go from nothing to an entry-level job. Yes, that’s potentially a full year of work alongside whatever is your current full-time job, and that’s just to get your first job as an iOS developer.
如果你没有计算机科学学位,没有培训班,也没有以前的编程经验,那你可能需要 9 到 12 个月的时间从零开始进入一个初级职位。是的,这可能意味着你需要在全职工作的同时再花一整年的时间,这只是为了获得作为 iOS 开发者的第一个工作。
Is it always a year? No. Like I said, you can shave 1 to 6 months off that if you do have prior experience. If you take the best numbers on both sides – 9 months from nothing to an entry-level job, plus shaving 6 months off for having a CS degree – and that potentially means you could be hirable in just 3 months, which is remarkable.
不,总是需要一年吗?不是。如我所说,如果你有相关经验,可以减少 1 到 6 个月的时间。如果你把双方的最佳数字拿来比较——从零到入门级工作的 9 个月,加上因为拥有计算机科学学位而减少的 6 个月——这可能意味着你只需 3 个月就能被雇用,这真是了不起。
Now, you might think getting your first job in three months is impossible, but it isn’t. Heck, I met someone who was following my 100 Days of Swift course who got a job before they reached day 50 – they had already learned enough about app development in under two months, because they put in the work to make every day count.
现在,你可能会认为在三个月内找到第一份工作是不可能的,但其实并不是。实际上,我遇到过一个在参加我的《100 天 Swift》课程的人,他们在第 50 天之前就找到了工作——因为他们在不到两个月的时间里已经学到了足够的应用开发知识,因为他们努力让每一天都有意义。
So, you don’t need a CS degree, and you don’t need a bootcamp, but you do need to be prepared to work hard.
所以,你不需要计算机科学学位,也不需要参加训练营,但你确实需要准备好努力工作。
The third thing I want to address before we move on is to say “it takes as long as it takes.” John Lennon has a fantastic lyric that I love, which is “life is what happens when you’re busy making other plans.”
我想在继续之前提到的第三件事是“所需时间就是所需时间”。约翰·列侬有一句我非常喜欢的歌词:“生活就是你忙着制定其他计划时发生的事情。”
It’s really fantastic if you have grand plans for learning, and big aspirations for the job you want to have, but sometimes you’re tired, sometimes you’re stressed out, sometimes your roof starts leaking or your dog needs to go to the vet or your kids need extra help with their homework, or whatever, and that’s just life. So, please don’t beat yourself up if you fall behind with your learning schedule, or if you find yourself missing a few days or even a few weeks, and so on – as long as you’re resilient, you’ll get there.
如果你有宏伟的学习计划和对未来工作的雄心壮志,那真的太棒了,但有时候你会感到疲惫,有时候你会感到压力,有时候屋顶漏水,或者你的狗需要去看兽医,或者你的孩子在做作业时需要额外的帮助,等等,这就是生活。所以,如果你在学习计划上落后,或者发现自己错过了几天甚至几周,请不要对自己太苛刻——只要你保持韧性,你就能成功。
If you work super hard and get a job after 50 days, that’s fantastic – well done! If it takes you 500 days, that’s also fantastic and you should be just as proud. Heck, if it takes you five years I know it’s probably not what you wanted, but the end result is the same and that’s what matters.
如果你努力工作并在 50 天内找到工作,那太棒了——干得好!如果你花了 500 天,那也非常棒,你应该同样感到自豪。其实,如果你花了五年时间,我知道这可能不是你想要的,但最终的结果是一样的,这才是最重要的。
Last but not least, if you’re a little further into your iOS learning path and starting to think about getting that first entry-level job, I want to point you to a massive collection of resources I assembled to help you.
最后但同样重要的是,如果你在 iOS 学习路径上稍微深入一些,并开始考虑获取第一份入门级工作,我想向你推荐我收集的一个庞大资源库,以帮助你。
On my site you can click Careers > Start Here, or just visit https://www.hackingwithswift.com/career-guide directly. There you’ll find an epic collection of resources that will help you no matter where you are, all of which are free:
在我的网站上,您可以点击“职业 > 从这里开始”,或者直接访问 https://www.hackingwithswift.com/career-guide。在那里,您会发现一个 史诗般的 资源汇集,无论您身在何处,这些资源都将对您有所帮助,全部免费:
Just go to the URL and you’ll find links to all that and more in one place.
只需访问该网址,您就会在一个地方找到所有相关链接及更多信息。
I also want to point you towards Sean Allen’s series of videos for Swift interview tips – he has a whole playlist for them where you can work through individual discussions such as classes vs structs, functional programming, error handling, and more. None of the videos are super long, but each one is aimed at giving you the skills you need to perform well in an interview scenario.
我还想向你推荐 Sean Allen 的 Swift 面试技巧视频系列——他有一个完整的播放列表,你可以在其中逐个讨论类与结构体、函数式编程、错误处理等主题。视频都不是很长,但每一个都旨在帮助你掌握在面试场景中表现出色所需的技能。
Okay, so I’ve gone through the core and extension skills you need, common mistakes folks make when learning, what courses you can follow, how to connect to the iOS community, and how to prepare for your job interview – that’s a huge amount to get through, and I hope it’s been useful.
好的,我已经讲解了你需要的核心和扩展技能、学习时常见的错误、可以参加的课程、如何与 iOS 社区建立联系以及如何为面试做准备——这些内容非常庞杂,希望对你有所帮助。
What’s more, I hope I’ve shown you how much is out there that is completely free. Yes, I know the temptation is strong to splash out a hundred bucks or more for a course, but relax – get moving first, find some momentum, and also find someone who teaches Swift in a way that works for you. And then, when you’re in a good place and feel ready, fine: go ahead and spend some money if you want.
更重要的是,我希望我已经向你展示了有多少完全免费的资源。是的,我知道花上几百块钱或更多参加课程的诱惑很强,但放轻松——先开始行动,找到一些动力,并寻找一个以你能接受的方式教授 Swift 的人。然后,当你处于一个好的状态并感到准备好时,好的:如果你想的话,随便花点钱。
Best of luck with your journey!
祝你旅途顺利!
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until September 29th.
赞助 参加一个免费的速成课程,适合想要获得专家级技术和实践技能的中级/高级 iOS 开发者——这是成为全面高级开发者的快速通道!赶快报名,因为该课程仅在 9 月 29 日前开放。
Link copied to your pasteboard.
链接已复制到剪贴板。