When I started my iOS journey, these resources helped and motivated me to read or watch stories of other human beings struggling with a similar set of obstacles and problems, and overcoming them. And that’s exactly why I decided to put this little article together.
Disclaimer: Learning Resource Paralysis
An important disclaimer that I want to emphasize at the very beginning is that as with every other “How to become” piece of content, this article is strongly subjective and might not apply to everyone. The fact that you may take a different approach to your learning doesn’t mean you are doing something wrong.
I have an urge to highlight this because, from my experience, beginner engineers often struggle with decision paralysis from all the learning materials and resources that are available, and that causes them to never start deep learning of a given subject. So, again: If you haven’t taken a single course or used a single resource I mention here, it's okay. There are almost endless opportunities.
Is It a Good Idea to Learn iOS Development in 2022?
Let’s start from a different angle. Does it still make sense to start with iOS development in 2022? The same question occurred to me in 2019 when I was beginning my iOS journey. I came across a few videos and articles questioning whether it makes sense to learn native mobile development in the age of emerging cross-platform solutions like React Native or Flutter.
Nobody wants to spend months of hard work on studying and learning a platform that is in decline, right? Other thoughts might be whether you should choose to learn something completely different, cool and trendy, something like VR development, blockchain engineering, etc. Shouldn’t you be worried about a future in which mobile devices are replaced by augmented reality wearables?
These are all good questions. The truth is that mobile development is really already a standard software development branch and was new (and trendy) 10 years ago. I also don’t know what the future holds and what big tech companies are working on in secret. But I do have some ideas and key points that might calm you down.
- Cross-platform apps won’t replace native iOS apps. They have their place on the market. In some cases, it is the right decision to go with cross-platform apps. But that doesn’t mean that the majority of mobile apps won’t still be native. Dig deeper into cross-platform vs. native with this video.
- Humankind is not giving up on phones yet. Apps aren’t going anywhere anytime soon.
- Even if mobile usage/mobile apps start to decline, the good thing is that you’re already in the software development world and can transform to backend, web frontend or any of the currently trending branches easier than before. Has Apple finally released the long-awaited AR glasses? Great, you can immediately start with ARKit, and the transition will be easier because you already know Apple’s ecosystem. You can also develop for Apple Watch, CarPlay and, potentially, any other device produced by Apple. And we can be sure that Apple won’t let any (hype) train leave without being aboard.
Is a Computer Science Background Needed?
Alright, let's stop with the philosophical musings about the future of mobile and, instead, focus on the learning path itself. For me, in the beginning, another important question was whether I need to have a proper computer science background. The quick answer is: No, you don’t need a computer science degree to become an iOS engineer, but I strongly believe that at least some basic CS knowledge is very helpful. For that, I recommend an amazing course by Harvard CS50's Introduction to Computer Science.
CS50 is amazing for multiple reasons. The main one for me is Professor David J. Malan because he’s just a great teacher who can explain every topic interactively and excitingly. The course itself is about general CS concepts, algorithms and data structures. You will use the programming languages C and Python to solve various tasks, such as ordering an array of elements without out-of-the-box functions, updating the RGB schema of every single pixel in the photo to apply an Instagram-like filter and much more.
The syllabus is slightly changed/updated every year. When I was doing CS50 in 2019, the last week of the course was dedicated to iOS development. It seems that, for this year, there is no major part of the course focused on that — but I still highly recommend it.
UIKit or SwiftUI
Apple offers engineers multiple ways to build iOS apps. For the UI frameworks, engineers choose whether they build their app with older and more robust UIKit or newer, trendy but, in some cases, not finished SwiftUI. This article is not meant to describe their differences, pros and cons. I want to try to help with deciding on whether you should start learning the older UIKit or jump right into SwiftUI.
Many students might think that newer is better. Isn’t the newer SwiftUI the future? I think it is. But is it a strong enough argument to skip learning UIKit? I don’t think so. Even though you can find iOS beginner courses and boot camps entirely taught in SwiftUI, I still think it’s better to start with the “old” way of developing an iOS app — and that's UIKit. Why? Simply because the chance of working with UIKit code this year, and next year, and even the year after is still pretty high.
Maybe you will join a startup company that started developing their app entirely with SwiftUI but chances are that, as a junior iOS engineer, you will work on an already-marketed app that will very probably be written with UIKit. Companies usually don’t decide to rewrite their whole app just because a new technology was released to the market. From my personal experience with the project I am working on right now, SwiftUI is not yet fully ready to be the only UI framework for complex production apps. So we use both SwiftUI and UIKit within one project.
I took the approach of starting with UIKit and then moving to SwiftUI, and I don’t regret it. Even though I do work mainly with SwiftUI nowadays, the base knowledge of the UIKit framework is crucial for my work. And truth to be told, I think that once you’re familiar with UIKit, the learning time needed for SwiftUI will be much shorter. It's not the fastest way of learning iOS development but, in my opinion, it's the right one.
Getting Into the iOS World
Okay, so you passed your CS intro class (or not) and are now ready to jump into the iOS world. There are two resources I would recommend for this phase.
Let’s talk about them a bit more in detail. The Complete iOS App Development Bootcamp and its creator, Dr. Angela Yu, is probably the course and person that were mentioned every time I was talking to junior engineers or someone who was just learning iOS. With over 74k ratings and 4.8 stars on Udemy, it's easily one of the most popular courses.
Dr. Angela does a very good job of introducing you to the world of iOS development from the very beginning. But her course is not just full of technical stuff; she also adds a lot of “soft” topics to keep you motivated to learn. During the course, you will build many different apps. Very soon, you’ll start integrating backend API requests, etc. Even though the apps you build are always just one use case app, you will quickly get into real-world use cases — like integrating Firebase into your app or saving data locally with the Core Data framework.
There are also topics that I think are not necessary for a beginner iOS engineer, such as ARKit or Apple’s machine learning framework. If you fancy, try these lessons as well; it's a fun thing to have an app that can recognize what is in the picture, etc. But don’t feel like you have to complete 100% of the course.
After the course from Dr. Angela, you are on a really good track to becoming an iOS engineer. You might feel like it's time to move to the next step, to more complex topics. However, I strongly recommend doing the 100 Days of Swift first. Even though the topics are very similar, Paul Hudson does a great job of looking at problem-solving from a different perspective. He has a slightly different teaching style, and that’s exactly what you need at the beginning to understand the basics of Swift and iOS development. Repetition is king here — and that perfectly matches how the course is structured. As Paul says:
“If you want to make a success of this course, there are only two rules:
- Every day, you spend one hour reading or watching Swift tutorials, or writing Swift code.
- Every day, you post about your progress to the social media site of your choosing. Tell people!”
The one-hour-a-day part is the important one here. The lectures are built this way. And having already gone through Angela's course (presumably), you can do more lectures per day if you’re a fast learner. On the other hand, if you need more time to grasp every single topic, the course is great for that as well.
Example of an app built during 100 Days of Swift by hackingwithswift.com
What’s Next? Build a Real-world App
I believe this is the most crucial part of the learning journey. And even though I don’t have the proper statistics, I feel that this stage is where the majority of the students drop out. I am talking about the stage where you have some basic understanding and knowledge about iOS, you went through several courses and touched on multiple topics, you’re connecting puzzle pieces of knowledge and the final image starts to materialize. But you just don’t feel ready to take on a job interview yet, there are some topics that you don’t understand and you just can’t imagine yourself building a standalone real-world app by yourself. You don’t want to get back to the basics again, but the bridge from your situation to the next level seems too complex. This results in a lack of motivation and may eventually end in you giving up on iOS learning.
If you are in this phase, don’t worry. I have experienced exactly these feelings and I have a great course for you.
The course is from Sean Allan, another very well-known figure in the iOS world. The course is called iOS Dev Job Interview Practice - Take Home Project. It's the perfect course for helping you cross over from beginner to job-interview-ready.
In the course, you will be making the GitHub Followers app. The whole process of making the app is designed to feel very similar to a real-world app or, as the name suggests, a take-home test project from a job interview. You will make the UI fully programmatically — no storyboards. Sean focuses on all the details. Correct organization of the code, avoiding code duplicates, refactoring and, in general, building the project as if you need to pass a job interview. Sean himself has worked on multiple projects for companies or his own apps and knows all the necessary practical details.
This course helped me to feel comfortable enough to take a chance, apply for a job at STRV and prepare the test project.
Design for GitHub Followers app, Source: https://seanallen.co/
Go Down the Rabbit Hole
I believe that consistency in learning is a key to success. Rather than spending every other weekend, whole Saturdays staring at the screen trying to learn iOS, I recommend spending less time on studying but doing so more frequently. Are you a student or are working at a non-engineering job? Spend 1–2 hours every day studying. In the beginning, I often spent too many hours in one day, then didn’t open Xcode for a week, and I ended up not remembering anything and having to start the lesson over again.
Try to utilize tunnel vision with your goal of becoming an iOS engineer. What worked for me was to surround myself with the most approachable topics from the entire software development and Apple world.
I have some tips on how you can jump down the rabbit hole and keep yourself in tunnel vision mode. These activities are less about actively learning time and more about passively feeding yourself via the environment. It’s like when you’re trying to lose weight: It's great to go to the gym a couple of times a week, but what can make the difference is the “passive activities” that accumulate through your day — walking instead of driving a car, biking as your form of commuting, drinking water instead of soda, etc. You know what I mean.
Here are my tips:
- Listen to the Swift by Sundell podcast, even the old episodes
- Watch Sean Allan’s Swift News
- Subscribe to Firsehip for funny yet educational content from the whole software engineering field; for example, How to Land a 100K/yr Tech Job - 10 Strategies or 10 Design Patterns Explained in 10 Minutes
- Follow Dorian Develops on his journey in software development, his ups and downs in his programming career and strategies and ideas to become a good software engineer
- Join Sean Allan’s Slack group and chat with other students or at least read their posts
- Watch older WWDC presentations by Apple
- Tweet or write a blog about your progress, even if only your partner will read it :)
- Watch SwiftUI Roadmap by Karin Prater and subscribe to her amazing channel full of great educational content
- Watch the detailed and technically-focused How to Become an iOS Developer by Paul Hudson
- Join the iOS community on Twitter
In short, surround yourself with the iOS world. Live it. Think about it. Talk about it. This will help you on your journey.
(Don’t) Get a Mentor!
In most videos and articles about how to learn software development, you will be advised to get a mentor, a senior dev in the field to help you with the learning. I can only partially agree.
All branches of software development — backend, web and mobile — are in high demand. There are not enough people for the jobs. This has one side effect and that is that everyone can become senior quite quickly, compared to other fields. This may give the senior people the confidence to mentor others, but I think that only a small amount of senior devs are suitable for the mentor role.
In fact, I think it's so few of them that there is a high chance of being mentored by the wrong person. Is it a big deal, you ask? Might be. The wrong mentor can quickly demotivate you and can have a bad influence on you, even if the intentions are good!
If the mentor can’t adapt to your skills and learning speed, it may quickly end up with you doubting your skills and yourself. Imagine you are with a senior dev who’s explaining some advanced concept, you don’t understand his way of explaining and don’t get the topic. The mentor starts losing patience and you might start doubting yourself when, in fact, maybe the mentor chose the wrong way of explaining the topic — or maybe you were not ready for this topic at all. From my experience, the more junior the student is, the harder it is to get the right mentor.
So, as an alternative, I recommend getting in touch with other people who are learning on the same level. Talk with them about the problems you’re facing. Don’t be shy to make mistakes and ask the wrong questions. Chances are that other students might have been making the same mistake just a month ago and will give you their beginners’ perspective.
Personally, what helped me the most was talking about my journey with an iOS engineer who was also self-taught. His way of explaining stuff and presenting concepts was much more understandable for me, an equally self-taught engineer.
Don’t get me wrong, I am not saying that having a mentor is a bad thing. I think it’s an awesome thing — but to get a suitable mentor early on in your career is, from my perspective, a hard thing to accomplish. As you evolve as an engineer, it will be much easier for you, as well as for the senior-dev mentors, to talk about common topics.
Becoming iOS Engineer via the STRV Academy
I’ll sneak in a little STRV promo. Another option, yet limited by location and time and only for those who’ve passed basic iOS introduction courses, could be the STRV Academy: Becoming an iOS Engineer. After two years marked by Covid-19, STRV is back with its proven concept of an offline, hands-on academy open for applications now. And if you miss this year's dates, stay on the lookout next year. It's sure to be back.
Bonus: Are You a QA Engineer?
If you are working as a QA engineer, analyst or tester and you’d like to transition to iOS development, this part is for you. I can help here as well — because that’s exactly my story.
A couple of years back, I was working as a QA Tester. There was a task that nobody on the project wanted to push forward: test automation on iOS and Android. I decided I will try to pursue this mission myself. I chose to start with iOS because my cooperation with the iOS engineers in the team was pleasant.
I didn’t know much about it because, in my previous job, I was writing automated tests in Java purely for API. Mobile test automation was very new to me. At first, I had to decide whether to use Appium, which could run tests for both iOS and Android, or to go the native route. Luckily, the resources I got into made me go the native way. If you’d like, read more about Why Use Native UI Test Automation for Mobile Apps.
This goal of mine, to create UI automated tests for our iOS app, brought me to this course — which is nothing in comparison to the other courses I’ve recommended, but it's what I started with. And it sent me in a good direction. What followed was a lot of Googling, try-fail situations and, finally, writing some tests in Swift for XCUITest. In the end, none of them were used in the production CI. But it laid my Swift foundation and helped me to get on the track of iOS development.
You Can Do It!
Good luck on your iOS journey. Get in touch in case of any questions or concerns, I will be more than happy to discuss any topic.
And to end with, I’d like to thank Gleb, Honza, Filip, Ondra, Dan and everyone who has helped (and is still helping) me on my journey.