How to Start your Career as a Highly Skilled iOS Developer


I have had many job interviews during my career, for different companies. Most of them were for a position as an iOS developer. I still have such interviews from time to time, even though I am a freelancer. This happens when big companies want to add me to their existing team to temporarily speed up their development process. Do you know what all these interviews had in common? They never focus only on iOS development. I would actually say that the questions about iOS development are usually around 50% of all the questions.

Am I saying that knowing iOS development are not so important? No, not at all. It is of course required to have a solid understanding of the platform for an iOS development position. Sometimes the interviewer might settle for something less solid, but only for junior positions, where it is implied that the candidate will have to learn a lot (and accept a lower salary because of that). Still, there is another half that is not about iOS development. What is it about then?

Software development is much more than just knowing about a specific platform. It implies a lot of knowledge about programming and computer science. These concepts are broader than the ones you learn when making your first iOS apps and are required for any development job, regardless the platform or the technology. Software development is a craft that takes time to perfect and the top developers in any field are constantly learning new things. These concepts are, of course, needed in iOS development as well.

Internet forums are full of people asking where to start in developing iOS apps. What many people don’t know is that making iOS apps requires to know more than just iOS development. 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.

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, for that you can read my other articles on this blog. 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.

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.

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.

The easy part of iOS development: the technicalities

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.

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.

Should you learn Swift or Objective-C first for iOS development?

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.

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.

These are the reasons to learn Swift first:

  • 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 and 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.

Still others advise to learn Objective-C first, so these are my counter-arguments:

  • 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. Also Russian or German are not so hard when you speak them for years. Does it make them easy to learn when you come from a language without declensions? Not at all.

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.

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.

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.

The first aspect of being an highly skilled iOS developer is knowing programming well.

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.

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.

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.
  • 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.
  • 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.

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.

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.

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.

This is a quick list of where you should start is studying the foundations of 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.

You can get a more extensive guide about these topics here.

The third aspect is what surrounds iOS development.

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.

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.

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.

Continues below

To start your career as an iOS developer, you need to know how to make professional iOS apps. Learn how in my free course

100% privacy. No games, no spam. Unsubscribe at any time.

  • Shial

    I’m iOS Developer since 3 years. After this guide I know what to tell the friends whos want to learn to programming(due to casch they earn… and others). I mean not iOS only but overall.
    if found me a words and arguments that are dominating in this kind of conversations.

  • Rollo23

    Great article and guide.

  • Rollo23


    What do you recommend for learning about “algorithms and data structures”? Thanks

    • Unfortunately I learned all these in university, so I don’t know what to recommend.

    • Andy Bargh

      Hi Rollo23. Not wanting to plug someone else’s stuff on Matteo’s blog (for which I apologise) but if your interested in Algorithms and Data Structures (specifically in Swift) you might want to check out Wayne Newton’s book over at I’ve no affiliation and and not read it myself but a few people I follow on twitter have said good things about it.

      • Indeed, I haven’t read it myself, but it might be a good start since it’s in Swift.

      • Joe Ballard

        Wayne Bishop. (Wayne Newton was a famous Las Vegas entertainer back in the day)

        • Andy Bargh

          My mistake. Corrected above. No idea where I got ‘Newton’ from! I guess what goes on in Vegas…

  • Hasan

    Hi Matteo,

    In terms of learning programming, can you elaborate a little when you say that programming concepts are only tools and how it’s important to understand how to reason about problems and solve them using these tools. Do you mean in terms of knowing how to apply these concepts to real world examples or in relation to iOS down the line?


    • This does not have to do much about programming to start with. It’s more about decomposing problems into small pieces.

      Let’s say you need to go buy milk at the supermarket and you want to get the cheapest option. This is a simple problem that you already fixed and know subconsciously, but how would you describe the problem?

      At a high level you would say: go to the supermarket, get the milk, come home. But these can be broken down further.

      Go to the supermarket: exit your house, turn left, walk down the road, turn right at the crossroad, walk until the supermarket, enter the door.

      Get the milk: walk to the refrigerator section, find the cheapest brand of milk, walk to the counter, pay, exit the supermarket.

      Come home: the steps in the first point, reversed.

      You can still break these down. For example, find the cheapest brand of milk would look like this:

      get a carton of milk
      check the price
      get another one
      if the price is cheaper than the one you already have, this is better
      repeat for every carton of milk and at the end you will have the cheapest one

      This is exactly like programming. You are decomposing a problem in a series of instructions. You can give these instructions to someone that does not know how to solve this problem.

      Programming is the same, you decompose a problem into instructions you give to a computer to execute. My example of finding the cheapest milk includes common programming concepts: if statements (if this then do that) and loops (repeat this for every carton).

      As you can see, these concepts stand alone, regardless of language. I am explaining them to you in English, but I could do it in Italian or French. The concepts would be the same.

      Programming is the same. There are many languages, but the fundamental concepts don’t change.

      • Hasan

        Ahh I see, thank you for your response very helpful!

      • Hasan

        Ahh I understand, thank you so much for your response very helpful!

  • James

    Thanks Matteo. I started to dive deep into learning iOS Development, Programming and Swift last summer with doing all the video tutorials I could find from Udemy, Udacity, TeamTreehouse and Lynda. They were fun and exciting to see a semi-finished app at the end but like you pointed when it came to starting to build my own apps I was pretty much lost.

    Your site and guide have inspired me to start back at learning Swift and Programming concepts in detail and make sure I fully understand the core concepts of both before I take my first stab at building my own apps and changing my career.

    My question is, once I have become much more comfortable with Swift should I go back and learn Obj-C? I have been looking around at a lot of iOS job listings and it seems like the majority want you to know Obj-C first and Swift secondary. Or should I have a good understanding of their differences and how they work together?

    Thank you once again,


    • Yes, the only reason for which I would learn Objective-C nowadays is because a job requires it. But more and more jobs require only Swift, since many new projects in iOS are Swift only. The companies that require Objective-C are the ones that have apps that have already been written in it. It does not make sense to rewrite all this code that works and is tested in a new language, with the risk of introducing new bugs.

      The good news, as I wrote in the article, is that if you understand programming in Swift well, Objective-C is easy to learn (more in general, moving from one language to another is not a big task for a developer). Objective-C has only a subset of concepts that Swift has. Enums and structs for example are very limited and cannot have methods. Objective-C has classes, protocols and extensions (called interfaces) like Swift does, but it does not have protocol extensions. The biggest difference is syntax, but you can overcome that easily.

      Mostly iOS development is not the language, but the frameworks, Foundation and UIKit above all. But these work the same in both languages. A view controller works the same wether you use Swift or Objective-C.

      Also, I would not look into how Swift and Objective-C work together until you have to actually use them together. Many companies with apps in Objective-C keep them in one language only. Learning how they work together is not hard, Apple did a pretty good job to make them live in the same app. When you understand the two languages you can learn this in an afternoon.

      This said, on Natasha’s newsletter you can often find jobs that require only Swift. Have a look there:

  • Samson Sunny

    Nice article!
    I am new to iOS technology and don’t know where to start. But your article gives me a clear picture of Swift and Obj-C.


  • Nur Azhar

    I really like this: “First of all, do not panic: you are not going to become obsolete”

    I saw technological unemployment many times in my life and it freaks me out