Having studied iOS application development using Swift over the past couple of years, I believe that there fails to exist a single learning path to gaining proficiency in this domain. This is my attempt to create one.
Just about a year ago, I published my first learning guide for high schoolers on Machine Learning and Artificial Intelligence. As it was well-received by the general public, with many individuals indicating to me that it helped their progress tremendously. As a result, I decided to do the same for another sub-domain of Computer Science that I have a stark interest in - iOS Development and Swift.
The main purpose of Swift is to build applications that can be published on the Apple App Store. Being a relatively new language, Swift has been developed by Apple to be a language that priortizes simplicity, efficiency and interpretability over all, which is what makes it trump other languages such as Java and Objective-C when it comes to developing applications.
In this guide, I outline a series of steps that, from my experience, will allow one to go from a beginner level to an advanced one in a matter of months. I do believe that iOS Development is one of the most promising areas in software development, and thus would encourage any individual interested in this area to read this guide.
So, let's get to it.
If you've never studied Computer Science before, don't worry at all - edX provides an online version of CS 50, the introductory to the subject course taught at Harvard. Prof. Malan's lectures have introduced millions of individuals to the field, and is known to be the de-facto starting point for anyone looking to enter the field online. It may take a while to get through, but you will come away from this course with a fundamental understanding of writing code that will underlie any programming venture you engage in in the future.
This completely free course can be found here. If you have a fundamental understanding of programing (e.g. through a high school course), feel free to skip this step.
Like any other programming language, Swift has a syntax that is fairly unique. While I've never been an advocate for memorizing the syntax of any language, I do believe that it is important for one to immerse themselves with the very basics prior to exploring a language, so that your first application-driven learnings are not focused on trying to understand the syntax itself. The good thing about Swift is that its syntax is trivially easy - it shouldn't take more than a day of exploring to get familiar with it. Swift probably has a simpler syntax than any of the major languages out there (bar Python, maybe).
To learn the syntax, I'd suggest going through the TutorialsPoint guide. It provides a quick, high-level overview of basic aspects of Swift, and can be completed within a few hours.
After that point, it's helpful to have this Github-based cheat sheet bookmarked (as well as the Swift Documentation website).
For this step, I'd recommend none other than Angela Yu from the London App Brewery. Their course is usually available on Udemy for around $15, and it is well worth the price.
The course guides you from the very basics of putting together View Controllers in order to make an app, to the more complicated aspects of application development: working with APIs, understanding how to implement a backend and improving the user interface. It does so in an extremely practical manner too - Angela explains the concepts and theory as you build an app, allowing for you to see how to implement theory in practise.
It'll probably take a month, maybe even a little more, of dedicated programming, but once you've completed this course, you are bound to have a fundamental grounding in Swift. Not only this, but you will have a series of completed projects to refer to for completed code as you continue building your own projects down the line.
iOS development, and Swift, provides access to so many functionalities and libraries that a single course like Angela's can never cover everything. As a result, it is useful to learn the theory for a host of these aspects through tutorials, implement them in short hacks and thus gain a solid grasp of their underlying applications.
Youtube channels like Brian Advent, Lets Build That App and CodeWithChris provide great resources for learning these.
To start off with, I recommend learning and implementing applications incorporating some of the following Swift functionalities:
- CoreML: This allows you to integrate Machine Learning models into your iOS applications. You don't need to have any prior experience with Machine Learning, as many trained models are pre-built.
- ARKit: This allows for the creation of augmented reality features in your applications.
- Core Animation: This provides smooth animations and quality graphics without burdening the processor it is running on.
- Sprite Kit: This is used to make iOS games, and is used for drawing in two-dimensions.
- Core Data: This allows your to manage the model layer objects within your applications, though it is a relatively advanced concept.
There are many more frameworks, libraries and functionalities that I haven't mentioned, though you can find some more through the following Github repository.
For the final 'learning' stage, I'd recommend building a significant application, which will probably take about a month of continued development.
Typically, the main purpose behind an iOS application is to solve a problem, whether it be saving time, reducing complexity or improving the outreach. As a result, the best way to learn how to create your own application is by finding a problem of personal significance to you, planning an approach to solving it and then implementing this solution as an iOS application.
My personal first project was an app called 'Probbase' - it attempted to solve the problem of the limited resources that high school students are given to revise for their exams with. It allowed for users to scan in sheets of questions given throughout the year, sort them into a database of subjects/sub-topics and eventually access them again when it came time for exams. A friend of mine's first project was an application that sounded an alarm to wake you up only when a football match was close or interesting - if it was a boring match so far, it allowed you to sleep through.
If you are out of ideas for what to build, look to websites like the following for ideas. However, the more personal the issue is to you, the more engaged you will feel with developing it.
While you should be able to implement significant portions of the application using your existing knowledge, you will likely run into times when you are unaware of how to implement a functionality. During times like this, Google (and in particular, Stack Overflow) will come in handy. Just remember though, Swift allows you to implement almost any kind of functionality that you can think of - never be put off by an idea because you don't think it can be done. Rather, you probably just aren't aware of how it can be done. Fortunately, the internet can almost always bridge this gap for you.
It is particularly helpful to go through the process of publishing your first personal app to the App Store - while it can be tiresome, administrative and at times does seem over-complicated, it is a useful process to complete at least once. While Angela's course does provide an outline for how to do so, you could also check out the following article.
Once you've had experience building a fully-fledged application, there is no limit to what you can build in Swift. There's a few routes you can go down.
- Personal: You can choose to continue building projects of personal significance to simply improve your overall understanding of Swift. I suggest publishing all created projects on a platform like Github, as it improves your online outreach and status.
- Commercial: Many feel that creating applications is not very useful unless you begin to actually publicise these creations, and potentially even monetise them. If you truly wish to make an application that it meaningful to others, you should learn how to extend their outreach. Whether you'd like to create a business or not using this application, it is up to you, but it does require far more non-programming skills than you have been accustomed to so far. You could look into the sources for a headstart: Business Daily, Forbes and StyleLab.
- Freelance: If you wish to use your iOS development skills to generate an income, freelance is a great way to do so, particularly when you already have a full-time commitment to studies, high school or another job. Sites like Upwork, Toptal and Elance provide platforms to secure job, but if you are just starting out with your freelance work, I think that it is better to personally reach out to companies in your area or those you have connections with, and ask if you could help by building an iOS platform for them. You'll need a host of completed projects to show as proof of your abilities though.
Learning iOS development is easier than it seems, particularly for a high school student. What makes it so difficult for many people is the lack of direction that they are provided with when learning the art - I hope that this guide provides a solution to this. With dedicated practise, consistent creations and an innovative mindset, I believe that anyone can succeed in the domain of iOS application development within the space of a 3-6 months.
If you have additions or possible improvements to this guide, feel free to make a PR to this repository. And for feedback, collaborations or just general queries, feel free to write to me @ [email protected].