获得iOS开发人员工作需要了解的三件事

找工作很难。 如果您花了很多时间浏览iOS开发人员的职位,您会发现所需技能列表非常艰巨。

您真的需要五年经验吗? 了解TDD是否有意义? 他们列出的所有那些框架呢? 他们有多重要? 看来他们还希望有人将应用程序运送到App Store。 您也需要这样做吗?

在我的生活中,有一点我看了看所有的东西,耸了耸肩,决定不申请。 然后,我负责并在业余时间系统地学习了其中的每一项技能。

这是我作为独立的iOS开发人员工作多年后发现的。

大多数职位发布都是心愿单,而不是硬性要求

技能清单并不是一成不变的。 它可能甚至不是由开发人员编写的。 您会看到,大多数开发人员都太忙了,以至于不愿意撰写职位发布。 在其他许多相互竞争的优先事项之间,我们的时间几乎被拉长了。

通常是这样的。 人力资源部的一个人问开发人员,他们在新员工中想要什么技能。 然后,开发人员会喷出任何突然冒出来的东西。 人力资源人员会编译一个列表,将其添加到职位发布中,并提供给所有人查看。

这样我们才能得到听起来像这样的职位

“我们正在寻找一位资深Rockstar iOS Ninjaneer,他熟悉通知,委托,表视图,配置,堆栈视图,TDD,Stacy提到的一件事和变量。 除非您有Swift十年的工作经验,否则请不要申请。”

同时,回到现实世界,事实证明, 您只有三项核心技能才能成为iOS开发人员。 这是因为大多数iOS应用项目都是同一事物的不同风格。

要了解优秀员工的模样,您需要了解一般的iOS应用项目

无论是供企业使用还是供消费者使用,大多数人都希望应用程序能够与Internet通讯。 结果,典型的iOS应用仅是围绕某种Web服务的漂亮外壳。

如果您接受这个前提,这三个技能将是最优先的

  1. 对Web服务的理解以及编写与之交互的代码的能力。
  2. 对关注点和设计模式(例如MVC和MVVM)分离的理解,可以加强这种分离。
  3. 了解对象持久性及其如何在iOS应用中实现。

而已。 这实际上只是三个核心技能。 让我们更详细地了解它们。

对Web服务的理解

要成为一名高效的iOS开发人员,您需要编写与Interwebs交流的代码。 这意味着您需要了解Web服务,REST API,数据库,异步进程和JSON。 您编写的代码将与这些东西交互。

除了iOS应用程序外,有些工作可能还需要您构建Web服务,但这并不是很常见。 通常,他们为此有一个单独的人。

关键是您需要知道那些东西是什么。 您需要花费大量的时间来构建可与Web服务一起使用的应用程序。

如何获得经验

我通常不会提倡这一点,但是到底是什么。 只需联系一些公司,告诉他们您正在学习iOS开发,并询问他们是否对开发人员进行了代码测试。 代码测试将告诉您获得该工作所需的一切。

大多数iOS代码测试都要求您编写一些示例应用程序,以与其示例Web服务对话。 它们是学习Web服务如何工作的好方法,而无需自己构建Web服务。 如果您可以在其时间限制下通过其中一项测试,那么您已具备基本的Web服务技能。

它还有助于了解第三方框架,例如Alamofire。 许多开发人员使用Alamofire是因为它可以清理Web服务接口。

一如既往,Ray Wenderlich的网站是一个绝佳的资源。 他提供了大量有用的教程,其中包括一本教您如何编写与Web服务交互的代码的教程。

同时,我刚想到我应该设置某种示例代码测试。 似乎没有任何好的资源。 有Codility,但是该站点有点不对劲,因为没有一个测试代表您将实际为客户端构建的任何真实应用。

我们需要更现实和务实的想法。 我继续。

对关注点分离的理解

架构良好的应用程序与构建不良的应用程序之间存在很大的差异。 通常,将所有代码填充到单个View Controller中并不是一个好主意。 它会产生各种问题,并使您的代码无法长期维护。

这就是为什么我们要分开关注。 负责将数据加载到视图中的功能与从Internet下载数据的功能不同。 验证密码的事物与将密码提交给Web服务的事物是分开的。

我们将它们分开是因为这样做可以使我们更轻松地推理代码。 结果,我们变得更有生产力。

您可以将您的模式称为MVC,MVVM,ABUNCHOFUPPERCASELETTERS等。没关系。 一切都归结为在应用程序中不同种类的实体之间创建隔离墙的想法。

我们在谈论什么样的事情?

  1. 模型是应用程序中基本数据的模拟版本。 如果您的应用是纸牌游戏,则纸牌就是模型。 卡是具有西装和值(数字或国王,皇后,杰克)的简单实体。
  2. 视图与iOS SDK捆绑在一起。 它们用于显示模型的属性。 您可以制作纸牌视图,以在纸牌游戏应用中向用户显示纸牌的内容。
  3. 控制器管理视图和模型之间的交互。 纸牌游戏控制器可能会将纸牌的内容加载到纸牌视图中。
  4. MVVM设计模式中使用了视图模型 。 它们代表可以加载到视图中的面向用户的模型版本。 您可以将它们视为最终显示给用户的视图模型。

如何获得经验

我一直发现查看苹果构建应用程序的方式非常有用。 如果您有开发者帐户,则可以下载其示例项目。

看一下苹果使用的一些设计模式。 你能找到模型吗? 什么是控制器? 这些事物如何相互影响?

苹果的代码通常是一流的。 他们知道如何创建适当数量的实体,以保持代码的可读性和灵活性。 他们对何时将某些设计模式应用于其他设计模式有很好的认识。

有时您不需要视图模型。 有时可以将验证代码直接放在View Controller中。 学习其他人的代码,尤其是专家的代码,将使您了解如何使用这些设计模式。

了解对象持久性以及如何在iOS应用中实现

如果典型的iOS应用是围绕Web服务构建的外壳,那么确实有一种方法可以保存从该Web服务下载的某些数据,这确实有帮助。 当您的用户第二次启动您的应用程序时,该应用程序无需与您的Web服务联系即可获取较早下载的数据。

这就是对象持久化的目的。 这是保留数据以备将来使用的一种方式。

您可以使用各种工具来实现对象持久性。 用户默认值,领域和核心数据都是可行的选项,具体取决于您的需求。

要被聘为iOS开发人员,重要的是要知道这些是什么,以及对于给定的开发场景,为什么一个人可能比另一个人更好的选择。 大多数代码测试都要求您设置某种对象持久性,即使只是一些可以存储在“用户默认值”中的简单实体也是如此。

如何获得经验

看看Realm! 试用Ray Wenderlich的Realm教程。 继续学习,您将对实现对象持久性的一种特定方式有很好的了解。

我碰巧对Realm有偏见,因为它更易于使用。 对于希望将脚趾伸入对象持久性世界的初学者iOS开发人员而言,它是理想的选择。 它是许多主流公司使用的成熟的对象持久性工具。

掌握了Realm之后,请尝试使用Core Data。

核心数据的学习曲线比较陡峭,但是有明显的优势。 核心数据是一个Apple框架。 因此,如果Realm由于某种原因(在硅谷😉从未发生过)倒闭,那么您的应用程序将不会与无法维护的依赖项联系在一起。

我认为Realm不太可能破产,但是无论何时添加任何第三方代码,这始终是您要冒的风险。

不要因为一次测试失败而感到沮丧。

许多代码测试完全没有意义。 他们中的大多数甚至没有测试您的编码技能,而是测试您如何与他人交流。 问很多问题! 实际上可以保证,进行测试的人员不会在所有极端情况下都能想到。

这是另一个PSA。 永远不要花超过两个小时进行无偿代码测试。 以我的经验,八小时的代码测试不会测试更多的技能。 他们只是浪费您的时间。

有时,公司实际上并没有进行中的工作,因此他们尝试预先准备一小部分开发人员。 他们认为,如果可以免费对数百人进行代码测试,他们不妨去钓鱼,看看谁咬人。

当公司安排了真正的工作时,它们往往会变得更加认真。 那是他们聘请工程师阅读您的博客或查看您的Github的时候。 如果他们在送您进行代码测试之前与您进行了20多分钟的交谈,则您更有机会获得合法的机会。

重要的是要注意这些信号(或缺少这些信号)。 生命就是付出和付出。 您不能全力以赴。