65.9K
CodeProject 正在变化。 阅读更多。
Home

如何开始您的 iOS 高级开发人员职业生涯

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (8投票s)

2015 年 7 月 6 日

CPOL

17分钟阅读

viewsIcon

28698

一篇关于如何在 iOS 开发方面名列前茅的指南

互联网论坛上充斥着人们询问如何开始开发 iOS 应用。这是可以理解的,iOS 开发一方面既有趣又好玩,另一方面又复杂难学。当然,学习的复杂性并非 iOS 开发独有。软件开发是一门需要时间来完善的技艺,任何领域的顶尖开发者都在不断学习新东西。

这并不是为了劝退任何人。如果您投入时间和精力去学习和理解,掌握开发 iOS 应用绝对是一项有价值的技能。这对于个人满足感和职业发展机会来说都是如此。大公司一直在寻找技术精湛的 iOS 开发者。

我决定写这份指南,介绍成为一名技术精湛的 iOS 开发者需要具备哪些条件。请注意,这不是关于如何编写第一个 iOS 应用的指南,如果您需要,可以在互联网上找到很多这样的指南。尽管那些指南有助于您初步接触 iOS 开发,但我希望我的指南有所不同。我写这份指南是为了让想要学习 iOS 开发的人拥有更广阔的视野。我还想回答一些初学者反复提出的常见问题。

因此,这份指南不适合那些想绕过基础直接前进的人。这些人通常只会从网上复制代码,然后不断地调整,直到它勉强能工作,而并不真正理解为什么。如果您是这样的人,那么这份指南不适合您。这里不会有任何代码供您复制,所以您可以停止阅读了。

本指南涵盖了我和许多其他开发者花费数年时间才学会的许多概念。其中大多数概念适用于任何软件开发领域,但我将重点关注 iOS。

警告:您不可能在短时间内同时学会所有这些东西。虽然肯定有一些东西您应该先学,但您需要学习的内容取决于您选择的道路以及您设定的短期和长期目标。选择当下对您最有意义的下一个主题,并以此为基础填补您知识上的空白。这需要时间,但如果您有意识且有条理地学习,就能稳步进步,超越网上那些只会复制粘贴代码的开发者。

那么,让我们开始吧。

首先,请不要惊慌:您不会被淘汰

在深入探讨您需要了解的内容之前,我想消除许多接触 iOS 的人心中挥之不去的担忧。您可能会觉得需要快速学会所有东西,否则下一个大事件就会让您现在所学的一切都过时。不会有这样的事情。计算机科学和编程的基础已经数十年不变,未来也仍将如此。计算机的发展经历了大型机、个人电脑、互联网的诞生以及我们现在口袋里携带的现代移动设备,这仅仅是其中的一些例子。我们以很快的速度引入新技术,但编程和软件开发的基础始终保持不变。一旦您掌握了它们,您就能比现在更快地拥抱任何新技术。当 Apple 去年发布 Swift 时,我花了几小时阅读指南并将其应用于客户的项目。这并不是说我很特别。任何有经验的开发者都能做到这一点。但初学者不行,所以第一次需要花费一些时间。

iOS 开发的容易部分:技术细节

您需要一台 Mac 电脑来进行 iOS 开发。如果您没有,也许可以通过某种方式在 Windows 或 Linux 机器上运行 Mac OS X,但这并不容易。我建议您购买一台 Mac 电脑。不必是市面上最新的型号,您可以在 eBay 上找到一些不错的二手设备。只需确保它能够运行最新版本的 Mac OS X,因为这通常是最新版本 Xcode 的要求。

Xcode 是用于开发 iOS 应用的集成开发环境 (IDE)。您需要最新版本的原因是,iOS 开发会随着时间而发展,一些最新功能仅支持最新版本的 Xcode。您可以在 Mac App Store 中免费获取 Xcode,因此如果您还没有 Mac,电脑是您唯一的真正开销。您不需要 iOS 设备(iPhone 或 iPad),因为您可以在 Xcode 模拟器中运行您开发的应用程序。它可以在您的计算机上模拟任何 iOS 设备,因此对于学习来说已经足够了。我只使用模拟器就开发了我的第一个 iOS 应用。您只需要真实设备进行更严肃的应用开发和测试。这时您想将应用提交到 App Store 并确保您的应用在设备上运行良好,但仅为学习目的并非必需。

对于 iOS 开发,您应该先学习 Swift 还是 Objective-C?

您可能会认为,在 Swift 推出一年后,这个问题应该已经有了明确的答案。但似乎并非如此。许多初次接触 iOS 的人仍然反复提出这个问题。答案当然总是相互矛盾。所以,我在这里给出我的答案:学习 Swift。

既然您不会仅仅满足于答案本身,我将花更多时间解释原因。这似乎是许多人的一个拦路虎问题。

学习 Swift 的理由如下:

  • Swift 更易于学习。它的语法更友好,类似于许多其他语言。您还可以在 Swift Playgrounds 中运行代码,Playgrounds 是交互式的,可以增强学习过程。
  • Swift 是 Apple 新的首选。他们现在正在做的所有事情都使用 Swift。他们发布的所有新材料都使用 Swift。他们只为 Swift 添加新功能,而他们对 Objective-C 的改进只是为了更好地与 Swift 互操作。
  • Swift 是一种更强大的语言,并且正在为 iOS 编程定义新的范例。例如,Apple 在 WWDC 上有一个关于面向协议编程的演讲。如果您想保持在游戏的前沿,就想能够跟上这些新趋势。
  • 所有新资源都是用 Swift 编写的。您需要了解该语言才能理解它们。
  • 您无论如何都需要了解 Swift。但您在职业生涯中可能完全不需要了解 Objective-C。每一个新应用都将用 Swift 编写,您只需要了解 Objective-C 来处理那些在 Swift 出现之前就开始的项目。

尽管如此,其他人还是建议先学习 Objective-C,所以这是我的反驳意见:

  • 他们说您需要了解 Objective-C 才能处理现有项目。正如我所说,这是真的。但如果您现在正在学习 iOS,就不应该担心这个问题。请参阅上面的内容。
  • 他们说 Swift 是新的,仍在发展中。没错,但这并不构成问题,而且已经有大量的应用程序完全用 Swift 编写。新功能正在使语言变得更好。它们并没有完全改变语言。Xcode 有一个代码迁移工具,可以帮助采用新版本语言。
  • 他们说资源不够。Swift 发布时可能确实如此。但即使它还在测试阶段,人们就已经开始为它编写资源了。现在资源非常多,而且所有新资源都将用 Swift 编写。如果您会错过什么,那就是学习资源。
  • 他们说现有的框架都用 Objective-C 编写。这无关紧要。Swift 与 Objective-C 无缝互操作。您只有在想为框架贡献代码时才需要了解后者,而不是在使用它时。您可以使用 Swift 语法来使用 Objective-C 框架,所以它们内部是如何实现的没有区别。
  • 他们说学习 Objective-C 会更容易。我不知道这个说法从何而来。如果有的话,我总是听到人们抱怨 Objective-C 的语法很难学。一开始我也觉得很困惑。在我看来,没有任何东西能让 Objective-C 更容易学习。
  • 他们说它们可以完美地互操作。这是真的,而且也是支持 Swift 而不是 Objective-C 的一个论点。
  • 他们说了解 Objective-C 会有助于学习 Swift。可能吧。就像学习任何其他编程语言一样。Swift 中的一些概念来自 Objective-C。但这并不意味着您必须先用 Objective-C 来学习它们。您完全可以用 Swift 来学习它们。懂意大利语肯定有助于学习西班牙语,但如果您只想学西班牙语,没人会建议您先学意大利语。
  • 他们说 Swift 的大部分学习材料都假设您已经了解 Objective-C。不,一点也不接近真实情况。有些东西是为了方便 Objective-C 开发者过渡而编写的,但大部分材料并不假设您了解 Objective-C。
  • 他们说在处理 C 或 Objective-C 时,更容易可视化 CPU 指令和内存访问的情况。您为什么要关心这些呢?编程语言的整个目的就是摆脱这些,否则我们还在用机器指令编程。
  • 他们说 Objective-C 比 Swift 性能更高。不,Swift 的创建目标就是比 Objective-C 快得多。
  • 他们说 Objective-C 的语法没那么难。与此同时,每一个新人都抱怨 Objective-C 的语法。我用它用了好几年,确实,一旦有经验了,它也就不那么难了。俄语或德语,说了很多年也不难。但对于来自没有变格的语言的人来说,这并不容易学,对吧?

最后一点,当您学习 Swift 时,您也会同时学习 Objective-C。原因在于 Swift 从 Objective-C 中获得了很大的启发,并借鉴了它的许多想法和特性。这也是为什么这两种语言可以轻松互操作,并在同一项目中同时存在。

因此,通过学习 Swift,您也将学习到在 Objective-C 中使用的概念。Swift 还包含了一些 Objective-C 中没有的高级概念,这意味着您的知识将涵盖 Objective-C 所需的一切。所以,当您学习 Swift 时,您将同时学习 Objective-C。您唯一会缺少的是 Objective-C 的语法(可能有点令人烦恼),但只要您已经掌握了 Swift 中的所有概念,学习 Objective-C 就只需要几个小时或几天。

您可以在我的博客上找到一份 Swift 学习路线图,我还为需要学习 Objective-C 的开发者写了一篇 免费的 Objective-C 指南

成为一名技术精湛的 iOS 开发者,第一个方面是精通编程。

在决定好使用哪种语言后(其实这个问题已经解决了),让我们看看精通编程到底意味着什么。Swift 只是一种编程语言,而编程不仅仅是了解任何语言的特性。

如果您是第一次学习编程,我的建议是单独学习编程,而不是与 iOS 一起学习。编程和 iOS 都是庞大的领域,同时驾驭它们需要付出巨大的努力。这就是为什么互联网上充斥着那些在学习同时教授两者的教程或课程后感到困惑的人。最终,这些人两者都不懂,也无法独立编写应用程序。当然,您可以同时学习两者的某些概念。但请记住,这不是为了让您只能复制粘贴别人的代码。编程和特定平台(如 iOS)上的开发是两个独立的概念,您应该像对待它们一样对待它们。

那么,让我们看看精通编程到底意味着什么。成为一名优秀的程序员需要具备不同层次的知识。

第一层是编程基础。这当然包括语言的基本语法和结构,如流程控制、集合、循环、函数、类等。但这些只是工具。重要的是要理解如何思考问题并使用这些工具来解决它们。如果不知道何时使用什么,那么记住 Swift 的所有特性都不会有用。

第二层是面向对象编程。实际上,OOP 是一种帮助您组织代码的编程范式。这不是一种不同的编程模式,您仍然需要使用上面列出的 Swift 的基本编程结构。在这里,您需要更多地理解诸如封装、组合、继承、多态性等概念。并且不要忘记设计模式,它们是针对常见问题的通用可重用解决方案。这些将使您的代码大大改进。

第三层是算法和数据结构。仅掌握前两层也能走得很远,但这是真正技能娴熟的程序员所具备的。编程已经存在很长一段时间了。在此期间,人们开发了各种结构和方法来帮助解决越来越复杂的问题。在这里,您需要理解诸如递归、基本算法(如排序和二分搜索)以及基本数据结构(如堆栈、队列、哈希表、链表、树和图)等概念。当然还有处理所有这些结构的算法。

成为一名技术精湛的 iOS 开发者的第二个方面是了解 iOS 本身的基础知识。

正如我所说,iOS 开发是独立于编程的。iOS 是一个平台,因此它有自己的设计模式和技术,可以用来编写应用程序。每个软件平台都不同,对某些设计模式的处理方式也不同。因此,即使您已经是其他平台的开发者,您可能也需要重新审视您对某些常用模式的理解,因为在 iOS 中它们有不同的处理方式。

您应该首先关注的是 iOS 的基础知识。iOS 是一个庞大的平台,包含许多不同的技术来实现不同的功能。它们都很酷,但大多数您在开始时甚至在整个职业生涯中都不会需要。相反,如果您不先学习基础知识,就很难学习其他所有内容。

例如,如果您的应用程序不进行任何图像处理,您就不需要了解 Core Image。如果您不制作游戏,您就不需要了解 SpriteKit 或 GameplayKit。如果您的应用程序不需要地理位置或地图,您就不需要知道如何从 GPS 传感器获取数据或如何使用 MapKit。只选择您在正在开发的应用程序中需要的 iOS 的各个方面,其余的留待以后。如果您的基础知识扎实,那么您就可以根据需要学习 iOS 的任何其他部分。

以下是您在学习 iOS 基础知识时应该开始的地方的一个快速列表:

Xcode 和 Interface Builder。这些是您将用于制作 iOS 应用程序的必备工具。
模型-视图-控制器 (MVC) 模式和视图控制器。MVC 模式是 iOS 开发的核心。您将在您制作的每个应用程序中使用它。同样,视图控制器是 iOS 应用程序开发必需的一部分。
视图层次结构和 Auto Layout。屏幕上用户看到或交互的所有内容都属于视图层次结构,因此您需要了解它的工作原理。如今,用户界面是通过 Auto Layout 进行布局的,因此您也需要学习它。
容器和 Storyboards。容器负责实现界面从一个屏幕到下一个屏幕的流程,而 Storyboards 是您创建和组织此流程的方式。

我在这里更详细地写了关于这些内容。

我在这里还写了一篇关于此主题更广泛的指南。

第三个方面是围绕 iOS 开发的内容。

这比我上面列出的前两个方面不太重要,因为这些是更通用的计算机科学知识。尽管如此,如果您真的想在您的领域处于顶峰,您就需要扩展您的知识以涵盖这些主题。同样,这取决于您在开发的应用程序中需要做什么,因此请朝对您最有意义的方向发展。

例如,如果您在应用程序中调用 Web API,了解互联网的工作原理会很有帮助。这可能包括 HTTP 协议、DNS 系统、路由器或服务器是什么、REST API 通常是如何设计的、CDN 是什么等等概念。您可能还需要了解一些低级网络概念,例如 TCP/IP 堆栈。

另一个有用的主题可能是数据库的工作原理或如何编写 SQL 查询,操作系统的工作原理。这并不是说您需要实现其中的任何一个,作为一名 iOS 开发者,您很可能不会。尽管如此,我在大学里学习了这些概念,并且它们在我的职业生涯中多次派上用场。即使您不必直接处理其中的任何一个方面,您也可能会发现自己与实际负责这些方面的人进行讨论。如果您需要与后端开发人员合作定义您的应用程序需要交互的 API,那么了解另一方的运作方式会很有用。

同样,在我看来,这些是最不重要的方面,您可能只需要了解它们的皮毛。毕竟,您不是后端开发人员或系统管理员。但这些领域的一点知识可以为您提供其他开发者所没有的优势。

最后,一个奖励

计算机科学是一个广阔的领域,软件开发也是如此。还有许多很酷的东西您可能想学习,例如人工智能、机器学习、自然语言处理、神经网络、图像识别等。只有在处理最复杂的事情时才需要它们。我在大学里学习了它们,并且在我作为软件开发者的职业生涯中从未用过它们。但它们确实是有趣的主题,并且在一些最前沿的产品中是必需的。

祝您职业生涯好运,再次强调,不要惊慌。我和许多其他人花了数年时间才学会所有这些主题,但您可以从基础开始,逐步前进。我认为人们常常低估了掌握基础知识能带您走多远。良好的基础已经能让您开始开发应用程序了。您不必一开始就知道所有东西。选择对您路径最有意义的下一步,并稳步前进。您会成功的。

如果您喜欢这篇文章,并想了解更多关于 iOS 开发的信息,请访问我的 网站,浏览一下并加入我的邮件列表。我定期分享关于 iOS 开发基础知识的免费材料,以及独家材料,例如仅供我订阅者使用的付费课程。

© . All rights reserved.