如何开启优秀iOS开发者的事业

背景

标题:How to start your career as a highly skilled iOS developer

作者:Matteo Manferdini

介绍:作者是一位自由iOS开发者,他在他的个人网站http://matteomanferdini.com上传授iOS开发经验。

原文链接:http://www.codeproject.com/Articles/1007045/How-to-start-your-career-as-a-highly-skilled-iOS-d

说明

由于本人英语水平有限,翻译中可能会存在不少错误,欢迎指出。另外有些句子直接翻译成中文我感觉比较别扭,就按照我理解的意思来翻译。建议结合英文原文来进行阅读。

翻译

Internet forums are full of people asking where to start in developing iOS apps. It is understandable, iOS development is both interesting and fun on one side, and complex to learn on the other. Being complex to learn is not specific only to iOS development of course. Software development is a craft that takes time to perfect and the top developers in any field are still learning new things.
在互联网论坛上到处可以看到有人问如何开始做一个iOS应用。这是非常容易理解的,iOS开发一方面非常非常有趣,但另一方面学起来却很复杂。当然,学起来复杂这不是iOS开发特有的。软件开发是一门非常耗时的技艺,在很多已经是领域顶尖的开发者仍然在学习新东西。

This is not to discourage anyone. If you put the time into it and want to learn and understand, making iOS apps is definitely a rewarding skill to have. This is true both for personal satisfaction and for the career opportunities that will be available to you. Big companies are always looking for skilled iOS developers.
这不是在打击任何人。如果你花时间在这上面并且渴望学习、理解与制作iOS应用,是一门值得拥有的技能。不管对于你个人心理满足还是对于职业机会来说这都是对你有好处的。大公司总是在寻找具体iOS开发技能的人才。

I decided to write this guide on what it takes to become a skilled iOS developer. Beware that this is not a guide on how to write your first iOS app, you can find plenty of them on the internet if you are looking for one. Although those are helpful to dip your feet in iOS development, I want this guide to be different. I wrote this to give people who want to learn iOS development a broader perspective. I also want to answer some of the common questions that get asked again and again when someone starts learning.
我决定写下关于成为成为技术熟练的iOS程序的指南。注意这不是一篇指导你如何编写你的第一个iOS应用的指南,如果你是在寻找这类文章,你可以在因特网上找到很多。尽管这有助于使你进入iOS开发的路,我希望这篇指南能做点不一样的事情。我写下这篇文章希望可以给予那些想学习iOS开发的人更广泛的概念。同时我还想回答一些在被刚开始学习的人反复问到的一些相同的问题。

So this is not a guide for those trying to jump ahead ignoring the fundamentals. These people usually end up just copying and pasting code from the web, hammering it until it sort of does what they want, without really understanding why. If you are like that, this guide is not for you. There will not be any code here for you to copy, so you can stop reading now.
因此这篇指南并不是为了那些希望跑基本原理的那部份人。这些人通常会从网上复制粘贴代码,而不是真正地去理解这些代码,他们会在搜索不到他们想要的代码时感到受挫。如果你想这样子,这篇指南不适合你,这篇指南没有任何的代码给你复制,因此你可以停止阅读了。

This guide spans over many concepts that took me and many other developers years to learn. Most of these are going to apply to any software development field, but I will focus on iOS here.
这篇指南会涉及到很多概念,这些概念需要包括我在内的许多开发者花费数年的时间来学习。这些概念可以应用在任意的软件开发领域,但是我会聚焦于iOS。

A warning: you cannot learn all these things at the same time and in a short period of time. Although there are definitely some things you should learn first, what you need to learn depends on the path you are following and both the short and long term goals you have. Pick the next topic that makes sense for you at the moment and proceed from there to fill the gaps in your knowledge. It will take time, but if you are deliberate and methodical, you can steadily improve and surpass the troves of copy and paste developers present on the web.
一个提示:你不可能在同一时间或者在一段短时间内把这些知识学习完。尽管有一些知识是你必须首先学的,但大部分你学习的内容依赖于你执行的短期或者长期目标。选择适合你的下一个主题以填补你知识上的空白。这会花费大量的时间,但是如果你仔细思考并有条不紊地学习,你可以稳定地提升并且超越那些只会从网上进行复制粘贴的开发者。

So let’s dive in.
让我们开始。

First of all, do not panic: you are not going to become obsolete 首先,不要惊慌:你并没有准备被淘汰

Before entering the details of what you need to know, I want to dispel a worry that clouds the mind of many people approaching iOS. You might feel that you need to learn everything quickly, or the next big thing will make everything you are learning now obsolete. There is not going to be such a thing. The foundations of computer science and programming have been the same for decades and still will be for decades to come. The history of computers went through big mainframes, personal computers, the creation of the internet and the modern mobile devices we carry in our pockets, just to name a few. We introduce new technologies at a fast pace, but the foundations of programming and software development always stay the same. Once you have a good grasp of them, you are able to embrace any new technology much faster than you are now. When Apple released Swift last year, it took me a couple of hours to read the guide and start using it in a project for a client of mine. That is not to say I am special. Any experienced developer is able to do this. But you are not when you are starting, so the first time it will take time.
在进入你需要知道的内容的具体细节时,我想先消除萦绕在大部分开发者心头上的恐惧。你可能会觉得你需要很快地学习每一样内容或者是下一块大的内容会成为你现在学习的所有东西的障碍。这种事情并不会发生。计算机科学和编程的基本理论已经保持几十年没有改变,并且在未来几十年内也不会改变。计算机的历史经历了大型主机,个人计算机,因特网的创造以及能放进我们口袋中的现代手持设备,这里仅仅只是罗列了一些名词。我会在快速地引入新的技术,但是编程和软件开发的基本理论总是保持不变的。一旦你掌握了这其中的一样,你就可以很快速地掌握另一项技术。当苹果去年发布Swift时,我只花了几个小时的时间去阅读指南就开始使用它来开发我头上的一个客户端项目了。这并不是说我有多么特别。任何一个有经验的开发者都可以做到。但不是说你在刚开始时就可以,因此第一次总是特别地花费时间。

The easy part of iOS development: the technicalities iOS开发简单部分:技术的使用

You need a Mac computer for iOS development. If you don't have one, it might be possible to run Mac OS X on a Windows or Linux machine somehow, but that won't be easy. I recommend you to get a Mac computer. It does not need to be the newest on the market, you can find some good second hand machine on Ebay. Just make sure it can run the latest version of Mac OS X, since that is usually a requirement for the latest version of Xcode.
你需要一台Mac计算机来进行iOS开发。如果你没有,那你可以通过一些办法在Windows或者Linux机器上运行Mac OS X,但这并不容易。我建议你还是买一台Mac计算机。你不需要购买市场上最新款的机器,可以考虑在Ebay上购买二手的。只需要确保该设备可以运行最新版的Mac OS X,因为最新版的Xcode都会要求运行在最新版的Mac OS X上。

Xcode is the integrated development environment (IDE) used to make iOS apps. The reason you need its latest version is because iOS development evolves with time and some of the latest features are only supported by the latest version of Xcode. You can get Xcode for free in the Mac App Store, so the computer is the only real expense you need to make if you do not own a Mac already. You do not need an iOS device though (iPhone or iPad), since you will be able to run the apps you make in the Xcode simulator. This simulates any iOS device on your computer, so it is enough for learning. I developed my first iOS app only using the simulator. You will need a real device only for more serious app development and testing. This is when you want to submit your app to the App Store and ensure that your app works well on a device, but it is not needed just for learning.
Xcode是用来制作iOS的集成开发环境。之所以需要最新版本的Xcode,是因为随着时间推移,iOS开发的最新特性只有最新版本的Xcode支持。你可以在Mac App Store上免费获得Xcode,因此如果你没有Mac的话你的实际花费就是一台Mac。你还不需要一台iOS设备(iPhone或者iPad),因为你可以在Xcode模拟器上运行你制作的app。它在你的计算机上模拟了所有的iOS设备,因此已经足够用来学习。我的第一个iOS应用就是只通过模拟器就开发出来。在你需要进行更加正式的app开发和测试时才会需要一台真实设备。这会发生在提交你的app到App Store前需要确保应用在设备上能正常工作,但只是学习还用不上。

Should you learn Swift or Objective-C first for iOS development? 你应用先学Swift还是Objective-C来进行iOS开发?

You would think that one year after the introduction of Swift the answer to this question should be decided. That seems not to be true. Many people who approach iOS for the first time keep asking this same question again and again. The answers are of course always contradicting each other. So I am going to give you my answer here: learn Swift.
你可能会想,一年后在介绍Swift以及回答该问题的答案是明确的。但这似乎不是这样。很多刚刚开始进入iOS开发的人都会反复地询问这个问题。而答案当然总是互相矛盾的。因此在这里我将给出我的答案:学习Swift。

Since you are not going to be happy with just the answer alone, I am going to spend some more time on the reasons of this. This seems to be a blocking question for many.
你大概会对我这种只单独给出一个答案的行为感到不满意,因此接下来我将给出我的理由。这似乎对很多人来说会成为一个大块的(blocking)问题。

These are the reasons to learn Swift first:
以下是先学习Swift的理由:

  • Swift is easier to learn. It has a friendlier syntax, like the one of many other languages. You can also run code in Swift playgrounds, which are interactive and enhance the learning process.

  • Swift is the new preferred choice from Apple. Everything they are doing now is in Swift. All the new material they release is in Swift. They are bringing new features to Swift only, while the improvements they make to Objective-C are only to interoperate better with Swift.

  • Swift is a more powerful language and is defining new paradigms for iOS programming. An example of this is a recent talk about protocol oriented programming given by Apple at WWDC You want to be able to follow these new trends if you want to stay on top of your game.

  • Every new resource is written in Swift. You want to know the language to be able to understand them.

  • You will need to know Swift anyway. But you might not need to learn Objective-C at all in your career. Every new app is going to be written in Swift and you need to know Objective-C only to work on projects that were started before Swift existed.

  • Swift更容易学习。它具有许多其它语言的友好的语法。你还可以在Swift playgrounds上运行代码,它可以进行交互和强化 学习过程。

  • Swift是苹果的首选。目前他们在做的工作都使用Swift。所有他们最新发布的材料使用的都是Swift。他们只会给Swift带来新特性,所有在Objective-C上的提升都是为了更好地与Swift进行交互。

  • Swift是一门更加强大的语言并且它定义了iOS开发的新范例。一个例子就是最近苹果在WWDC上展示的面向协议编程。如果你想在这个领域保持领先,你应该跟随这些新的趋势。

  • 所有的新资源都是用Swift写的。理解这些资源需要你先理解这门语言。

  • 你总是需要了解Swift。在你的事业中你可能根本不需要学习Objective-C。每一个新的app都将使用Swift,你只需要在研究Swift存在之前的项目时才会需要了解Objective-C。

Still others advise to learn Objective-C first, so these are my counter-arguments:
但是仍然会有其它意见表示应该先学Objective-C,以下是我对它们的反驳意见:

  • They say you need to know Objective-C to work on existing projects. As I said, this is true. But this is something you should not be concerned about if you are learning iOS now. See above.

  • They say Swift is new and still evolving. True, but that does not pose a problem and plenty of apps have been written already only in Swift. The new features are making the language better. They are not changing the language completely. Xcode has a code migrator that helps adopt every new version of the language.

  • They say there are not enough resources. That might have been true when Swift was released. But even while it was still in beta, people where already writing resources for it. Now there are plenty and every new resource is going to be written in Swift. If you are going to miss anything is not learning resources.

  • They say that existing frameworks are all written in Objective-C. This does not matter. Swift interoperates seamlessly with Objective-C. You need to know the latter only if you want to contribute writing code for a framework, not if you want to use it. You can use Objective-C frameworks using Swift syntax, so how they are made internally makes no difference.

  • They say learning Objective-C will be easier. I do not know where this comes from. If anything, I always hear people complaining that the syntax makes Objective-C hard to learn. At the beginning I found it confusing too. There is nothing in my opinion that makes Objective-C easier to learn.

  • They say they interoperate perfectly. Which is true and also an argument in favor of Swift and not Objective-C.

  • They say knowing Objective-C will help learning Swift. Probably. As knowing any other programming language would. Some concepts in Swift come from Objective-C. That does not mean you have to learn them in Objective-C first. You can perfectly learn them in Swift. Knowing Italian definitely helps you in learning Spanish, but nobody advises you to learn it first if all you want is to learn Spanish.

  • They say that most of the learning materials for Swift assume you know Objective-c already. Nope. Not even close to true. Some things have been written to ease the transition for Objective-C developers, but most of the material does not assume you know Objective-C

  • They say it is easier to visualize what is happening in terms of CPU instructions and memory accesses when working in C or Objective-C. And why should you care about this exactly? The whole point of programming languages is to move away from that, or we would be still programming using machine instructions.

  • They say Objective-C is going to be more performant than Swift. Nope. Swift has been made with the specific goal of being much faster than Objective-C.

  • They say Objective-C syntax is not so hard. In the meanwhile every newcomer ever has complained about Objective-C syntax. I have used it for years, and true, it is not so hard when you have experience.

  • 有人说你需要了解Objective-C以便你可以在已经存在的项目上进行工作。这确实如此。但是如果你现在正在学习iOS这不是你应该关心的事情。见上面的内容。

  • 有人说Swift还是新技术并且仍然在发展中。确实如此,但这并不是一个问题,并且大量的应用已经只用Swift来编写了。新特性会使一门语言更加完善。他们不会使得语言更加复杂。Xcode有一个代码移植方案帮忙项目适配语言的每一个版本。

  • 有人说资源还不够。当Swift刚刚发布时情况确实 是这样。但在它还处于测试阶段时,就已经有人开始为它编写资源了。现在已经有大量的资源并且每一个准备编写的新资源都是使用Swift。这些学习资源不应该是你要错过的。

  • 有人说现存的框架都是用Objective-C写的。这并没有关系。Swift可以与Objective-C进行无缝交互。只有当你需要给框架贡献代码时才需要更加深入地了解它,如果仅仅只是使用,这并不需要。你可以使用Swift语法来调用Objective-C框架,它们内部是如何编写的都没有任何区别。

  • 有人说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开发者过渡到Swift的,但大部分的材料都不会假定你已经了解Objective-C。

  • 有人说使用C或者Objective-C更容易理解在CPU指令以及内存访问中发生了什么。但你为什么要关心这些?编程语言的本质就是为了抽离这些,否则我们现在还在用机器语言来编程。

  • 有人说Objective-C的性能比Swift更好。不,Swift的设计目标就是要比Objective-C更快。

  • 有人说Objective-C的语法没有那么难。但同时每一个新手都会抱怨Objective-C语法的复杂。我已经用它几年了,事实是,当你有了经验后确实没有那么难。

As a closing argument, while you will be learning Swift you will be learning Objective-C along with it. The reason for this is that Swift got a big inspiration from Objective-C, and borrowed many ideas and features from it. That is also why the two languages can interoperate easily and coexist in the same project at the same time.
最后的反驳是,当你在学习Swift时,你实际上也顺带地学习了Objective-C。理由是Swift的设计灵感是来源于Objective-C,并且从中借助了很多主意和特性。这也是为什么这两门语言可以非常容易地交互并且同时在同一个项目中共存。

So, by learning Swift you will be learning concepts you use in Objective-C as well. Swift includes also some more advanced concepts that Objective-C does not include, which means your knowledge will cover all you need for Objective-C. So while you are learning Swift you will be learning Objective-C at the same time. The only thing you will be missing is the syntax of Objective-C (which can be a bit annoying), but provided you know all the concepts in Swift already, learning Objective-C will be a matter of hours or days.
因此,通过学习Swift你也会学习到你在使用Objective-C时的概念。Swift还有一些高级概念是Objective-C所不具备的,这意味着你的知识会覆盖到所有你需要了解的Objective-C的内容。所以你在学习Swift的同时你也在学习Objective-C。唯一你没有学习到的是Objective-C的语法,这可能会有些麻烦,但假如你已经知道Objecctive-C的所有概念,学习Objective-C不过是数天甚至是数小时的事情。

You can find a Swift learning roadmap on my blog and I also wrote a free Objective-C guide for developers for when you will need to learn it.
你可以在我的博客上找到Swift的学习路线,并且我还写了一份免费的Objective-C指南以便于当你需要学习到它时可以用上。

The first aspect of being an highly skilled iOS developer is knowing programming well. 成为一名技能熟练的iOS开发者的第一个方面是非常了解编程。

With the decision on which language to use out of the window, let’s see what knowing programming really means. Swift is only a programming language and programming is more than just knowing the features of any language.
不再去考虑使用哪一种语言,我们来了解一下编程的真正含义。Swift只是一门编程语言,而编程的含义不仅仅在于了解语言的特性。

If you are learning programming for the first time, my advice is to learn it separately from iOS. Programming and iOS are two huge beasts, and it takes a lot of effort to tame them both at the same time. This is why the internet is so full of people who are confused after following tutorials or courses that teach both at the same time. At the end these people do not understand either and cannot write apps on their own. Sure, you can pick some concepts of both sides when you learn them both at the same time. But remember this is not a guide to end up only being able to copy and paste code from others. Programming and development on a specific platform like iOS are two separate concepts and you should treat them as such.
如果你是第一次学习编程,我建议你把编程和iOS分开来学。编程和iOS是两个大巨兽,你需要花很大的努力才能在同一时间驯服他们。这就是为什么网络上那么多跟随着两样都同时讲解的教程学习时会感到困惑的原因。最后,这些人两者都不理解并且无法独立写app。当然,当你同时学习时你可以选择一些两者都有的概念来学习。但请记住这并不是一篇教你如何最后仅仅会从其它地方复制粘贴代码的教程。编程和在一个如iOS的特定平台上开发是两个不同的概念,而你应该区别对待它们。

So let’s see what it really means to know programming. There are different layers of knowledge you need to be a good programmer.
所以,让我们来看下编程的真正意思是什么。成为一名好的程序员你需要有几层不同的知识。

The first layer comprises the basics of programming. This includes of course the basic syntax and constructs of the language, like flow control, collections, loops, functions, classes etc. But these are only tools. It is important to understand how to reason about problems and solve them using these tools. Remembering every feature of Swift is not going to be useful if you do not know what to use and when.
第一层由编程知识组成。这包括语言最基本的语法和结构,如流程控制、集合、循环、函数、类等等。但这些仅仅是工具。最重要的是理解如何思考问题以及使用这些工具解决这些问题。记住Swift的每一个细节对于你并没有什么作用,如果你并不知道该怎么样使用以及在何时使用它。

The second layer is object oriented programming. Practically speaking OOP is a programming paradigm that helps you to organize your code. This is not a different mode of programming and you will still need to use the basic programming constructs of Swift listed above. What you need to understand more here are concepts like encapsulation, composition, inheritance, polymorphism etc. And do not forget design patterns, which are general reusable solutions to a commonly occurring problems. These will make your code much better.
第二层是面向对象的编程。通常而言的OOP是一种编程范式,它可以帮忙你组织你的代码。这不是一个不同的编程模式,你仍然需要使用下面列出来的Swift的基础编程结构。在这层你需要的是对于封装、组合、继承、多态等概念有更深的理解。设计模式可以给你一个通过的问题生成一个可复用的解决方案,不要忘记使用它。这会使得你的代码变得更好。

The third layer comprises algorithms and data structures. You can go along way only knowing the first two, but this is what makes a truly skilled programmer. Programming has existed for a relatively long time now. During this time constructs and methods that have been developed to help solve problems that are more and more complex. What you need to understand here are concepts like recursion, basic algorithms like sorting and binary search, and basic data structures like stacks, queues, hash tables, linked lists, trees and graphs. Plus of course the algorithms to handle all these structures.
第三层由算法和数据结构组成。你可以只知道以上两层,但是掌握这一层可以使你成为真正技艺高超的程序员。编程已经存在了相对很长一个时间。在这段时间里,被开发出来解决问题的结果和方法已经变得越来越复杂。在这里你需要理解是递归的概念、排序和二分搜索等基本算法以及如栈、列队、哈希表、链表、树和图等基本数据结构以及用来处理这些结构的算法。

The second aspect of being an highly skilled iOS developer is knowing the foundations of iOS itself.成为一名技能熟练的iOS开发者的第二个方面是要了解iOS的基本原理

As I said, iOS development is a separate topic from programming. iOS is a platform, and as such it has its own design pattern and technologies that make possible to write apps. Every software platform is different and treats certain design patterns differently. So even if you are already a developer on some other platform, you probably will have to revisit your knowledge of some common patterns that in iOS are handled differently.
正如我所说的,iOS开发是一个与编程分开的话题。iOS是一个平台,它有自己的设计模式以及技术来完成它的应用。每一个软件平台都有所不同并且使用不同的方式来处理设计模式。因此,即便你已经是其它平台的开发者,你还是需要重新学习那些在iOS上用不同的处理方式的通用设计模式。

The first thing you should focus on is the foundations of iOS. iOS is a big platform and includes many different technologies to achieve different things. They are all cool, but most of them you will not need at the start or even in your entire career. Conversely, if you do not learn the foundations first, it will be hard to learn all the rest.
你应该注意的第一件事是iOS的基本原理。iOS是一个大平台,它有许多不同的技术来完成不同的事情。他们都很酷,但是大部分是在你整个职业生涯中都不需要从其源头开始了解的。相应的,如果你不先学习基本原理,剩下的其它内容都会变得难以学习。

For example, if your app does not do any image processing, you do not need to know Core Image. If you are not making a game, you do not need to know SpriteKit or GameplayKit. If your app does not need geolocation or maps, you do not need to know how to get data from the GPS sensor or how to use MapKit. Pick only the aspects of iOS that you need in the apps you are working on and leave the rest for later. If your knowledge of the foundations is good, you will be able to pick any other part of iOS as you will need.
例如,如果你的应用不用做任何的图像处理,你不需要了解Core Image。如果你不是开发一款游戏,你不需要了解SpriteKit或者GameplayKit。如果你的应用不需要用到地理位置和地图,你不需要知道如何 从GPS传感器中获取数据或者是如何使用MapKit。先选择那些你需要在你正在开发的应用上要使用的知识,而剩下的那些可以放到后台。如果你对基本原理了解深入,你可以很快学会你需要使用的任意iOS的其它模块。

This is a quick list of where you should start is studying the foundations of iOS.
以下是一个你应该开始学习的iOS基本原理的快速列表。

Xcode and Interface Buider. These are the necessary tools you will be using to make iOS apps.
The Model-View-Controller pattern and View controllers. The MVC pattern is a the center of iOS development. You will need it in every app you will make. Similarly, view controller are a required part of iOS app development.
The view hierarchy and Auto Layout. Everything that is on screen and the user sees or interacts with is part of the view hierarchy, so you need to know how it works. Nowadays user interfaces are laid out through Auto Layout, so you need to learn that too.
Containers and storyboards. Containers are what make the flow of the interface from one screen to the next happen, and storyboards are the way you create and organize this flow.
Xcode和Interface Buider。这是开发iOS应用的必备工具。
模型-视图-控制者(MVC)模式以及视图控制器。MVC模式是iOS开发的核心。在每一个你开发的应用中都需要用到它。同样的,视图控制器也是iOS应用开发中的一个必备部分。
视图层次和自动布局。每一个在屏幕上的,用户看到的以及可以交互的都是视图导致的一部分,因此你需要了解它是如何工作的。现在用户界面通过自动布局来处理,因此你也需要了解它们。
容器和故事板。容器可以控制从一个屏幕到下一个屏幕发生什么,而故事版则是你创建和组织流程的途径。

I have written about these in more detail here.
I also wrote a more extensive guide on this topic here.

The third aspect is what surrounds iOS development.第三个方面是iOS开发的周边内容。

This is less important than the first two aspect I listed above since this is more generic computer science knowledge. Still, if you really want to be at the top of your game, you need to expand your knowledge to cover these topics as well. Again, it all depends on what you need to do in the apps you are developing, so proceed in the direction that makes the most sense for you.
由于这是更通用的计算机科学的知识,它并没有我以上列的两点重要。但是,如果你想成为这个领域的顶尖人物,我还是需要扩宽你的知识面覆盖这些话题。再一次说明,这些都取决于你正在开发的应用需要什么,因此寻找对你来说最有意义的方向去学习。

For example, if you are calling a web API in your app, it helps to know how the internet works. This might include concepts like the HTTP protocol, the DNS system, what a router or a server are, how a REST API is usually designed, what a CDN is, etc. You might also need to know some lower level networking concepts, like the TCP/IP stack.
例如,如果你在你的应用中有调用网络API,那么了解因特网是如何工作的会对你有所帮助。这些可能包含HTTP协议的概念,DNS系统,路由或者服务器表示什么,一个REST API一般是如何设计的,CDN是什么等等。你可能还需要更底层的网络知识,例如TCP/IP协议栈。

Another useful topic could be how databases work or how to write SQL queries, how an operating system works. This is not to say that you will need to implement any of these, you probably will not if you are an iOS developer. Still, I studied these concepts at the university and they have been useful many times during my career. Even if you do not need to deal with any of these aspects directly, you might find yourself discussing about these with the people that actually do. If you have to work with backend developers in defining an API with which your app needs to interface, it is useful to know how things work on the other side.
另一个有用的主题可能是数据库是如何工作的,如何写SQL查询,操作系统如何工作。这并不意味着你需要实现以上的内容,如果你是一个iOS开发者通过你并不需要实现这些。但是,我在大学时期学过这些知识,而这些知识对的职业生涯是非常有用的。
尽管你并不需要直接处理这些层面的内容,但你会发面你可能需要与别人讨论这些内容。如果你与定义那些你的应用需要用到的后台接口的后端开发者打交道,那么了解另外一端是如何工作的将对你非常有益。

Again, in my opinion these are the least important aspects and you might need to know them only superficially. After all you are not a backend developer or a system administrator. But a little knowledge in these fields can give an some edge that other developers do not have.
再一次说明,在我的观点中这是一个没那么重要的方面,你可能只需要泛泛地了解这些内容就可以了。说到底你并不是一名后端开发者或者是一名系统管理员。但是了解一点这些领域的知识可以会给你带来一些其他开发者所没有的优势。

Finally, a bonus 最后一个福利

Computer Science is a vast field and so is software development. There is a lot more cool stuff you might want to learn, like artificial intelligence, machine learning, natural language processing, neural networks, image recognition, etc. You need these only for the most complex things. I studied them at university and never used them in my career as a software developer. But they are indeed interesting topics and required in some of the cutting edge products.
计算机科学是一个非常大的领域,同样的软件开发也是。这当中会有许多很酷的东西你会想学,例如人工智能,机器学习,自然语言处理,神经网络,图像识别等。只有在处理最复杂的事情你才会用到这些知识。我在大学时学过这些知识,但在我作为一名软件开发者的职业生涯中从来没有用过。但他们确实是一些有趣的话题并且在一些前沿的产品上会用到。

Good luck on your career, and again, do not panic. It took me and many others years to learn all these topics, but you can starts from the basics and go incrementally. I think it is often underestimated how far the knowledge of the foundations can bring you. A good basis already enables you to start making apps. You don't have to know everything at the start. Pick the next step that makes the most sense in your path and proceed steadily. You will get there.
祝你的事业顺利,再一次说明,不用恐慌。学生这些内容花费了我多年的时间,但是你可能从最基础的开始学习并且慢慢进步。我认为基本知识能给你带来的益处常常被低估了。打好基础可以让你开始制作应用。起初你并不需要了解一切。选择你认识适合你道路的下一种并且稳定地前进。你终会到达你的终点。

If you liked this article and would like to know more about iOS development, come to my website, browse around and join my mailing list. Periodically I share free material on the foundations of iOS development, as well exclusive material like my premium courses, which are available only to my subscribers.
如果你需要这篇文章并且想了解更多iOS开发的内容,可能来我的网站,浏览并加入我的邮件列表。我会定期免费分享一些关于iOS开发的材料以及一些我高级课程中的独家材料,这些材料一般只会对我的订阅客户开放。

你可能感兴趣的:(ios开发)