Connect with us


From “Hello World” To Your First Job – iOS Roadmap

The Self-Taught iOS Roadmap I Wish I Had When I Started, What To Know For Beginners.

After getting my first official job in iOS development with no degree and being self taught I’ve been repeatedly asked questions like “How do I know I’m ready?”, “How do I get out of tutorial hell?”, “Where should I start?”, “Where should I look for jr. iOS jobs?” and more. I remember how lost and confused I was when I first started, so I wanted to share what I wish I had known when I started.


For the TL:DR, here’s the list of what a beginner should learn and in what order:

  1. Views: Learn UIKit and how to programatically set up your views. You should be able to recreate a collection view and familiarize yourself with layers, animations and draw(). Learn the difference between writing with gpu and cpu. Learn some swiftUI, however I personally have noticed most jobs haven’t transitioned fully or at all to swiftUI, hence the focus on programmatic views.
  2. Network Calling: Learn how to interact with a restAPI using URLSession. You should be able to GET and POST to an endpoint. Learn and know how to get a list from any API.
  3. Data Persistence: Learn UserDefaults, KeyChain, FileManager, CoreData and CloudKit
  4. MultiThreading: Learn DispatchQueue, GrandCentralDispatch, Async-Await, OperationQueues
  5. Architecture: Master delegates and protocols, MVVM, Facade Pattern, Dependency Interjection. Properly use guard statements/optional unwrapping and learn about Automatic Reference Counting.
  6. Frameworks: Have fun with this one, Apple has so many cool frameworks but definitely get familiar with basic ones like AVFoundation, MapKit, etc.
  7. Objective-C: Spend a few hours making an app with a collection view that gets a list from the internet in Objective C so you can say you’re familiar with it.

By following this roadmap and learning everything above you’ll be able to make any app/be prepared for a job as an official developer. An iOS Developer essentially (1) makes views, (2) gets data from the internet for the views to display, (3) saves the data, (4) handles the data properly so your views don’t get backed up, (5) organizes code and (6) uses different frameworks to get everything going.

That’s iOS development in a nutshell. By having this as a foundation you should be able to tackle anything that comes your way.

Tips & Resources

Where To Start for No Programming Experience

If you’ve just been interested in programming and have zero knowledge, I highly recommend downloading unity and doing their roll-a-ball tutorial and completing their other intro tutorials.

If you’re asking yourself, “If this is about iOS development, Why would I start with Unity, Isn’t that C#? Shouldn’t I learn Swift? I don’t care about game development”. Well, alternatively you can use Apple Playgrounds to learn as well.

However, I cannot attest to it since it wasn’t around when I started learning, so you can still try the Unity method as I did. As for Unity, which runs with C# instead of swift; C# and Swift are both Object-Oriented Programming languages (OOP). That means they’re similar. By learning one, the other is extremely simple to grasp. But why Unity and game development? Learning coding by yourself can be hard and frustrating, especially when staring at plain text book answers all day.

Following along with youtube videos or trying to decipher what StackOverflow is showing you can be stale and daunting. When you start with video game development, you get amazing visual feedback as to how your code is affecting what you’re trying to do.

For example, If I tell you “By iterating over an array you can get access to all the references in that array and manipulate them accordingly”, that may seem intangible to someone with no programming knowledge. However, in video game development, you can see that by iterating over this array, and by attaching a grenade to each of these items, you’re going to get explosions everywhere. It is, simply put, more fun and teaches you to not be afraid to break, test and stress your code.

Another example, Text Book: “When you create a variable you’re creating an instance or a reference to that object in memory”. When you do that in game development, it simply creates a character, bullet, tree/whatever you want and puts it into the game. You’ll see that all that simply means is you’re creating something so you can reference it late.

My point is, video game development is a more engaging and visual way to learn. Unity has excellent tutorials that will give you a foundation for programming where you have none. The main tools for your foundation being: Referencing objects, Arrays, Sets, Dictionaries, Value vs References, if-statements and more. Unity should get those grounds covered and fast.

Once you’re done learning some coding basics in Unity, or done with playgrounds then its time to get straight to the point with some good old fashioned YouTube Tutorials!

Welcome to tutorial hell

It’s time to start making your first mobile applications! This is going to be difficult, because you’re going to be following along and not really understanding what you’re watching. But don’t worry! Follow along and eventually it will stick. As you follow along with these tutorials don’t be scared to stop, take a breather and digest what you’ve learned. The best way to learn and digest what you’re watching is to BREAK your code. You’re going to see a lot of UICollectionViews, UITableViews and more. Don’t be shy to play with things. Set counts to 1000, make the background of a view a different color using cell.backgroundColor = .red. This isn’t a ‘you follow along and you’re done’. Much like learning through game development, tutorials should be a hands on, test everything you’re curious about, break everything experience. Here’s some youtubers and their series I owe my career to:

Brian Voong: LetsBuildThatApp

Brian Voong is a gem when it comes to following along and learning to create amazing UI with UIKit programmatically. I recommend starting off with building twitter, youtube or any of his other tutorials. He’ll show you how to set up collection views that can be reused.

Sean Allen: SeanAllen

Sean Allen has a talent for explaining swift concepts in an easy to understand way. It’s been years and I still recall his star wars example every time I set up a delegate.

iOS Academy: iOSAcademy

iOS academy covers a large range of topics, and usually when I search for a how to on maps or another subject, I can be sure I’ll find a video that will break down what I need.

Paul Hudson: Hacking With Swift

Not a youtube channel, but Paul Hudson has been a front lines teacher with a great collection of books and resources. As you google your problems, rest assured hacking with swift will be one of the top results. His 100 days of swift, although it wasn’t quite for me since I discovered him later in my career, is a valuable tool for newcomers. He has also appeared on John Sundells podcast Swift By Sundell and is a joy to hear talk.

There’s many more online teachers who have had a hand in guiding the next generation of iOS developers, and many more who have helped me as well, all it takes is a quick search. But be warned. Online mentors aren’t the end all be all, and what they show you is geared towards beginners. They offer you hand holding for your first steps, and to get better eventually you’ll have to search for more advanced topics on these intro tutorials. When you get more experienced, go back on what you’ve learned and ask yourself, whats the next step?

What is tutorial hell and how do I escape it?

Tutorial hell is what beginners describe as being stuck watching tutorials and feeling like they haven’t learned anything. You can follow along and recreate twitter, youtube, instagram, etc and feel like you don’t know what to do if you’re left with a blank Xcode Project.

So how do you avoid this cycle? Simple! Build your own app. That’s it! After you watch some tutorials on how to recreate some apps, it’s time to get your hands dirty and bring your own idea to life.

However, DO NOT GET HUNG UP ON YOUR APP IDEA. Don’t overthink it, your app doesn’t have to be perfect or even geared to a release on the store. Pick any app on any subject and just make it! Make a blank project and just start coding, and googling everything you need to know along the way.

The foundation you got from watching tutorials will give you the knowledge of what to google as you go along. You know what a collection view is, you know you need it for your app but you don’t remember how to implement it. Thats fine! Just google it, get it working in your project and move on to the next step!

The first app I ever made was a delivery application for medical marijuana complete with a shop, driver delivery tracking and payments with Stripe. It took 6 months to make and when all was said and done, it looked pretty okay!

Underneath the hood was a garbage fire, but what I learned with that project allowed my next app to be a little less of a garbage fire. It doesn’t matter if you’re doing something right or wrong, just get it working.

The knowledge you gain is worth the abomination you may create. Here’s some projects that are a must to complete so you have a solid understanding:

  • A real time chat application using firebase.
  • A map application using Mapkit
  • A to do list using coredata
  • A music playing app using AVFoundation
  • A picture taking app with filters.

Want to learn FAST? Don’t have time to sit and make a whole app? Still not feeling like you know what you’re doing? Speed Code!

What made me feel confident in my ability to code is by practicing what I call ‘Speed Coding’. This is my personal practice of picking an app, any app, then spending the next few hours making it as quick as I possibly can.

With your personal project, you may make a collection view once in 6 months (like what I did when I made my delivery application), however, when you speed code you make a dozen collection views in a week. Everything sticks better by doing!

The goal is to figure out what you know and what needs to be worked on. As you speed code, remind yourself you’re on a timer. Anything you cant google or write in about 10 minutes, skip and move on to the next part you’re trying to recreate. When you finish, go back to what stalled you and study it. For example, you may have made the views quickly, but when it came time to animate a menu slider you got lost some time. Go back and spend the time on how to implement that.

When you plan on speed coding, choose different areas that you might want to work on. Speed coding really helps with setting up UI, but it’s great for network calls as well. Google a list for a free weather api, movie showtimes api, list of presidents, amazon api and integrate those into your speed coding so you can get practice making a lot of network calls as well.

Here’s a list of apps I’ve recreated that really helped me grow: QuickBooks, LTK, Instagram, Youtube, Spotify, DoorDash, PostMates, BankOfAmericaApp, SnapChat, Pinterest, FanDango.

Not only do you get experience, but you kick start your portfolio!

GitHub Time

Congratulations, if you’ve done the previous steps, you’ve got some experience under your belt. You may not feel like it, but you’ve become a competent programmer.

Now it’s time to take all the projects you’ve recreated and worked on and put them on to GitHub. GitHub is a useful online tool where you can upload your projects and keep them updated without fear of losing them. GitFlow is an industry standard and it’s routinely used to push updates to your application.

Not only is it useful for making sure you don’t lose your application, but can also revert any changes you made to your app that completely caused it to break,. You can use your GitHub to show employers projects you’ve worked on. Learn how to add your projects to GitHub and how to check out a branch on a project and push an update.

Interview Time

Whats Next? I’ve Done The Projects and Want To Interview, But What Do I Need To Know To Be Ready?

Here’s a secret, rarely anyone feels ‘ready’ when it’s their time to interview. And interviewing is more of a skill nowadays than it is a way to gauge your programming. But by going over the list of what to know, and by reviewing your projects these interviews will be a walk in the park.


Above is the study guide I made, printed, and looked over repeatedly while looking for a job. I would spend a few hours a day learning every question and answer. If you can answer those questions and go in depth about them, then you’re ready. To be honest, when I started studying for my interview it showed me where some gaps in my knowledge were, so don’t feel dissuaded if you can’t answer any of these off the top of your head. Just look them up as you study and learn a little more.

Getting professional experience for your resume

So you know how to make an app, you’ve studied enough about swift and you have a few apps under your belt. If you released an app to the store, you can stop here and start your job search.

However, if you want to add some experience to your resume then follow along. How do you solidify your abilities to find that foot in the door? Find someone who wants an app!

This part is usually the most daunting to developers, getting your foot in the door by having professional experience for a company makes job hunting that much easier. Dont stress about getting that first job to help find your dream job, it’s easier than you think. What I did to find professional experience was simple: I messaged UI Designers on freelancing websites and asked them If I could recreate their designs in Xcode and give them the completed application.

The UIDesigners loved this, since they got a free, working and animated native application and I got resume experience. They would send figma files and I would recreate the app. From there a few of them actually recommended myself to some of their clients!

If you cant build that relationship, you can also find a local shop that might want an iOS app. Visit the strip in your town and visit small shops and ask them if they would like a free iOS app!

Let them know that usually an app costs around $34,000 but you need experience and would be happy to make them for free. (An unethical tip: Tell them you’re a student and you need to create an app for your thesis. It makes you seem less scam-artist and sketchy).

It helps to get a small shop on board if you already have a prototype to show them on your phone. However, you should be able to find a business or a UI Designer that wouldn’t mind you making a mobile application. From there, you have your first job (albeit, an unpaying one) as a professional iOS developer and instantly become 10x more appealing to employers. Put the job on your resume, and when it comes time to job hunt, you don’t need to reveal that you weren’t paid and did the job as a resume builder. Simply saying that you worked for x company or x-designer as an iOS developer will do.

The Job Hunt

If you’re looking for your first job, you’ve probably noticed that there’s not many jr. iOS Positions available, and the internships are designed for college students. What you’re not told is that the market for jr. developers is slim.

The solution? Apply to normal development jobs. Think of the job listings as a wish list, and the employers post their ideal candidate. However, often their expectations are much lower. That being said, don’t be shy to apply to every job opportunity you see. Getting experience doing interviews is invaluable, even for jobs you know you won’t get. If it gives you any comfort, I too applied to jobs before I was ready while simultaneously being deathly afraid of interviews. I’ve bombed so many interviews so horribly I bet the recruiters still laugh about it to this day. For example, one time I was doing an interview and was asked to create a delegate. I had made 100’s of delegates at this point, but I was so nervous doing interviews that my mind went blank.

I proceeded to Google how to make one on my phone, answered the interviewer in full confidence and they responded with, “uh, that’s how you make a delegate in Objective-C, not Swift”. They knew I had googled my answer on a question that should have been a conversation starter. I was so embarrassed I just said, “Thank you for your time” and hung up.

But with each failed interview I grew more confident, and eventually this confidence grew to the point where It showed and I saw myself in the final rounds of interviews often. A tip I learned for a confidence boost is that before the interview, pretend that you’ve already received an offer from another company and that you’re doing this interview to keep your options open.

One tip I recommend that helped immensely in getting to the final round of interviews is recreating the mobile app for jobs I really liked. When I received a response from a company I was interested in, I would download their app and recreate the core features in Xcode and send a link with a short clip (using streamable) and the GitHub link to the hiring recruiter over linked in. I nearly always saw myself in front of the companies engineer afterwards.

Another interview tip I used is that when I was asked, ” What do you look for most in a job?” I would respond with, “My end goal is to always grow better at developing. I want to find a job with strong senior programmers to help me grow my trade and guide me to better work in a team. Specifically I want to learn how to make enterprise scalable architecture.”

Always have a strong opinion on a framework ready as well. I would like to bring up the struggles I have working with CoreLocation and MapKit. I would talk about how for getting a user location it’s better to startUpdatingLocations, than it is to requestUserLocation because it’s faster. When requesting a user location, it can take a while, however you can user startUpdating, create a location variable optional, set that that variable with startUpdatingLocation, then when the location variable is set, you use stopUpdatingLocation. This way, if you have a GPS button the user doesn’t have to wait a few seconds to get their location. Small details like this show how you can work around api to increase user experience.

Final Note

I’ve been writing this on my lunch break and I know this guide is incomplete, and I’m not necessarily a word smith so i’ll be sure to update this post if anyone seems interested. If you have any questions or want some help, feel free to comment or message me!

Article on Reddit