Become an iOS Developer in 2020: The Ultimate Guide

More and more companies rely on mobile apps, so iOS developers are in high demand.

The talent shortage keeps driving salaries higher and higher, even for entry-level positions. So, it’s understandable that more and more people want to start a career in iOS app development.

Money is not everything, of course. Many of us do it to create something we are proud of, that makes a difference in the lives of many people.

Becoming an iOS developer takes some effort though. Whatever your motivation, here is a detailed, step-by step to become an iOS developer.

Architecting SwiftUI apps with MVC and MVVM

GET THE FREE BOOK NOW

Contents


Section 1

Decide if it’s the right career for you


Section 2

The technical requirements


Section 3

The first step: learn programming in Swift


Section 4

The foundations of iOS development


Section 5

Getting to the next level


Section 6

How to get a job in iOS development

Section 1:

Decide if it’s the right career for you

The first thing you need to decide is whether iOS development is for you.

While the salaries for iOS developers can be attractive, money is often not the only motivation. Software development requires certain skills and personality traits.

Demand and salaries for iOS developers are high

One of the main reasons why people want to become iOS developers is because of both demand and salaries. Apps have created a new economy worth $120 billion. On its website, Apple brags about creating two million jobs in the U.S. alone.

Apple’s website talking about jobs

It’s not surprising that everyone and their dog wants to be part of it.

But how much does an iOS developer actually make?

Salaries for developers are, in general, quite high, and that’s true also for iOS developers specifically. How much you can earn depends on many factors, though. The main ones are your location and your experience.

Luckily, there are a few websites where you can get a ballpark figure. According to Glassdoor, in the United States, these are the salaries for iOS developers:

  • entry level: $64.000
  • average: $96.000
  • high: $140.000

iOS developer salary in the USA on Glassdoor

Be sure to check for your specific location. Tech hubs like Silicon Valley drive salaries up, so the high-end listed above is probably only possible at big companies like Apple, Google, or Facebook. Payscale, for example, shows lower figures.

iOS developer salary in the USA on Payscale

Of all the salary websites, Indeed has the highest figures, placing the average at a whopping $126.000

iOS developer salary in the USA on Indeed

But don’t take those figures as absolute, or you will be disappointed. I knew a guy that wanted that kind of similar salary here in The Netherlands, where I live. That’s just not possible.

Here, I never heard of an iOS developer salary higher than €60.000, and Glassdoor agrees. (Although I am sure you could negotiate a higher salary. More on that later)

iOS developer salary in the Netherlands on Glassdoor

It’s not just about the money, but passion is not enough either.

While money is a good motivator, many iOS developers do not get into the job because of it.

In the past five years, I spent a lot of time interacting with my email list subscribers to understand what motivates them and what problems they have (get on my list here).

Some admit they do it for the money, and there is nothing wrong with that. But it’s not uncommon to hear many others say that they want to:

  • create apps that can impact the daily life of many people;
  • increase their creativity;
  • work on exciting projects;
  • start their own business;
  • become independent and stop working at a large corporation.

In general, developers take pride in their craft. They do not treat their profession just as a way of making money.

What I can’t stand, though, are the people that tell you to follow your passion.

Let’s be honest. Passion is overrated.

You definitely need to be interested in software development if you want to become an iOS developer. If you hate it, you won’t go far. But passion is fleeting. You need something else to keep you going when you will inevitably lose your initial motivation.

And passion does not always come at the beginning anyway. Often, it only happens after you master a skill.

What you need instead is to be deliberate and follow a system that will help you push through the many times when you won’t feel like studying. Proven psychological tools like Dr. Peterson’s Future Authoring are also much more helpful than relying on “passion” and “inspiration.”

What does an iOS developer do, exactly?

This might look like a dumb question, but it isn’t. I can hear some of you saying: “An iOS developer makes iOS apps, duh.”

Yes. But what does that mean?

As a developer, you will spend most of your time programming. That means typing text in a text editor. 

Not any type of text, mind you. You write programs in the Swift programming language, which is a formal language you use to write instructions for a computer. Here is what a piece of Swift code looks like:

What you won’t be doing is designing iOS apps. That is the job of a user interface designer, not a developer.

UI design is a field in and of itself, which also takes time to study. It’s a skill that can be helpful (much) later in your career, or if you want to make your own apps. But if all you want to do is design apps like the ones you find on Dribbble, you are trying to become a designer, not a developer.

As a developer, you will work with designers that take care of the visual appearance of an app. You will, instead, work on its functionality. That means you don’t need to learn how to use design tools like Sketch, Figma, or Omnigraffle. 

While you will be using some visual tools to build apps, you will spend most of your time typing code.

What does it take to be an iOS developer?

Typing code does not mean being a writer of literature or poetry, despite what some slogan might say.

The significant traits of a software developer are:

  • logical thinking and problem-solving;
  • spatial reasoning and system design;
  • abstract thought, imagination, and creativity to find solutions.

These traits are all related to intelligence. On top of that, you might also want to consider your personality.

I’m going to base this discussion on the Big Five personality model, which is the most reliable and scientific model.

Those online tests you might have done with acronyms like ENFP and INTJ are instead based on the Myers-Briggs model. Those tests have no scientific validity and can give you different results if taken more than once, so they are not reliable.

Different personality traits can be optimal for different types of work.

  • High openness is a requirement. This trait is anyway correlated to intelligence and to the intellectual characteristics I listed above.
  • High agreeableness can make you a better team player in a company or when freelancing. But low agreeableness can help negotiate a higher salary, a raise, or a promotion, or push you to start your own business to do things on your terms.
  • Conscientiousness is usually helpful in any field, being the second most significant indicator of life success (the first is IQ). Self-discipline, orderliness, and attention to detail are also going to be helpful to write, organize, and debug code. If you are low in conscientiousness, you are best suited for a job where someone decides what you should do. Otherwise, you might take on the organizational struggles of freelancing or starting a business.
  • Most developers have low extraversion. This helps with programming, which is often a solitary job. That does not mean that developers are asocial, and it does not mean you can’t be high in extraversion. If you are, running your own business might also not be the best choice, since you won’t have any colleagues.
  • If you are high in neuroticism, you should get a stable job. Low neuroticism is instead synonymous with low risk-aversion and can help you in freelancing or starting a business.

You can find free personality tests online, but I recommend this one. It’s affordable and more accurate than free tests.

Section 2:

The technical requirements

To be an iOS developer you don’t need much.

Many of the software tools you will use will be free, but getting a new Mac computer and an iPhone or an iPad can be expensive. Luckily, there are cheaper alternatives.

To learn iOS development, you need a Mac computer

While it’s technically possible to run macOS on a Windows or Linux machine, that’s not that easy to set up. Moreover, it’s not allowed by Apple’s license.

Think what you want of it, but, in my opinion, starting with something illegal is not the best way of becoming an iOS developer (or anything else).

Taking shortcuts will have harmful psychological consequences in the long term. And if you don’t invest in yourself, how can you expect others to invest in you?

That said, I know that Macs are expensive computers.

But you don’t need the newest Mac on the market. You can find some cheap, second-hand machine on eBay, like a Mac mini, for a fair price. At the time of writing, I can see options for less than $200.

cheap Mac minis on eBay

You only need to make sure that it can run the latest version of macOS, and possibly the next one if Apple has already announced it.

At the moment, I recommend a computer that runs macOS Catalina so that you can learn new technologies like SwiftUI (more on this later). Since Catalina runs on Mac minis from 2012 onward, it should not be hard to find one.

Apple announces new versions of iOS and macOS every year at its Worldwide Developer Conference (WWDC) around June, so keep an eye on their website for further announcements.

You create iOS apps using Xcode, provided by Apple for free.

Once you have a Mac, you will need to install Xcode on it.

Xcode is the integrated development environment (IDE) used by most developers to make iOS apps. You can get it for free on the Mac App Store or directly on Apple’s website.

xcode is the tool to make iOS apps

I recommend getting it on the App Store since you won’t need to create an Apple account (at some point though you’ll need it anyway). You also get automatic updates for Xcode from the App Store as you do other apps on your Mac.

You can find the Xcode guide here, but it’s not a guide I recommend reading now, so keep the link for future reference. That is a user manual, so it assumes you already know how to make apps, which you don’t know yet, or you wouldn’t be reading this section.

It’s hard to understand why Xcode’s features are useful when you don’t know what they are for. It’s better to learn to use Xcode as you learn iOS development.

An iOS device can be helpful but is optional

And finally, a common question: do you need an iPhone or an iPad?

If you own one already, it can be useful. But you don’t need to buy one to learn. Xcode comes with an iOS simulator that allows you to run all the apps you make on your computer.

I developed my first iOS app using only the simulator. I also worked for many clients where I rarely, if ever, ran apps on real devices.

The iOS simulator covers most of your learning needs. You need a real device only to do the final testing before submitting an app to the App Store.

And actually, Apple keeps adding featured to the simulator, so you can test your apps in ways that are not easy with a real device. For example, you can quickly change settings for dark mode or accessibility. Or, if you create apps that use the GPS location, you can create a file with a track to simulate movement, which is better than running around your neighborhood.

Sometimes, though, you might need to test features that are not available in the simulator.  For functions like multitouch, the gyroscope, the camera, or the Apple pencil, you need a device. 

These are advanced features, so you should not be learning them at the beginning anyway. (I’ll tell you what to learn and in which order later in the article). In any case, a second-hand device can still be an affordable choice.

Again, make sure that the device can run the latest version of iOS so that you can use the latest features. At the time of writing, that is iOS 13, which includes features, like SwiftUI, not available on previous versions.

iOS 13 runs on devices going back to the iPhone 6S, which you can find on eBay for less than $100. I still have one as my primary device, and it works great.

cheap iPhones on eBay

If you want an iPad, get a device that runs iPadOS 13 instead.

Section 3:

The first step: learn programming in Swift

The first necessary step for any software developer is to learn programming. This is an crucial part of being an iOS developer, so I recommend focusing on it before you try to learn anything else.

Don’t panic: you are not going to become obsolete

Let’s clear something that seems to worry many people that want to become iOS developers.

Apple moves at a fast pace, releasing new stuff every year. By now, you might have heard about SwiftUI, the new UI framework Apple released at WWDC 2019, which radically changes the way iOS apps are made.

So, you might feel that you need to learn things quickly, or “the next big thing” will make what you are learning now obsolete.

That’s not how the world of software works.

The foundations of computer science and programming have been the same for decades and won’t change anytime soon.

The history of computers indeed went through massive forward steps. In a few decades, we went from huge mainframes as large as a room to modern, Internet-connected mobile devices we can carry in our pockets.

But while technology moves fast, the foundations of software development always stay the same. Once you are familiar with them, you can jump to any new technology you like.

Significant shifts like Swift and SwiftUI do happen, but only once every five years or so. Yes, you will have to keep your knowledge up-to-date. That’s a requirement for an iOS developer. But you usually get plenty of time.

Which language should you learn? Swift or Objective-C?

As I mentioned above, as an iOS developer, you will spend most of your time writing code. So, the first thing you have to learn is programming.

Computer programs are written using a formal language in which you give instructions to a computer. 

There are a plethora of programming languages out there, but programming is mostly the same on any platform. That makes your programming skills transferrable from one language to another, so it does not matter which language you learn first. 

Still, it’s best to learn programming in the language you will use to make apps on iOS and other Apple platforms, which is Swift.

A few years ago, when Swift was first introduced to replace Objective-C, there was a debate on which one of the two to learn first. Swift won that debate long ago. The recent introduction of SwiftUI made the argument even stronger, so if you happen to find articles on the internet about this discussion, you can safely ignore them.

In any case, don’t forget that Objective-C was the language of choice for Apple platforms for decades. You might still have to learn it at some point to work on long-standing projects. Until then, forget it.

Learn Swift programming separately from iOS development

Both Swift programming and the iOS platform are two massive beasts, and it’s going to be hard to learn both at the same time.

Yes, I know that there are many courses out there that teach both at the same time. Even Apple does that.

Apple’s guide can be a good start to get a lay of the land and understand if you like making apps, but I would not recommend it if you are serious about learning.

I met many people that got confused because they followed that approach. After they put a ton of effort into learning both topics at the same time, they don’t understand either. Moreover, you might have to answer hard programming questions at job interviews, which you won’t be able to if you just follow that guide or others like it.

My recommendation is to focus for a few weeks on getting a solid foundation of programming concepts in Swift:

  • Basic concepts: numbers, strings, constants, variables, and operators.
  • Collections: arrays and dictionaries.
  • Control flow statements: if-else, switches, and for/while loops.
  • Types and interfaces: structures and enumerations, functions, methods, protocols, and extensions.
  • Object-Oriented programming concepts: classes, inheritance, and polymorphism.

While I offer both basic and advanced courses on iOS development, I don’t have any material about programming (yet?).

Since I learned it at university a long time ago, I don’t have any books I can recommend. But the Big Nerd Ranch guide seems to be a good choice that many recommend. It only focuses on Swift programming, and it has good reviews, so you can start from there.

What I can tell you though it to avoid the Swift Language Guide unless you know to program already. That’s only a reference manual, and it does not teach programming step-by-step.

Don’t waste time blogging or with other superfluous activities

While it’s important to know what to do to become an iOS developer, it is as essential to understanding what you are not required to do.

Internet articles are full of advice like “start a blog” or “publish your own app in the App store.” It sounds like good advice, and everyone thinks: “Well, it can’t hurt, right?”

Actually, it can.

Learning iOS app development is a massive task by itself (don’t believe the people that tell you that you can learn it in a couple of weeks). Anything that gets in your way is going to make it harder and demoralize you when you don’t get results.

So, things, like starting a blog, a podcast, or jumping on Twitter, are superfluous.

Obviously, it is helpful to take notes about what you learn. Many use a blog as an excuse to take such notes. If you feel that you want to share what you learn with the world, please go on. But it’s not a requirement for learning, or even to find a job, despite what some claim.

Publishing everything you learn takes time away from what you are trying to do: learning. Plus, using pen and paper works better than taking notes on your computer. And finally, there are more effective ways to find a job than writing a blog, which I will describe later.

Yes, I know that there are people like Natasha. She became well-known in the iOS development world by blogging about everything she learned in Swift. So, I am not saying that you should not do it. What I am saying is that you don’t need to.

What you need is a plan, not a blog.

Section 4:

The foundations of iOS development

After learning to program in Swift, the next step is learning how to make iOS apps.

iOS development is a vast topic, so there is a lot to learn. But not everything is equally important. Here is what you should focus on.

Focus on the fundamentals you need to build any iOS app

You can’t be an iOS developer is you only know Swift programming. After that, it’s time to tackle the iOS platform.

iOS is vast and filled with technologies, frameworks, and design patterns. Every software platform is different, so even if you are already a developer, you will have to learn how things work in iOS.

Online, you will find articles on pretty much any topic. But not all are important. You must focus first on the fundamental concepts you will need for every app you will ever make.

Sure, things like augmented reality, machine learning, or video game technologies are cool. But you won’t be able to use them until you learn the foundations of iOS development.

I never touched them in my 10+ years of iOS development. 

The reality is that the majority of apps are not innovative, but simple Create-Read-Update-Delete (CRUD) apps.

So, some of what you learn will apply to every app you will ever write, while there are technologies that might never use in your career. This is known as the Pareto Principle.

As a first step, I recommend you get familiar with Apple’s Human Interface Guidelines for iOS. That will give you an overview of the conventional iOS interface paradigms that you find in any app. After that, you can tackle the fundamental topics of iOS development, which I am going to cover next.

Should you learn to make apps using SwiftUI or UIKit?

To create the user interface of iOS apps, you need to use a UI framework. The problem is that now Apple provides two of those.

The old framework is UIKit. But don’t think that “newer is better.” UIKit has existed as long as the iOS platform, so the majority of existing iOS apps are built in it. If you want to get a job as an iOS developer, you will likely need to learn it.

At WWDC 2019, Apple introduced a new framework called SwiftUI, which will eventually replace UIKit. But SwiftUI is a new framework, so it is not yet as mature as UIKit. Many features offered by the latter are still not available in the former. Things will definitely change at Apple’s WWDC 2020, but it’s hard to know how much.

SwiftUI also has some other limitations. It became available only in iOS 13, so you can use it only for new apps that target the latest operating system. Many companies already have a customer base that they need to support. That usually translates into targeting the two iOS versions before the current one. They will adopt SwiftUI only when iOS 15 comes out, which will take another two years.

So, should you learn SwiftUI or UIKit?

Here is the obvious, but not helpful, answer. Given the current state of the market, you will probably have to learn both.

Still, which one should you learn first?

That question is becoming harder and harder to answer. Some months ago, I would have recommended learning UIKit first since most companies are still using it. That’s probably even true at the time of writing, but as time passes, it will be less and less clear.

I surveyed my 10.000+ email subscribers, and there is great excitement for SwiftUI. In this other survey, you can see that 9% of respondents already delivered apps using SwiftUI, and 60% declared that they would use it for any new app.

SwiftUI also has another advantage: it works on all Apple platforms. You will be able to leverage your skills also to build macOS, watchOS, and tvOS apps.

So, the real answer is: it depends. If you just want to make apps for yourself, SwiftUI is probably the way to go. But if you’re going to get a job as a developer, it will depend. To decide, be sure to read the section on finding a job later in this article.

Here is what should you learn for each UI framework

One of the advantages of SwiftUI over UIKit is its simplicity (to a certain extent. Some aspects of SwiftUI are not that easy to grasp).

UIKit has many moving parts, and you need to learn them all to make iOS apps. Here is a quick list of the main concepts you should learn:

  • The Model-View-Controller pattern and view controllers. MVC is the design pattern that guides how you structure iOS apps. View controllers are part of MVC and a central component of UIKit. 
  • The view hierarchy and Auto Layout. These concepts are fundamental to build user interfaces that work on iOS devices with different sizes.
  • Containers and Xcode storyboards. Containers are a special kind of view controller that allows you to structure the navigation flow in your apps. Storyboards are a visual tool to design and organize such navigation flows.
  • Table views. Many, if not all, iOS apps need to manage screens with long scrolling lists. While table views are just one out of the many components of UIKit, here I list them separately because they have many moving parts and are not straightforward.

If SwiftUI is your choice, Apple has not yet released much documentation about it. You can start with my introductory article on SwiftUI, and these introductory tutorials from Apple.

These will give you a broad idea about how SwiftUI works but don’t take everything you see in Apple’s tutorials as a best practice. After you follow those, be sure to read my article on structuring SwiftUI apps using the MVC pattern.

I am almost done updating my Confident iOS Professional course, though, which dives deep into SwiftUI. Join my email list to know when I open it.

The second, most pervasive iOS framework is Foundation

SwiftUI and UIKit are only UI frameworks. There is more to building iOS apps than creating user interfaces. The other fundamental framework for iOS development you will need to learn with is Foundation.

Foundation is extensive and contains a plethora of features. Unlike the two UI frameworks of iOS, though, you won’t need to be familiar with everything it contains. There are parts of it I never used, and others which I only touch rarely.

In any case, you usually learn the relevant parts of this framework as you follow a book or course on iOS development. It’s not something you study separately.

Here is a short list of some of its features for your convenience. Some of these are advanced features you will need to learn later.  I will list those in the next section.

  • Foundation also contains some other basic types besides the one offered by Swift. The most important ones are the URL and Data, but you usually learn how to use these when you deal with storage and networking (more on this later).
  • Many apps deal with dates and time. Foundation contains types to manage calendars, dates, time, time zones, and calendrical calculations.
  • In Foundation, you also find many formatters for numbers, currencies, person names, dates and times, and other measurements.
  • Speaking of measurements, Foundation contains many other units that are useful for conversions. If your app deals with lengths, areas, weight, mass, speed, acceleration, energy, temperature, light, or electricity, be sure to check them.

Learn Git to manage incremental changes in a project and to publish code on GitHub

I would say that the second-most-important tool for iOS developers after Xcode is Git.

Git is a version control system. You will need to learn it at some point since it’s often a job requirement, but it’s not something you should focus on at the beginning.

Version control is fundamental to track code changes on projects. It’s especially useful to coordinate the developers in a team, but it’s also helpful to keep track of code in your personal projects. There are different version control systems, but Git is the most prominent.

Sooner or later, you will also meet GitHub, a vast platform, based on Git, that many developers use to share code and coordinate projects. A less popular alternative to GitHub is Bitbucket, which also integrates with other online tools many companies use.

Xcode has some Git integration, which is getting better with time but is still limited. You will need to learn to use Git from the command line to use all its power.

There are also visual tools for Git like Tower, Sourcetree, and GitHub Desktop, which can make your life easier. Honestly, I found them less versatile than using the command line, but your mileage may vary.

Section 5:

Getting to the next level

Learning to make simple iOS apps can already land you an entry-level job, but it’s just a milestone. Being a developer requires much more than knowing how a single platform works. You will need to acquire other skills to be at the top of your game.

After you get solid foundations, you should expand your knowledge to other topics of software development.

Once you learn the fundamental pillars, programming, and the foundations of iOS, you can start to branch out.

By now, you should be able to get some of the entry-level jobs as an iOS developer or build your own apps. Not all jobs have the same requirements, so be sure to check the next section of this article.

You would know more about iOS than I knew when I got my first job as an iOS developer. I didn’t know most of the stuff you find in this section, and I had to learn it on the job. (To be fair, though, I also had a master’s degree in computer science. But many companies nowadays don’t require one.)

In any case, if you want to be at the top of your game and get to higher positions as a developer, you need to expand your knowledge.

Here are some crucial topics you should focus on.

Storing the app’s data on the disk

Most iOS apps need to store data permanently. There are several iOS technologies for data storage, each one with its pros and cons. Here is a brief list of what you need to learn.

  • First of all, to save data in your app on the disk, you need a way to convert it into binary data. The standard way of doing this in iOS is to use the Codable protocols. The most common data formats in iOS are property lists and JSON data. The latter has become more popular lately since it’s also used to transfer data on the internet.
  • Once you have data in binary format, you need a way to store it. The Foundation framework offers a simple API to store files in the file system. This is the standard choice to store the user’s data.
  • If instead, you want to store the app’s configuration, Foundation offers a Preferences system.
  • Most data has a hierarchical structure. At times, though, you’ll have data with complex relationships. For that, you can use Core Data. Beware though that this is a huge framework that takes some time to learn. Many developers think that Core Data is the only storage solution available in iOS. In reality, it’s the most complex one.

Databases and the SQL language

Databases are another way of storing data. They are used on many platforms, from the web to mobile apps.

Managing a database is much more complicated than the storage solutions I listed above, and that’s why it deserves its own section.

iOS uses SQLite, which is a relational database. SQLite is a multiplatform technology, so your knowledge will be transferrable too. Still, you won’t have to deal with it often. In more than ten years, only a few of the projects I worked on used SQLite.

First of all, to work with relational databases, you need to understand how to design their tables using the Entity-relationship model.

Once you have the tables in place, you manage their data using a specific language called SQL. This is not a programming language like Swift, but a querying language that allows you to combine and filter data.

Learning databases and takes time. You should pick this option only when needed.

Networking and REST APIs

Many modern apps get their data from the internet.

The Foundation framework offers a URL loading system, but learning to perform network requests in your apps is also not as straightforward as learning to use a few new classes.

To be able to create robust networked apps and to debug them properly, you need to learn how the internet works in general.

This includes concepts like the HTTP protocol, URLs and the DNS system, what a router and a server are, how REST APIs are designed, what a CDN is, etc.

This is again a quite broad topic, but since you’ll need it in many apps, it’s not something you will be able to avoid for long. To have a kickstart, I recommend reading my article on network requests and REST APIs in iOS.

Algorithms and data structures

We write programs to solve problems. While many of these are simple, there are complex problems that require specific solutions.

When you learn to program, you learn simple data structures like arrays and dictionaries. In some cases, you need more sophisticated ones.

Some examples are stacks and queues, bloom filters, linked lists, skip-lists, trees, and graphs. Which one you need depends on the problem you are trying to solve.

Each of these structures has specific algorithms to read, add, and remove data, so you need to learn those as well. And these are not the only algorithms you might need to learn.

There are many algorithms to solve common problems not related to specific data structures. Some examples are greedy algorithms, constraint satisfaction problems, linear programming, the simplex algorithm, A*, and other AI and machine learning algorithms.

These algorithms are relatively complicated, so you don’t need to know them by heart. You can always look at their implementation when required. But you should at least know that they exist.

Architectural design patterns, software design principles, and paradigms

 You can get away with the basics of iOS development only in small apps. As a project grows, you need more tools in your bag to handle their inevitable complexity.

For these, you will need to learn common design patterns, principles, and paradigms. These are unrelated topics, even though I am listing them all in the same section.

Some examples are unit testing, the SOLID principles of object-oriented programming, memory management with ARC, functional programming, protocol-oriented programming, and concurrency, just to name a few.

I have an advanced course that teaches all these, but beware that it’s only for iOS developers that already have some experience.

You don’t need to study the code of other apps

Some of the worst advice see online is to look at the code of other apps. Occasionally I also get requests to share the code of my courses, as if looking at it will give you some magical insight.

While you can learn something from anything, reading the undocumented code of other people is the least efficient way to learn iOS app development.

Would you learn drawing only by looking at finished paintings? Or would you get a book, course, or private teacher? You don’t have infinite time. Don’t spend it on endless activities with a little return on the investment.

You will soon realize that even reading and understanding your old code is time-consuming and not fun at all. Reading code of other people, when you have no idea what it does or why, is just an exercise in frustration, especially when you don’t have the skills to do it.

Also, who tells you that the piece of code you are reading is written correctly and solves a problem in the best way? You might just be picking up the worst habits of another developer.

Learn from trusted sources, not from random code you find online.

Section 6:

How to get a job in iOS development

If you want to land a job as a developer, your search should start much earlier than you think. It’s important to look at what the market offers to guide your learning. Getting in contact with companies early can also give you an edge against the competition.

You don’t need to build an app portfolio, or to release your own app in the App Store.

Yes, nothing can beat experience. I am not arguing against that. Trying to build something will highlight what you don’t know yet.

But building an app good enough to be released takes a lot of time. Not everything you do is a learning opportunity. Software development consists mostly of repetitive tasks that are not going to teach you anything.

Also, app portfolios are less useful than people like to think. I was never hired because of that. I followed this advice, and my portfolio was left to gather dust.

Employers know how to recognize skilled developers.

If you want to make your own app, be my guest. I do recommend you get your hands dirty with real code instead of just copying and pasting code from books and courses.

But always remember that you are optimizing for learning, so leave unnecessary tasks aside when you can.

Pick the job you want from what is available on the market

Everyone only talks about applying for jobs when you are ready for the interview. I will give you a piece of different advice.

Start looking at iOS development jobs much earlier, even if you are not yet ready to apply for one.

First of all, this will force you to look at what is available on the market instead of dreaming of a job that does not exist.

Remember that guy I mentioned that wanted a silicon-valley salary in Amsterdam? He also wanted to be paid that amount of money to build a new compiler. That kind of job does not exist. Wanting what is not available is only going lead to disappointment and waste your time.

Moreover, it’s better to have a wide choice that matches your tastes instead of applying to a random job just because you don’t know that something better exists.

You can look for jobs on boards like LinkedIn jobs or Stack Overflow jobs. I’m sure you can find more on Google.

This will also give you an idea about the job requirements for different positions, which you can use to pick what to study first. That’s why you must do your search as early as possible.

This will also give you a list of companies for the next step.

Conduct informal interviews at the companies you would like to work

The next step nobody will tell you about is to get in contact with companies early when you don’t yet need a job or can’t apply for one.

Yes, I know. Not the best advice for introverted developers. But it works.

Don’t reach out to the people that manage job applications, though. Those are only interested in candidates and are probably part of an HR department.

What you want, instead, is getting in contact with developers that have a job like the one you want. This will give you several advantages over your competition:

  • You can get more information about the job requirements. Some might be less necessary than you thought. Others might not be mentioned in a job ad. For example, do they care if you have published an app in the App Store, or you have open-source code in your GitHub account?
  • You will understand if you like the company and its culture. These are things that are not written anywhere, and you only discover when you get in contact with real people. 
  • You get a foot in the door. Something nobody tells you is that most jobs are never published on job boards. Companies mostly fill positions through their network. When I look to hire people to help me with my business, I always contact my students first. Those are jobs you will never find anywhere.
  • When you apply for a job at a company where you have a contact, you will be able to bypass the HR screening and get an interview when others can’t. Also, many companies give a referral bonus to their employees, so they will be incentivized to help you. At my first job, we got €5.000 if we brought in a new hire.

If you want more details about the process and email scripts to contact people you don’t know, check this article from Ramit Sethi. And here, you can find what questions to ask once you get a contact.

How to write a great resume

At some point, you will be ready to apply for a job. Even if you go through a personal contact, you will often need to write a resume.

But what should you put on it? Short answer: what the employer wants to see.

I know, I know. Easier said than done.

If you followed my previous advice (which you probably skipped), you would know what they want. That is already a tremendous advantage over your competition. But here are some general guidelines because I know you won’t listen to me anyway.

Nobody cares about the formatting of your CV or which font you used. Don’t waste time over that useless stuff. What matters is the content.

You need to stand out over all the other applicants. If you just list a bunch of facts like everybody else, guess what, you are going to look like everybody else.

To stand out, you need to craft a narrative that will make people remember you. To know how to do that, watch this video:

Should you study common interview questions?

One thing I never understood is people that prepare for interviews by studying common iOS development interview questions.

I’m not saying you should not prepare for an interview. You definitely should. And yes, there are some common questions that interviewers like to ask. Prepare a good answer for those.

But the iOS questions I see on the internet make no sense. I just searched on Google for “iOS interview questions,” and what I found left me puzzled.

  • Apparently, everyone claims to give you the “top iOS interview questions,” but everyone has a different set. If those are the most common questions, shouldn’t everybody agree?
  • Most questions I never saw asked in the interviews I participated in, and I would never ask someone I am interviewing.
  • Some of them make sense, but you can’t answer them with a canned response. And you don’t know which ones they are anyway.

I can judge those questions because I have have been in iOS development for 12 years, and 20 in software development. If you are reading this article, you don’t have that experience.

Studying those questions is a waste of time. First of all, there are so many questions you could be asked that you can’t memorize them all.

But, more importantly, questions are meant to test your understanding of the platform. If you have that, you can answer any questions. If you don’t, studying canned answers will not bring you far.

Let’s look at an example. “What is a memory leak?” can be an excellent question to ask. But look at this answer I found online:

A memory leak is a type of resource leak that occurs when a computer program incorrectly manages memory allocations in such a way that memory, which is no longer needed, is not released. In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code.

What?

That’s just a word salad. If you answer that in an interview, the best thing you are going to get is a blank stare.

And then, they are going to ask you to explain what you just said, and you are going to get caught. It took me a full article to explain what memory leaks are and how to avoid them, you can’t just answer that question with two sentences.

Conclusions

It will take you years to become an expert iOS developer. Everyone that promises otherwise is lying.

But it does not need to take long to get your first job or make your own apps. Many of my students got their first job after following my basic course, which takes around two months to complete (but it only covers iOS and requires you to know Swift already).

So, if you are thinking of a career shift, or you are interested in making iOS apps, I encourage you to get started. A few months from now, you might have the job you want.

Architecting SwiftUI apps with MVC and MVVM

It’s easy to make an app by throwing some code together. But without best practices and robust architecture, you soon end up with unmanageable spaghetti code. In this guide I'll show you how to properly structure SwiftUI apps.

GET THE FREE BOOK NOW