【100天学习SwiftUI】第0天 如何成为一名iOS开发人员

在这篇文章中,我想向您介绍我认为在 2021 年成为一名 iOS 开发人员需要做的事情。我的目标是两类人:Swift 的绝对初学者——以前从未为 iOS 构建过任何东西的人——以及还有所谓的假初学者,他们以前可能尝试过学习 Swift,但从未真正达到获得全职工作的目标。

无论您现在处于什么级别,这里的目标都是相同的:让您处于合适的位置来申请公司的初级 iOS 开发人员职位。

我们将探讨您应该学习的技能、您可以参加的课程、如何与社区建立联系、人们常犯的错误等等,最重要的是我将讨论的所有内容都将完全免费所以你不需要一分钱来跟随。

说真的,太多人认为花很多钱是实现梦想工作的捷径,而实际上最重要的是决心和意志力。这里给你一个提示:如果你已经想跳过本文,也许你应该考虑锻炼你的意志力!

本文分为 7 个部分:

  1. 找到工作绝对需要了解的核心技能。

  2. 值得拥有的扩展技能——如果您有时间学习,这些技能将使您脱颖而出

  3. 人们在尝试学习时常犯的错误。

  4. 您可以使用完全免费的学习 Swift 的资源。

  5. 如何连接到 iOS 开发社区。

  6. 了解实现目标需要多长时间。

  7. 准备申请你的第一份工作

一   你需要了解的核心技能

要成为iOS开发者,你需要掌握的核心技能主要有五个:

  1. Swift:这是Apple的核心编程语言,用于创建变量、编写函数等。Swift集成了许多最新的编程语言特性,旨在让你避免老旧语言的一些常见问题,同时也引入了一些高级特性可能一开始会让你感到有点头疼。但别担心,Swift有许多相对简单的部分,有些内容可能需要更长的时间来彻底掌握。

  2. SwiftUI:这是基于Swift的Apple框架,用于开发iOS、macOS、tvOS和watchOS应用。SwiftUI提供了构建应用所需的工具,例如显示图片、文本、按钮、文本框、数据表等。SwiftUI并不是替代Swift,而是建立在Swift之上,让我们能够用Swift来制作应用。

  3. 处理数据:理解如何在应用中加载和保存数据,这包括将从服务器获取的数据转换为应用可以显示的信息。

  4. 网络编程:掌握如何从互联网获取数据或向服务器发送数据的技能。最基本的,你需要知道如何从服务器获取JSON数据。

  5. 版本控制:使用诸如Git之类的版本控制系统。你需要能够将代码发布到GitHub等平台,以便招聘人员可以公开查看你的工作。

这个列表有意保持简短,因为学习的过程中你会发现总有更多东西需要学习。这可能会让你花费大量时间在学习和练习上,从而失去最初的目标——成为iOS开发者。通常,你加入的团队已经有现成的应用,他们希望你帮助开发,这意味着无论如何他们都需要教你很多东西。如果你试图提前学习太多额外的主题,很可能是在浪费时间。

在这五项技能中,Swift和SwiftUI是两个非常大且复杂的领域,你可能需要几个月的时间来逐步掌握它们。但最重要的是,如果你正确掌握了这五项技能,你就能构建广泛的应用范围。当然,你的代码可能不会完美,但这没关系——写出优秀的代码的唯一方式是首先写出一大堆糟糕的代码。

Swift

学习Swift是成为iOS开发者的第一步。Swift是苹果公司的核心编程语言,与用于显示iPhone屏幕信息或从互联网下载数据的概念不同,它更像是JavaScript或Python这样的纯编程语言。你将使用Swift来创建变量、编写函数等,它集成了几乎所有的前沿语言特性,这意味着你可以避免像C++和Java那样老旧语言常见的行为,但同时也意味着它拥有一些可能一开始让你感到震惊的高级特性。不过,很多Swift的部分相对直接,一些部分可能需要更长时间来彻底掌握,所以只需慢慢来,持续学习,你最终会掌握它的。

SwiftUI

SwiftUI是我列出的第二个核心技能,它是一个苹果公司的框架,允许我们使用Swift编写iOS、macOS、tvOS甚至watchOS应用。因此,虽然Swift是编程语言,SwiftUI则提供了制作应用所需的工具,如展示图片、文本、按钮、文本框、数据表等。需要明确的是,SwiftUI并不是Swift的替代品——它是建立在Swift之上的框架,让我们能够利用Swift来创建应用,因此成功需要同时掌握Swift和SwiftUI。

如果你认为Swift是新的,那么SwiftUI对你来说会更加新颖——在我记录这些内容时,SwiftUI甚至还不到两岁!尽管如此新,iOS社区已经全心全意地接受了它,因为它实在是太棒了,易于使用。

苹果公司还有一个用于构建iOS应用的较旧框架叫做UIKit,如果你询问一群人首先应该学习SwiftUI还是UIKit,你可能会得到一系列不同的答案。实际上,如果你查看这篇文章的YouTube视频评论,你可能会发现一堆人告诉我我不知道我在说什么,认为UIKit应该是优先学习的。

如果你好奇为什么我认为你应该将SwiftUI作为核心技能来学习,这里有几个理由:

  1. 相较于UIKit,SwiftUI更加简单:确实如此,SwiftUI可能只需要UIKit四分之一的代码量就能达到相同的效果,这意味着你需要学习的东西更少。这样你就能更快地构建东西,更快地看到结果,并更快地迭代这些结果,这在学习过程中极具动力。

  2. SwiftUI是为Swift量身定制的:它利用Swift的语言特性帮助你避免问题并获得最大的性能。例如,如果你在应用的一个屏幕上更改了一些数据,SwiftUI将自动确保使用该数据的应用中的其他任何地方都会更新——你不需要自己编写代码来保持所有东西同步,这比看起来要复杂得多。相比之下,UIKit是为苹果的较旧语言Objective-C编写的,因此它带有许多由于年代久远而产生的奇怪行为和冗余。

  3. SwiftUI适用于所有的苹果平台:这意味着你可以将在iOS上学到的知识直接应用于构建macOS或watchOS应用,几乎不需要修改代码。确实,有些设备特有的功能(如Apple Watch的Digital Crown)可能不通用,但你学到的绝大多数知识是可以跨平台使用的。

  4. SwiftUI是未来的趋势:如果你现在正申请一份工作,可能确实需要了解UIKit,但你阅读这篇文章说明你还处于学习过程的早期。虽然目前UIKit可能更为普遍,但从你完成学习开始的6个月、9个月甚至12个月后,SwiftUI将成为主导的UI框架。

世界上最大的公司,包括苹果自己,在选择技术时都开始倾向于使用SwiftUI。例如,苹果在iOS 14中推出小部件时,就明确要求必须使用SwiftUI——UIKit在那里就不可能被使用了。这些迹象表明,学习和掌握SwiftUI不仅对当前有帮助,对未来的发展同样至关重要。

处理数据和网络编程

第三和第四个提到的技能是网络编程和数据处理。与Swift和SwiftUI相比,这些可能相对简单一些,至少达到初级iOS开发者所需的水平应该不难。

网络编程涉及从互联网获取数据或将数据从本地设备发送到服务器。虽然有很多方法可以实现这一点,但基本上你至少需要知道如何从服务器获取JSON数据。

数据处理的部分则是关于如何加载和保存数据。同样,处理数据的方法有很多,但最基本的需求是能够将通过网络编程从服务器获取的数据转换成应用可以展示的信息。

实际上,网络编程和数据处理是相辅相成的:从服务器获取一些数据,然后将其转换成应用中可以展示的信息。有些开发者开玩笑说,这类代码占了iOS开发者工作的一半,确实,这些技能在实际工作中非常重要且频繁使用。

版本控制

最后一个技能是版本控制,它实际上并不涉及编码:使用类似Git的工具进行版本控制。你并不需要非常深入地了解Git的所有工作原理,但掌握基本操作,能够安全地存储你的数据,并且能够与他人协作是非常重要的。

将这五项技能结合起来,Swift和SwiftUI是两个主要的大块,加上三个小但重要的技能。如果你能够专注于这五项技能,不被其他事物分散注意力,你将向成为iOS开发者迈出巨大的步伐。

总的来说,这就是我认为你需要成为iOS开发者的五个核心技能。市面上有成千上万的人仅凭这些技能,就能够构建并在App Store上发布出色的应用。

二  哪些值得扩展的技能

在掌握了iOS开发的五个核心技能之后,你已经完全有能力自行开发并发布你的应用,作为一名独立开发者,同时也有资格申请初级iOS开发职位,为公司工作——如果你愿意的话。除了这些核心技能,你不需要任何特别的资格——掌握了这些技能,你就已经站在了一个很好的起点。

但如果你已经掌握了这些技能,并希望进一步发展,那么有五个扩展技能我建议你学习。这些技能将帮助你从一个良好的基础上升到一个更高的层次——你将变得更具雇佣价值,能够构建的应用范围也将进一步扩大。

这些扩展技能包括:

  1. UIKit:尽管SwiftUI是构建用户界面的新方法,但UIKit仍是许多现存应用和项目中广泛使用的框架。掌握UIKit可以让你更好地理解和维护这些项目,同时也为使用SwiftUI提供了更深层次的理解。

  2. Core Data:这是苹果提供的一套数据存储解决方案,用于管理应用的模型层对象。学习Core Data可以让你更有效地处理和存储数据,特别是在需要复杂数据模型和本地持久化存储的场景中。

  3. 测试:编写测试代码确保你的应用按预期工作,并且在未来的开发过程中保持稳定性和可靠性。学习如何进行单元测试、UI测试和集成测试可以显著提高应用的质量。

  4. 软件架构:了解不同的软件架构模式(如MVC、MVVM、VIPER等)可以帮助你构建更清晰、更易于维护和扩展的代码结构。这对于大型项目和团队合作尤为重要。

  5. 多线程:在现代应用开发中,理解和利用多线程和并发是至关重要的,这可以让应用保持响应性,同时执行多项任务。学习如何在Swift中安全地使用线程、队列和锁,可以让你构建出性能更强、体验更流畅的应用。

掌握这些扩展技能不仅能够增加你作为iOS开发者的市场价值,还能让你构建更复杂、更强大的应用。每一项技能都需要时间和实践来深入理解,但它们对于你的职业发展来说是值得的投资。

UIKit

转向UIKit,它是苹果的较旧用户界面框架,自2008年以来一直用于构建应用,到我写这篇文章时已有13年的历史,在软件领域这已经算是相当老了。但这个年龄并不意味着UIKit不好,事实上,一旦你习惯了它的工作方式,你会惊讶于它的优雅。

学习UIKit的理由包括:

  • 已有数十万的应用是用UIKit编写的,因此如果你加入一个拥有大型、成熟应用的公司,你几乎肯定需要编写UIKit代码来维护那个应用。

  • UIKit比SwiftUI功能更加强大——目前有许多功能是SwiftUI无法实现的。

  • 你可以使用称为Auto Layout的技术创建极其精确的布局。

  • 如果你的代码遇到问题,UIKit比SwiftUI有更多的解决方案,简单因为它存在的时间更长。

你可能会认为这些优点使UIKit听起来很棒,那为什么我将它归为扩展技能而不是核心技能呢?原因是UIKit也有它的问题:

  • 与SwiftUI相比,几乎所有的事情在UIKit中都更难做,有些事情甚至需要更多的代码。SwiftUI是专为现代iOS开发制作的,因此它为你做了大量的工作。

  • 由于UIKit不是为Swift编写的,你会发现它有很多在SwiftUI中可以忽略的特性——大量的隐式解包可选项、使用特殊的@objc属性标记代码使其可用于UIKit的Objective-C底层、需要使用协议和代理来展示简单数据。

  • 关于Auto Layout的没有什么是“自动”的——实际上,如果你试图构建一个复杂的布局,很可能会对Auto Layout产生噩梦。它非常聪明,但在某些地方也极其困难。

这就是为什么我认为UIKit是一个扩展技能:与SwiftUI相比,学习它需要更多的时间和努力,这意味着需要更大的决心——你必须真的想学它,否则你会感到困惑、无聊、愤怒,或者可能三者都有。当然,SwiftUI并没有UIKit的所有功能,但至少你可以快速进步,并在转向UIKit之前感受到进展和成功的感觉。

Core Data

继续讨论Core Data,这是我提到的第二个扩展技能,也是苹果公司为应用数据处理提供的框架。在核心技能部分,我提到了网络编程和数据处理,确实,有了这些技能,你可以从服务器获取任何你想要的数据并在你的应用中显示它们。Core Data则进一步扩展了这些功能:它允许你操作获取到的数据,例如搜索特定值、排序结果等,所有这些都能非常高效地完成。它还可以很容易地与iCloud链接,意味着用户的数据可以在所有设备上同步。

Core Data有一些缺点,最大的一个可能是它经常不那么易于使用。Core Data几乎和UIKit一样古老,尽管它与Objective-C配合得很好,但在Swift中的使用感觉并不那么舒适。它与SwiftUI有很好的集成,这使得它感觉有点不那么陌生,但它仍然是一个令人惊讶的复杂话题。

那么,为什么我把它列为扩展技能呢?因为像UIKit一样,Core Data也极其流行——成千上万的应用使用了它,无论是大公司还是小公司。同样像UIKit一样,Core Data非常强大,虽然你可以在自己的代码中重建它的大部分重要功能,但你为什么要这么做呢?利用Core Data,你可以利用苹果多年来优化的强大功能,而不必从头开始构建复杂的数据管理解决方案。

学习Core Data可以为你的iOS开发技能组合添加重要的一环,使你能够创建数据驱动的应用,这些应用能够有效地管理和持久化用户数据。尽管它可能需要一定的学习曲线,但掌握Core Data无疑会让你作为一名iOS开发者的能力更加全面。

测试

编写测试代码以验证你的主要应用代码按照预期工作的能力,是我列出的第三个扩展技能——测试。测试让我们确信我们的代码能够正确工作,更重要的是,即使在我们对其进行了重大更改之后,也能继续确保它的正确性——如果你更改了500行代码来实现一个新功能,并且所有测试都通过了,那么你就可以放心大胆地继续前进了。

那么,测试为何是重要的,又为何它是一个扩展技能而不是核心技能呢?原因有三:

  1. 历史原因:总的来说,iOS社区在测试方面做得很差。真的,非常非常糟糕——许多大型应用几乎没有任何测试,我遇到的许多资深iOS开发者几乎都以从未编写测试为荣。不,我也不理解为什么会这样。

  2. 相较于编写应用的乐趣,编写测试显得乏味:考虑到你可以使用苹果的工具和框架构建的所有令人印象深刻的东西,老实说,编写测试相比之下似乎就没有那么有趣了。我个人喜欢编写测试,就像我喜欢使用牙线一样,但我知道许多人,特别是在个人项目上,不会觉得这很刺激。

  3. 就业市场对技能的需求:当你申请工作时,掌握Swift和苹果的主要框架的知识,总是比掌握编写测试的知识更有益。公司更希望你知道如何使用SwiftUI、UIKit或其他重要技术,因为相比之下,测试作为一个话题要小得多——没有那么多东西需要学习。

因此,测试非常重要,测试很重要,我非常希望你能学会编写出色的测试代码。但这应该在你掌握构建应用的基础之后——在你取得一些成功,体验到你的应用在App Store上线的兴奋感之后,再去深入了解测试。

软件架构

讨论到的第四个扩展技能是软件架构,这实际上关乎我们如何编写代码。当你刚开始学习时,你会写出一些糟糕的代码——这么糟糕以至于可能违反了日内瓦公约。但这没关系,因为这就是学习的过程:你不会一开始就写出好代码——你通过长时间编写糟糕的代码逐渐变得优秀,就像勒布朗·詹姆斯并非生来就是冠军篮球运动员一样。

重点是,你要坚持不懈地改进你的代码,直到你学会如何做得更好。这就是软件架构的作用:研究经过验证的技术来构造你的代码,使其更易读、更易用、更易修改,以及长期更易维护。有时这些技术依赖于Swift的工作方式——你可以使用的语言特性来编写更好的代码。但还有更多适用于任何编程语言的技术,我们通常称之为设计模式。

作为这项技能的一部分,你应该开始学习的一个重要点是如何拆分你的代码。例如,如果你在应用中构建一个屏幕,你可能在这个屏幕上有一个登录按钮、一个图片画廊和一个朋友列表。但理想情况下,你应该将这些部分做成独立的组件——一个登录按钮组件、一个图片画廊组件和一个朋友列表组件——这样你就可以在应用的其他部分重用这些组件。

软件架构比我迄今为止提到的其他技能更加主观。对于其他技能,例如SwiftUI,你可能会想:“好吧,我知道如何完成X、Y和Z,所以我觉得我是一个不错的SwiftUI开发者。”软件架构是一个非常广泛的话题,老实说,很多时候没有明显的“正确”解决问题的方式,所以我认为评估它的最佳标准是:如果你回顾你六个月前、一年前或三年前等写的代码,你是否会想“哇,那些代码写得真糟糕!”

再次强调,编写糟糕的代码没关系,只要它能让你走上编写更好代码的道路。我确实会回顾我五年前写的代码并在某些地方感到难堪,因为我现在知道的比那时候多——这是一件好事。

多线程

讨论的最后一个扩展技能是多线程,简单来说,就是让你的代码同时做多件事情的实践。多线程可能会非常头疼,因为我们的大脑很难理解——当你的代码一次做一件事时,我们可以线性地思考,但当两三件事同时发生,可能还会彼此重叠时,这真的会让人大脑扭曲。

所以,虽然多线程作为一项扩展技能很棒,但你需要小心——你的目标应该是仅仅理解足够的概念和代码来使其良好工作,而不是过度深入。老实说,很多开发者认为多线程会立即让他们的代码运行速度提高三到四倍,在某些情况下确实会,但在许多其他情况下,你的代码实际上会运行得更慢,而且现在你还要处理所有额外的代码复杂性。

如果你不相信我,看看David Smith的话——他是苹果Swift团队的一员,之前花了多年时间工作在苹果框架的核心上:

我的具体建议是:你真的应该认真考虑不编写异步/并发代码。我知道这在2018年听起来很奇怪,但复杂性和性能的成本很高。

所以:学习一点Swift中多线程的工作方式,只是为了你可以看到你理解概念和实现,但尽量不要过度!

三  人们在尝试学习时常犯的错误

在这一点上,我已经概述了我认为你需要成为一名全职iOS开发者的所有核心和扩展技能。但我也想讨论一些学习过程中人们常犯的错误,因为我经常看到这些错误,并且我知道它们会让人们受挫。

仅仅给你一个想法,我的网站每月教授人们Swift有超过700,000个独特访问者,提供超过5,000,000个页面浏览量,所以我相当自信地说我知道人们常犯的错误。

这里有七个主要问题,我想按顺序覆盖它们:

  1. 记忆一切:尝试记住每一条语法和函数而不是理解概念和实践应用。

  2. 追逐新奇事物综合征(Shiny Object Syndrome):频繁跳跃到新的学习资源或项目上,而不是专注完成一个。

  3. 独狼学习:孤立自己学习,不寻求社区或同伴的帮助和反馈。

  4. 使用测试版软件:过早地采用最新的测试版工具和语言特性,可能导致学习路径上的不必要障碍。

  5. 依赖苹果的文档:过分依赖官方文档而不是探索更广泛的学习资源和社区知识。

  6. 迷失在Objective-C中:在学习Swift的同时,过分深入Objective-C,可能会导致不必要的混乱和挫败感。

  7. 批评其他语言:浪费时间批评其他编程语言,而不是专注于提高自己的技能和构建项目。

接下来,我们将逐一深入讨论每个问题,以帮助你避免这些常见的陷阱。

记忆一切

第一个也是迄今为止最常见的问题是试图记住所有东西——通读一个教程并认为必须把里面的每件事都记在心里。请务必不要这样做:这是灾难的食谱,会消耗掉你所有的意志力,直到你再也不想编程。

没有人能记住所有东西。甚至没有人能接近记住所有东西。即使你只考虑苹果发布的APIs,这些是我们用来构建应用的代码片段,那里肯定有超过十万个。如果你只限于应用构建的核心组件,你仍然可能面对几百个——所有这些都以非常精确的方式工作,需要大量的学习来利用。

相反,你学会了如何做新事物,然后立即忘记它。所以你查找并再次使用它,然后立即忘记它。所以你第三次查找并使用它,这次你大部分忘记了——但某些部分在你的大脑中留下了。这一过程一次又一次重复,每次你都需要参考教程或其他参考指南,直到最终真正的核心内容在你脑海中留下,到了不需要参考其他资料就能做到的程度。

如果你还不知道,遗忘是学习的关键组成部分。每次你忘记某样东西并重新学习它,它就会更深入、更彻底地进入你的大脑。每次你重新学习,你的大脑会与你学过的其他东西建立新的联系,帮助你更多地理解你试图做的事情的上下文。每次你重新学习,你都在向你的大脑明确表示,这个特定的主题值得保存在它的长期记忆中。

但如果你试图记住所有东西,你会遇到困难。相反,不要担心忘记东西:知道在哪里查找它们比记住特定的Swift代码来完成某件事更重要。当你忘记某件事并不得不重新学习时,我鼓励你把这看作是一件好事——那些信息在你第二次、第三次甚至第十次学习时会更深入地沉淀下来,所以你是在帮助你的大脑。

追逐新奇事物综合征

我看到的第二大问题是我称之为“追逐新奇事物综合症”(shiny object syndrome)——人们找到一个对他们有效的教程系列并开始取得一些进展,但在一两周后,他们看到了一些其他他们想要跟随的教程系列,然后转而去做那个。我收到过人们的邮件,他们说自己尝试了四五个甚至六个不同的系列,然后出于某种奇怪的原因发现自己什么都没学到。

这里的问题通常是,学习任何东西的大部分并不令人兴奋。这不一定是教师的错,这只是学习编程的一个事实——有些东西几乎不费什么力气就能得到很好的结果,而其他东西需要更多的时间来理解,不会产生花哨的结果,或者只是一个更大概念的一部分。

当你遇到这些陡峭的学习曲线时,“追逐新奇事物综合症”就变得很有力量——有这么多免费的教程,你可以随意跳转到任何一个并重新开始,你会立即回到游泳池的浅水区,覆盖你已经学过的更容易的部分。但除非原始课程选择了一个特别奇怪的主题来覆盖,你最终可能还是得学习它,你只是在延迟不可避免的事情。

因此,我并不是要求你总是抵制“追逐新奇事物综合症”,因为我知道这很难。相反,至少要意识到它:当你遇到问题时,试着寻求他人的帮助并坚持下去,而不是换到其他教程。

独狼学习

谈到寻求他人的帮助,我看到的第三个问题是人们在学习时采取“独狼”方式——他们认为自己完全有能力独立使用Swift构建iOS应用,不需要他人的帮助。

这种方法对极少数人有效,通常是那些具有其他编程语言或平台广泛经验的人。但对于绝大多数人来说,这样学习是一种糟糕的体验——每一个错误或误解都需要五倍的时间来解决,非常容易失去动力,而且你会错过从看到他人成功中获得的大量灵感。

如果你天生就倾向于这种“独狼”式的学习方式,让我鼓励你进行改变:分享你所学的东西,找到其他也在学习的人,并养成提问的习惯。你不仅会发现有一个非常棒的学习者社区将为你提供支持和鼓励,而且你还会被他们的工作所激励,并反过来激励他们。相信我,我已经看到这种情况发生了数百次,它是完全具有转变性的。

使用测试版软件

我看到的第四个大问题是人们坚持使用苹果开发工具的测试版(beta版本)。我理解:苹果每年都会推出新的iOS、新的macOS等,总是带来让我们尝试的激动人心的新东西。特别是了解到Swift有着长期变化的历史后,人们自然会想要学习最新最好的东西。

然而,当人们尝试使用测试版软件学习时,会遇到各种问题:

  • 教程尚未更新为测试版,所以按照它们的指导操作不总是可能的,或者可能无法正确工作。

  • 测试版通常有很多bug,尤其是那些为重大iOS更新发布的版本。

  • 苹果的测试版框架需要时间稳定,意味着在测试版1中工作的代码可能在测试版3中不存在。

所以,我知道学习新东西很令人兴奋,我也意识到你可能认为自己通过学习新特性在领先一步,但请相信我:这不值得。始终坚持使用苹果开发工具的最新公开发布版本,至少在你对它们感到舒适之前。

依赖苹果的文档

第五个大问题是人们在学习时过度依赖苹果的官方文档。苹果的开发者出版团队努力记录公司庞大的框架范围内的尽可能多的内容,但他们的主要工作是编写参考材料——当你试图使用他们的工具中的特定部分时会阅读的东西,而不是创建一个结构化的课程来帮助你学习构建iOS应用。

我已经数不清有多少次,人们问“我如何学习Swift?”只得到“只需阅读苹果的Swift参考指南。”这种方法对某些人确实有效,我知道这一点,因为它对我有效——当Swift首次发布时,我从头到尾阅读了它。然而,对大多数人来说,这有点像试图通过阅读字典来学习一门人类语言:它设计是为了涵盖语言中的一切,而不是教你最重要的部分以及如何应用它们。

因此,如果你在其他语言上有丰富的经验,你可能会发现阅读苹果的参考指南很有用,但如果你刚开始学习,那么可能几个月后再回来看它们会更好。

迷失在Objective-C中

第六个大问题是人们试图学习Objective-C。这是苹果在引入Swift之前的主要开发语言,尽管在一些旧代码库中你仍然可以找到Objective-C的痕迹,但现有的绝大多数代码现在都是Swift,几乎所有新代码也都是Swift。

在Swift出现之前,我花了多年时间编写Objective-C,实际上非常喜欢它,但与Swift相比,它有一个非常陡峭的学习曲线,并且缺少了Swift的大多数重要特性。我记得当苹果宣布iPhone SDK时我第一次尝试它,由于Objective-C与我之前见过的任何东西都完全不同,我感到非常震惊。

对于学习者来说,Objective-C和Swift几乎没有共同之处。是的,它们都共享苹果的同一套框架,但除非你真的计划在苹果工作——世界上唯一一个仍然大量生产Objective-C的公司——否则你应该完全放弃Objective-C,全力以赴地学习Swift。


批评其他语言

学习Swift时我看到的最后一个主要错误是轻视其他语言,好像它们在某种程度上不如Swift。常见的目标是JavaScript,但你也会看到人们批评Python、Java、Ruby、Go等等,这是为了什么呢?这不是一场竞赛,各位——这些语言不需要失败以便Swift能够胜利。

实际上,Swift和SwiftUI经常从其他语言和框架中汲取灵感——每当考虑新的语言特性时,社区都会查看Rust、Python、Haskell等其他语言中的类似实现,而SwiftUI本身就极大地受到了JavaScript中React框架的启发。所以,当我看到我们社区中的人说SwiftUI是无JavaScript的或类似的话时,我只能苦笑——没有什么比这更远离事实了。

四  教程和学习资源

现在来到大多数人最关心的部分:为了达到成为iOS开发者的目标,我认为你应该使用哪些实际资源来学习Swift、SwiftUI等?

市面上有很多资源,我非常欣赏Swift社区有这么广泛的人分享他们的经验。然而,在这里,我特别要推荐的是免费资源——那些你可以不花一分钱就能去学习构建出色应用的地方。

选择免费资源的原因有两个:

  1. 有些人认为Swift课程的价格越高,它就一定越好,因此他们最终支付了高昂的价格却没有获得足够的收益。

  2. 许多网站,如Udemy,依赖于销售大量低价课程,相信如果你不喜欢一个课程,你就会购买另一个。他们还有一个类似于Steam的商业模式——总是有销售活动,鼓励人们积累很多他们“总有一天”会学习的课程。

因此,我在这里只列出免费资源,因为我不希望你们掉入这些陷阱——不要为你的第一门课程花费上百美元,也不要因为你认为这会让你成为开发者而购买一打廉价课程。

对于想要学习Swift和SwiftUI的资源,我推荐以下几个免费的优质资源:

  • Apple的Swift和SwiftUI教程:Apple提供了一系列免费的教程,包括Swift编程语言指南和SwiftUI教程,这是学习的最佳起点。

  • Ray Wenderlich:虽然Ray Wenderlich网站上的一些内容是付费的,但也有很多免费教程,尤其是针对初学者的。

  • GitHub:GitHub上有大量的开源项目和代码示例,可以让你看到Swift和SwiftUI在实际项目中的应用。

  • YouTube:YouTube上有无数的免费视频教程,涵盖从基础到高级的所有主题。

记住,成为一名成功的iOS开发者不仅仅是学习语言和框架,还包括学习如何解决问题、如何设计软件架构,以及如何在项目中有效地使用这些工具。利用这些免费资源,你可以在没有经济负担的情况下开始或继续你的学习旅程。

系统化教程

对于系统化教程,苹果提供了两个主要资源可以帮助你。首先是它的Teaching Code网站,它列出了学习Swift从绝对基础到专业认证的学生和教师资源。他们的课程体系庞大,可能需要一点时间来找到最适合你的入门点,但一旦你找到了,你会发现有很多东西可以探索。

其次,苹果提供了一系列SwiftUI教程,指导你构建真实的应用程序。不过,这些教程不会教你Swift,所以你需要先遵循他们以Swift为中心的课程。

就像我之前说的,苹果还为Swift编程语言专门制作了一个指南,但很有可能它不适合你——它被设计为参考资料而不是结构化教程,因此阅读起来相当密集。

苹果的教程没有提供一种结构化的学习方式,这就是我的免费教程发挥作用的地方。我有成百上千篇关于Swift、SwiftUI、UIKit等的文章和视频,但有两个我特别想推荐:100天学SwiftUI和100天学Swift。

100天学SwiftUI课程通过文章、视频和互动测试教你学习Swift的基础知识,然后指导你使用SwiftUI构建20多个真实世界的应用——再次通过文章、视频和互动测试来确保你所学的东西能够吸收。每个教程都是在你已经学到的知识上构建的,因此学习曲线平缓。

如果你更愿意学习UIKit而不是SwiftUI,那就是原版的100天学Swift——这是一个类似的想法,但是为那些更喜欢那条路径的人使用UIKit而不是SwiftUI来构建。

YouTube教程

YouTube上有一些极好的视频教程,可以帮助你了解SwiftUI的基础知识,包括:

  • Chris Ching的视频,他带你从头开始构建一个老虎机游戏。

  • Mark Moeykens的视频,他解释了每个刚开始编程的人都应该学习的五个SwiftUI概念。

  • 以及我的视频,我同时教授Swift和SwiftUI,同时回答观众的问题。

尽管它们不是非常结构化,但还有其他网站提供高质量的Swift和SwiftUI教程,包括BLCKBIRDS、Ray Wenderlich、Donny Wals、Antoine van der Lee等——我真诚地鼓励大家访问各种资源,找到适合自己的内容。

应用程序学习

如果你更喜欢使用应用程序学习,有两个我推荐的,都是完全免费的。第一个是苹果的Swift Playgrounds应用,它让你可以直接在iPad或Mac上学习Swift。有许多面向儿童的互动课程,但也有一些更高级的课程可以进一步提高你的技能。

另一个应用是我自己制作的,叫做Unwrap。Unwrap适用于所有iPhone和iPad,让你通过视频、测试等学习、复习和练习Swift的基础知识。它覆盖了Swift的所有基础知识,非常适合与100天学SwiftUI课程一起使用。

寻找答案

最后,你需要学会在线找到答案。这可能意味着去Stack Overflow,但老实说我希望不是因为那里并不是一个特别愉快的地方。

相反,在Hacking with Swift论坛、你喜欢的Slack群组、iOS Dev Happy Hour会议、Twitter等地方提问——我们真的是一个非常热情、欢迎的社区,有很多人愿意帮助你实现你的目标。

五  如何连接到 iOS 开发社区

加入iOS开发社区是一个非常重要的话题,它可以帮助你遇见处于类似阶段的人,使你更有效地学习,并帮助你找到工作机会——总之是多方面的好处。

这涉及到了几个方面:

  1. 了解资讯和创意:了解在哪里可以找到最新的iOS开发资讯和有趣的创新想法是非常重要的。这包括跟踪技术博客、订阅相关的新闻简报,以及关注行业内的领袖和影响者。

  2. 社区交流:寻找和参与线上社区和论坛,如Stack Overflow、Reddit的iOS开发子版块、以及特定于Swift或iOS开发的Slack频道。这些平台可以让你与同行交流心得、分享技巧,以及解决编程难题。

  3. 参加活动和会议:参加线上或线下的会议和聚会,如WWDC(苹果全球开发者大会)和其他本地的iOS开发者聚会。这些活动不仅是学习新技术的好机会,也是结识行业内人士和未来合作伙伴的绝佳途径。

  4. 提问和求助:不要害怕在社区中提出问题或寻求帮助。iOS开发社区通常非常乐于助人,无论是解决具体的编程问题,还是提供职业发展的建议。

  5. 贡献回馈:随着你技能的增长,考虑向社区贡献自己的知识和经验。这可以通过回答其他人的问题、编写技术博文、参与开源项目或演讲在会议上来实现。

通过这些方式,你不仅能够提升自己的技能,还能建立起一个支持你职业发展的网络。记住,与社区的连接不仅仅是为了获得知识,更是为了建立关系和开拓机会。

在Twitter上可以关注哪些开发者

在Twitter上,有一些非常值得关注的iOS开发者,他们不仅分享自己的工作,还广泛地分享其他人的工作和有用的资源,提供关于特定主题的多种视角,以及分享有趣的想法和尝试的事物。以下是我推荐关注的10位Twitter用户:

  1. Sean Allen:他花费大量时间创建关于Swift和iOS开发的YouTube视频,同时也非常努力地传播其他人创作的新闻——他真的很擅长帮助每个人每周都发现新事物。

  2. Antoine van der Lee:他运营一个致力于iOS开发的网站https://www.avanderlee.com,同时也分享他在GitHub、新闻简报等地方找到的有用资源的链接。

  3. Novall Khan:她在苹果工作,但这并不妨碍她定期制作关于她正在做的事情、她正在学习的内容、她遇到的困难等的视频——她真的很鼓舞人心。

  4. Steve Troughton-Smith:他因早期在iOS上的探索工作而闻名,但你真的应该关注他是因为他分享的链接范围广泛,非常令人印象深刻。我个人喜欢他分享自己应用开发进度的方式,这样你可以看到它们从开始到结束的成长。

  5. Kaya Thomas:她是我们社区中最著名的独立开发者之一,被苹果特别提到的次数比我能记得的还要多。她不仅大量分享自己的工作和演讲,还分享她学习的书籍、她读过的文章等链接。

  6. Majid Jabrayilov:他写了一个关于Swift和SwiftUI的精彩博客,同时也是他人的不懈推广者——如果你在Twitter上关注他,你将会从广泛的来源那里获得一个又一个的想法。

  7. Donny Wals:他写了一个关于Swift的博客,最近还写了有关Combine和Core Data的书,但在Twitter上,他还鼓励人们分享他们正在做的工作。即使只是每周阅读那个话题线程,也会激发你尝试新事物的兴趣,所以你绝对应该关注Donny。

  8. Sommer Panage:她在苹果的无障碍团队工作,所以尽管她在可以说的事情上有所限制,但她确实在Twitter上发布了很多一流的技巧,每个人都可以用来构建更好的应用。

  9. Natascha Fadeeva:她写了一个关于Swift和iOS开发的博客,包括有关Core Data、面试问题等文章,但她也在Twitter上分享她在其他地方发现的东西。

  10. :我在Twitter上大量分享我在Swift、SwiftUI等方面的工作,但也尝试分享其他人制作的优秀文章、视频和应用——我认为这是我为社区做的最重要的事情之一。

关注这些人可以让你保持最新的行业动态,获取宝贵的学习资源,以及从他们的成功中找到灵感。

其他社区

当然,Twitter不是唯一可以跟上社区动态的地方——还有新闻简报、Slack群组、Zoom聚会、论坛、会议等等。为了不让你感到无聊,我在这里列出每种类型的一个资源:

  • 新闻简报:iOS Dev Weekly是你不会错过的选择。在我写这篇文章时,它刚刚过了500期,每周一期,我认为这足以告诉你它有多重要了。

  • Web论坛:我自己在Forums – Hacking with Swift 上托管了一个论坛——有很多类别可供选择,无论你的经验水平如何,都欢迎大家参与。相信我,你在这里提出初学者问题是非常受欢迎的!

  • 每月聚会:iOS Dev Happy Hour每个月通过Zoom群呼召开,超过300人参与,但真正有趣的是分组讨论室,你可以一次与6到8人聊天。这非常有趣,你会交到朋友。

  • 会议:由于冠状病毒大流行,参加会议变得复杂,但苹果的WWDC去年非常受欢迎,还有各种社区活动同时进行。我和一群朋友运营了一个GitHub仓库来帮助列出所有其他事件、文章等——看看吧!

  • Slack聊天:如果你喜欢在Slack上聊天,可以更快地获得答案,你可以加入免费的Hacking with Swift Slack群组,并加入Swift、SwiftUI、我的100天课程等频道之一。

通过这些资源,你可以更深入地融入iOS开发社区,无论是学习新技能、解决问题还是建立联系,这些都是非常宝贵的资源。

六  实现目标需要多长时间

这是我经常被问到的问题:从对Swift一无所知到能够获得入门级iOS开发者职位需要多长时间。

显然答案是“这取决于多种因素”,但如果就此打住,那就太过轻率了。让我以几种不同的方式来解答这个问题。

黄金规则:不要急于求成
首先,你不能同时匆忙地学习几门课程。还记得我之前说的关于“追逐新奇事物综合症”的吗?是的,许多人真的认为他们可以同时学习两门课程,然后每天急匆匆地学习四、五个或更多小时,最终仍然能够对所学内容有高质量的理解。

明确一点,我看到很多人尝试过这种方法,每次都失败了。每一次——这永远不会奏效,我看到人们说这是因为教程不好,或者因为Swift太难了,或者出于任何其他原因,而不是因为他们试图匆忙地学习某些复杂的东西。

就在今天,我收到了一封电子邮件,说:“嗨,Paul!如果我每天花四到五个小时学习Swift,我能多快完成?”这根本不是学习的方式——不论是学习Swift,学习弹钢琴,学习滑冰,或者其他任何事。

在某些地方学习Swift确实很难,学习构建应用需要大量的尝试和错误,大量的犯错,以及大量的误入歧途。这一切都没关系——不仅没关系,而且很棒!因为每次你尝试某样东西,每次你犯错,每次你走错路,你都会在途中学到一些东西,当你最终找到解决方案时,你会对它有更深刻的理解。

所以,简而言之就是不要急于求成——花时间,不要害怕探索偶然出现的旁支,不要害怕在项目上实验,也不要害怕回头重新学习你之前学过的东西。

你的背景

其次,你应该考虑在接触Swift之前你的背景是什么。你看,学习构建应用程序需要多种技能,如果你已经拥有大量现有知识,如版本控制、数据结构、算法等,那么与那些对计算机科学是新手同时又是Swift及其他苹果框架的新手相比,你已经有了真正的领先优势。

因此,我们可以考虑你现在可能处于几种不同的情况:

  • 如果你有计算机科学学位,你已经覆盖了许多启动Swift所需的CS基础知识。如变量、数组、循环、集合、函数、面向对象编程等都将在Swift中证明非常有用,以及你在数据结构和算法方面的所有工作。这可能会根据你学习的科目将你的学习路径缩短4-6个月,并且在申请许多公司的工作时也会给你带来优势。

  • 如果你没有计算机科学学位,但参加过编程训练营,你同样拥有启动Swift所需的许多基础知识。这在申请那些公司的工作时不会给你带来同样的优势,因为这些公司往往真的期望你有学位,以此作为他们任意要求清单上的一个勾选项,但这仍然可能会将你的学习路径缩短三到四个月。

  • 如果你没有计算机科学学位,也没有参加过训练营,但你一直在业余时间编码,这同样会缩短你的学习路径——大概两个月左右,这取决于你使用的语言或框架。

  • 如果你没有计算机科学学位,没有参加过训练营,也没有之前的编码经验?那么我会说你从零开始到获得一个入门级工作可能需要9到12个月。是的,这可能是你当前全职工作旁边的一整年的工作量,仅仅为了获得你作为iOS开发者的第一份工作。

总是需要一年吗?不。正如我所说,如果你有之前的经验,你可以将这个时间缩短1到6个月。如果你在两方面都取得了最好的数字——从零到入门级工作需要9个月,加上拥有计算机科学学位可以缩短6个月——那么这可能意味着你只需3个月就能被雇用,这是非常了不起的。

现在,你可能认为在三个月内获得你的第一份工作是不可能的,但这并非如此。事实上,我遇到过一个人,他在跟随我的100天学Swift课程时在未到第50天前就得到了一份工作——他们因为每天都投入努力,不到两个月就已经学到了足够多关于应用开发的知识。

因此,你不需要计算机科学学位,也不需要参加训练营,但你确实需要准备努力工作。

对自己宽容一点

在我们继续之前,我想说的第三件事是“它需要多长时间就花多长时间”。约翰·列侬有一句我非常喜欢的歌词:“生活就是当你忙于制定其他计划时发生的事情。”

如果你对学习有宏伟的计划,对你想要的工作有很大的抱负,那真的很棒。但有时你会感到疲倦,有时你会感到压力山大,有时你的屋顶开始漏水,或者你的狗需要去看兽医,或者你的孩子需要额外的帮助来完成家庭作业,等等,这就是生活。所以,如果你落后于你的学习计划,或者你发现自己错过了几天甚至几周的学习,请不要自责——只要你有恢复力,你最终会到达目的地的。

如果你非常努力地工作,并在50天后得到一份工作,那真的很棒——干得好!如果你花了500天,那也很棒,你应该同样感到自豪。哎呀,如果它花了你五年时间,我知道这可能不是你想要的,但最终结果是相同的,这才是最重要的。

记住,学习过程中的每个人都有自己的节奏和面临的挑战。重要的是保持积极的态度,珍惜每一步学习的过程,并且对自己的进展保持耐心。无论你的学习之旅多么漫长或多么曲折,坚持不懈和持续的努力最终会带来成功。


 

七  准备申请工作

如果你已经在iOS学习之路上走得更远,开始考虑获得那份首个入门级工作,我想向你推荐一大批我整理的资源,以帮助你准备应聘。

在我的网站上,你可以点击“职业生涯 > 开始这里”,或直接访问Swift Career Guide – build your iOS developer career today。在那里,你将找到一大批资源,无论你处于哪个阶段,都会对你有所帮助,所有这些资源都是免费的:

  • 互动技能复习,测试你对核心主题的了解。

  • 全球真实职场面试中使用的编码测试。

  • 超过200个常见面试问题,以及你可以回答它们的建议方式。

  • 涵盖如何找工作、如何在面试中表现最佳等主题的文章。

只需访问该网址,你就可以在一个地方找到所有这些及更多链接。

我还想推荐你观看Sean Allen的一系列关于Swift面试技巧的视频——他有一个完整的播放列表,你可以通过它处理如类与结构体、函数式编程、错误处理等单独讨论的视频。这些视频都不是很长,但每一个都旨在提供你在面试场景中表现出色所需的技能。

通过利用这些资源,你可以为即将到来的求职过程做好充分准备,无论是提升技能、熟悉面试过程,还是了解行业内的最佳实践,都至关重要。记得,准备工作越充分,你在求职过程中越能脱颖而出。

好的,我已经介绍了你需要的核心技能和扩展技能、学习时人们常犯的错误、你可以跟随的课程、如何连接到iOS社区,以及如何为你的工作面试做准备——这是大量的内容,我希望这对你有所帮助。

更重要的是,我希望我已经向你展示了外面有多少完全免费的资源。是的,我知道花一百多美元购买一门课程的诱惑很强,但放松——先开始行动,找到一些动力,也找到以适合你的方式教授Swift的人。然后,当你处于一个好的位置并感到准备就绪时,如果你愿意,继续并花一些钱。

祝你旅途顺利!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值