If you missed Part 1, it’s not too late to catch up and read about how I went from zero to my first (real) program.
In this second part, I’ll go through the list of online courses, books and other resources I used to teach myself ”how to build iOS apps.”
As described in my first post, I broke down the main goal into smaller questions until I got to clear conclusions.
Question: Building apps… ok but how? What should I learn?
Question: Android or iOS? Windows (LOL) Blackberry (LOOOOL)?
Research: Googling around for programming languages…
Answer: Ok iOS = Swift or Obj-c, Android = Java (Kotlin didn’t exist yet when I started)
Question: What gear do I need?
Answer: iOS = Mac & iPhone or iPad needed (unless you want to boot a Windows Machine with MacOS … but good luck with that) Android = Any laptop that can run Android Studio & an Android device.
I already owned a Mac & an iPhone so the decision was quite easy for me. It was going to be iOS.
That will sound crazy to some of you but I picked Swift for two reasons. Obj-c looked super ugly to write while Swift was the shiny new stuff. And Apple wouldn’t launch a brand new language if it wasn’t to support it and put effort behind it.
Some of the courses listed below are obsolete as I’m writing this blog. The goal of this article is to show you how much went into teaching myself and not to give you a list of things to follow to be up to date with today’s state of iOS developement.
At the end of this post, I added a mini roadmap with the courses I would recommend to follow for someone who would start learning today.
This course has been updated since I finished it but it’s still obsolete as it only covers Swift 3 (while I’m writing this, we’re already on Swift 4.2).
In this first video-based iOS course made by Rob Percival I learned how to build 15 real-world apps. He kept the complexity level to a bare minimum while explaining very clearly and thoroughly all the concepts needed to start building iOS apps. Building clones of Flappy Birds, Tinder, Instagram and Snapchat on my first iOS-related course was mind blowing.
I started working on my first app after a few chapters with Rob. A good friend of mine is gluten intolerant, and I wanted to build an app that would reference pubs/bars where we’d find gluten-free beers in London, UK, where I used to live back in 2015.
At the end of the course, I had a very ugly and very messy, yet functional, minimal viable product (MVP) for my first iOS app. Yay!
[Disclaimer] Don’t buy this course either. It’s obsolete and hasn’t been updated.
This course was simply awesome! Mark has a consulting background and is a great teacher. He always brings it back to what’s actually needed in the real world when developing apps for clients and for yourself, whether you do it alone or as a team.
This course covered some elements and concepts that had been covered by the first course, but it was actually very valuable to review them to ensure I had understood them properly. Mark has a great attention to detail, and also thinks beyond the actual code by giving great design and UX tips.
I kept working on my personal project whilst taking this course.
The following courses weren’t specifically related to iOS but they helped me realize that I had already learnt a lot. Going back to fundamentals and making sure you understand everything is a good way to get a self-confidence boost.
🎓 Course 3: Foundation of Programming: Fundamentals [Lynda]
[Disclaimer] First released in 2011, very old course, but the content itself is still very relevant today for complete beginners.
I took this course because I heard that Simon Allardice was a great teacher. Foundations of Programming is a suite of video-based courses which cover several CS topics. I first looked at the fundamentals and found it super easy to understand. It made me realise that I had come a long way. I ended up watching the whole course in speed 2x to ensure I didn’t miss any relevant information.
Next, I dove into the Object Oriented Design module which took me about 3 hours to watch. Simon explains the main Object Oriented Programming [OOP] principles in a very simple way: object, classes, inheritance… Definitely worth going through this at least once. These are concepts critical to understand, as Swift is an object oriented language and you will need to understand that to build apps that contain, use, process, store any kind of data.
🎓 Course 5: Foundations of Programming: Databases [Lynda]
Though like the previous two courses, this module isn’t dedicated to Swift, it was great to explore for two reasons: - Understand the options we have when it comes to databases - Learn about the key elements to keep in mind when it comes to data modelling
You’ll learn about relational and nonrelational databases and get tips to plan ahead. It’ll help you pick the right architecture for the right product to scale.
This short course about refactoring allowed me to understand the process of taking existing code and improving it. It’s been an eye-opener in some cases. Simon tells us exactly what to look for in our code to make it more readable and understandable. Refactoring also helps to add new features in an easier, cleaner and faster way. This is definitely a course worth going back to once in awhile to optimise your base code before major updates. Once again, this was not Swift specific but the value here came from the principles I could learn and the tips on how to identify refactorable code, which can be applied across languages.
[Disclaimer] This is mostly going to be useful for concepts and theories around iOS and development frameworks. Don’t pay attention to any part showing actual code, this is old stuff now.
In this iOS Essential Training, Simon covered some additional topics that weren’t looked at in the previous courses. In addition, his approach to the core concepts is awesome. He manages to explain complex principles like the model view controller framework (MVC), the concept of delegation and the application structure and lifecycle in a very simple and visual way. Definitely worth it!
[Disclaimer] Don’t skip this one, it’s awesome. Just pick the latest version. As off when I’m writing this, this is the one you want to look into: https://itunes.apple.com/us/course/developing-ios-11-apps-with-swift/id1309275316
This is an amazing course and it’s available for free. It is given by Paul Hegarty as part of the Computer Science Degree of Stanford University (USA). I actually tried to take this course early on after my first iOS course, but I quickly realised that both the level and the pace were way too much for me. I decided to come back to it after I had been through all the previously mentioned courses and it’s been great. This course is definitely worth it. It’s not everyday that you can learn something what full-time Standford students learn as part of their mega expensive degree.
A few weeks after I finished the Stanford course, Mark Price released his Intermediate iOS course in collaboration with Nick Walter, another great iOS teacher on Udemy. This video-based course is the logical continuation of Mark’s first course. The topics covered bring us even closer to the real world with modules such as Push notifications, back-end as a service (BaaS) with Firebase, app monetisation via in-app purchase (IAP), advertising (Google AdMod) or Apple Pay and releasing apps to beta-testers via Test Flight.
Would I enjoy building a game? I had no idea, I didn’t feel particularly drawn to that side of mobile development but as part of my learning journey it was worth a shot. Though some of the previous iOS courses I had taken had sections about building games and this course, dedicated to SpriteKit (iOS’s framework for making 2D animated games) was interesting to go through. With the basics covered in this course, you’ll have enough knowledge to start building simple iOS games. To give you an idea, my friend developed a simple game called 🕹 Stupid Bros right after completing this course.
At this point in my learning journey, I had gone through a bunch of courses and I had a pretty good overview of what building iOS apps looked like. All the way through these courses, I was working on my first app: Gluten-Free London. With enough skills in my bag, I stopped taking courses and instead started spending my free time working on my own apps, facing new problems, researching them and coming up with solutions to move forward.
Learning by doing taught me 10x more than going through online courses or books. It forces you to think by yourself and know what the real problem is in order to research the right solution. If you do not understand the problem you are facing (i.e. why is the app crashing right now?, why is this view not showing even after all my constraints are set?, why do I have so many logs popping in my console?), there is no way you will know what to research and that won’t lead you to a proper solution.
Googling one thing after the next for literaly tens if not hundreds of hours is really what brought me to the next level.
It was becoming easier to build pretty much any feature I could think of, but as I was working on my apps, I was also wondering if the code I was writing would be considered a ‘quality code’ or not. I figured it was probably not… actually it was probably a terrible code. For a while I didn’t care much since things were working and you shouldn’t care either when you first start.
It’s when I started considering doing iOS not only as a hobby but as a career either working for a company or for myself, that I thought it was the time to re-inforce a few things to start writing better code.
Here is the one book I would definitely recommend:
📘 iOS Programming: The Big Nerd Ranch Guide (6th Edition) ⇠ The one I got.
Or newest edition in pre-orders:
⚠️ Major tip
Whatever the format you pick to learn … don’t just read, watch or listen… CODE! Even if it’s re-writing what you see or read, you will see that you will make mistake, skip a line, make a typo, use the wrong auto-complete option… and this is GOOD. This will force you to read again, compare with the example you are following, see what’s different and where you f**ked up. This is super valuable. Because once you fixed it, you’ll know why and you won’t make the same mistake again (hopefully) or if you do, it will take you half the time to fix it. That’s how we learn.
You will find that learning never really stops. But at some point you need to let go of courses & tutorials and start working on your own projects (or get a job). This will act as a springboard to truly make progress and gain confidence.
There is an issue with learning resources out there. I believe it is generalized across all programming languages and possibly many disciplines. You can easily find a bunch of beginner and advanced resources. But what’s right there in the middle is less covered. And it’s less covered because the gap between being a beginner and being an experienced developer is very blur. That middle phase can last longer for some than others.
For me personaly, I figured that I had learnt enough to call myself an iOS developer once I started shipping my apps and seeing users finding value in them. For you it might be when you get your first recruiter call, when you sell your first in-app purchase or when you finally get a junior position.
We all have different goals, and programming is just a mean to achieve that goal so don’t give up. Give yourself time and be consistent. Not giving up is already a giant leap towards success.
As part of my ongoing learning, I often spend a bit of time reading blogs watching videos about Swift, iOS and programming in general. Here are a few resources I regularly get back to:
Google things, don’t ask others unless you have googled it and read a bunch of stackoverlow answers. They are many experienced developers out there that I’m sure would be happy to help. But unfortunately they are also very busy so show some willingness to learn by yoursel first before seeking help from others.
⚠️ Major tip 2
Swift Playgrounds can be super useful to try things out without messing up a project you are working on. Definitely a great way to experiment.
If I was to start from scratch today, I would follow this.
If you have absolutely no background in Programming, like I was when I started. You might want to try with the basics before going straight into iOS.
Here are two nice options for that:
🎓 Course 0 CS50 - Harvard University: Introduction to Computer Science, given every semester at Harvard and available for free on YouTube. This is golden.
Step 1: Acquire basic knowledge
First course I would recommend and a big shoutout to the Devslopes team because I owe them a lot. This is the latest version of the course I took years ago. It’s updated for iOS 12 and Swift 4 so you’ll dive straight into it.
If when you start this course, you feel like it’s going to fast for you or there are still concepts you haven’t fully understood, don’t force it. Leave it for later and grab a second Udemy course.
I heard Angela Yu’s courses are really nice. I even purchased one but never got around to complete it. Here is one that could further help you.
If you needed that second Udemy courses, now go back to the Standford course. You should now be ready to follow along. I had to watch some videos twice to understand things fully. Don’t worry, take your time and you will get there.
Step 2: Start shipping
Once you’re done with the first 2 steps, you should be in a position to start working on your own projects. It doesn’t matter if you build something useful for others. Build something useful for yourself. Even if it’s your own to do list or weather app, or even if it’s something stupid, just build something.
Read about APIs: here is a great GitHub repository full of public APIs you can easily tap into and create a small app based on that.
For example, TasteDive’s API let’s you run query for tv shows, movies and music recommendations. Go read the doc and see if you can build something cool with that.
Step 3: Bring your skills to the next level
Once you ship your first app, it’s time to take your skills to the next level.
I’m coming back on this Big Nerd Ranch book as you can see. But it helped me so much, I still recommend this as a golden resource today.
Step 4: Getting job ready? If that’s what you are aiming for.
Another great book that I still have to finish… because I never really aimed for a full time job as a developer (yet)
This book will get your interview-ready, with a bunch of interview questions about algorithms and coding on the whiteboard. Don’t try to read it too early or you will be disgusted. It’s not easy to get job ready, but start slow with the courses that will help you learn how to ship. Then get job ready, you will have gone too far to turn your back around and give up.
If you’re read my other blog posts, you will think that I repeat myself but building a portfolio is key. That’s the only way to show the value of your work. Anybody can sit in front of Udemy for 56 hours in a row and say they took online courses. But a recruiter could think that you’ve been watching Netflix on the other screen all the way through the courses. They won’t know your worth if they can’t see what you’re able to build. And for that you need to ship.
Do yourself a favor and create a small website for yourself where you can host some of your work. A bit like the page I made here for my portfolio 📱.
I wish you all the best in your learning journey. Be patient! There is a great reward at the end of the tunnel. It takes efforts to go through it but with passion and patience we get there. 😇 Take it easy, one step at a time and you will get there.
If you’ve enjoyed this article, try to think of one person that could benefit from reading it and share it with him or her.
Till next time.