Over the past couple of years I’ve made the journey from being completely new to the world of computer programming to having an app listed in the iOS App Store. It’s been a fascinating journey and completely self-taught, so I thought it might be useful to share my experiences here for others who are setting off down a similar path. Before I get into detail though, there are a couple of things to mention up front:
- You don’t need to be a math guru or hardcore computer nerd to get into programming. It helps to have a logical mind and enjoy problem solving, but there are zero prerequisites. To illustrate the point, I was a foreign language student in University.
- Everything sounds hard until you actually start doing it, and programming is no different. If the words ‘recursion’, ‘view controller lifecycle’ and even ‘algorithm’ fill you with dread that’s likely because you’ve either never heard of them or nobody’s ever properly explained the concepts to you. Both of those problems are eminently solvable.
So, if you’re still with me, it’s worth covering off the things you’ll need to develop iOS apps up front. Fortunately, it’s a pretty short list:
- Any reasonably up-to-date Mac computer. For proof that age is no barrier, mine’s a 2012 MacBook Pro.
- The latest version of Xcode, which you can download free from the Mac App Store.
And that’s it. Optionally you might also want:
- An iOS device (iPhone or iPad). Because it’s cool to carry your app around and show it to your friends.
- An Apple Developer account. This costs $99 a year but you don’t need it until you’re ready to submit your app to the App Store (or unless you want to use certain bits of advanced functionality like CloudKit or Apple Pay). Unless you have 💰 burning a hole in your pocket, I’d suggest you hold out paying until you really need to.
An iOS development curriculum
It’s perfectly possible to learn all the basics (as well as some of the more advanced stuff) you need to get started developing iOS apps by following just a handful of online courses. Even better, many of the best ones are completely free. I learnt almost everything I know about computer programming from just three courses, all made available for free on iTunes U by Stanford University. While there are probably quicker ways to get to your first iOS app, I really recommend this route to anyone who wants to get a proper understanding of good software engineering principles and how the code you’re writing actually works, as opposed to just copying and pasting code that hasn’t been fully explained. Learning to think and solve problems for yourself now will pay dividends when the training wheels come off, and helps if you want to move on to other programming languages later. So, without further ado, these are the three courses I most highly recommend:
1: Stanford CS106A: Programming Methodology
Having talked a lot about developing for iOS, the first course I recommend you follow doesn’t actually involve any iOS development at all. Stanford’s CS106A is recognized as one of the best introductory software engineering courses around, and uses the Java programming language and a development environment called Eclipse (available for free) to introduce the principles of writing good code. It covers off all the basic programming concepts, with a focus on getting you to apply good software engineering principles to your code right from the start. While the lectures may look a bit old now (the course on offer is still the 2007 version), the concepts you’re introduced too are all still relevant today, and the lecturer (Mehran Sahami) is incredibly engaging – which might be just what you need in an introductory computer programming course! The assignments are fun too, and include building graphical computer games, as well as a simple social network. The content is well-paced, and is aimed at those with little to no previous experience.
2: Stanford CS106B: Programming Abstractions
Not sure where to go after CS106A? The obvious answer is CS106B, and that’s exactly what I did. The second part of Stanford’s introductory software engineering class moves you from Java into the less forgiving C++. This gets you comfortable working in multiple different programming languages, and gives you a chance to learn about important concepts such as pointers and memory management. While the whole course is worth following, if you’re eager to transition to iOS development as early as possible you could probably get away with following the course up to and including the topic of recursion before skipping the rest and moving on to my third and final recommended course.
3: Stanford CS193P: Developing iOS11 Apps with Swift
While I enjoyed and highly recommend the first two courses mentioned above, CS193P really is in a league of its own as the introductory iOS software development course. Paul Hegarty is supremely knowledgable (as you might expect from someone who went to work for Steve Jobs as his first job), and does a terrific job of introducing both the Swift programming language and iOS as a development platform. The learning curve is relatively steep to begin with as you learn both a new platform and a new language, but if you follow all the assignments and do the necessary reading it won’t be long before you’ll feel at home developing in Xcode. It’s probably worth mentioning that, even though you won’t meet the suggested pre-requisites for CS193P if you’ve only completed CS106A & B, the jump isn’t unduly challenging. I’d highly recommend giving it a go, and you can always turn back later if you realise it’s a step too far.
Of course, there are way more introductory iOS and generic software engineering courses than those mentioned above. In particular, if you’re looking for something along the lines of CS106A/B but are put off by the quality of the videos or the idea of studying two separate courses, then Harvard’s CS50 (offered free online via edX) is a highly regarded and polished alternative. I’ve followed a handful of the lectures and the style is similarly engaging, plus Harvard actively tries to cultivate a community of students around the course. My overall impression was that CS50 is faster paced than Stanford’s offerings, and the syllabus seems to cover off most of the content of both CS106A and CS106B in one go – while perhaps sacrificing a bit of depth. You’ll also get exposure to a much broader variety of programming languages – including C and Python. You could always follow a handful of lectures from each of CS50 and CS106A before deciding which to commit to, and it’s probably safe to go straight from CS50 to CS193P if you want to get working in Xcode as quickly as possible.
Another worthy mention is Treehouse, which offers a range of courses on topics including iOS and Android development, as well as web development. Unlike all the options I’ve mentioned so far Treehouse is a paid service, but the $25 monthly fee is pretty reasonable so long as you’re making good use of it. My personal view is that a service like Treehouse is useful if, having started following CS193P, you think you need more time familiarising yourself with Swift as a language – or if you want to pick up on a particular topic that isn’t covered off by the Stanford course. The videos are useful and high quality, but I prefer Stanford and Harvard’s focus on teaching the fundamental software engineering concepts that you can learn and apply elsewhere.
To wrap up, if you want to give software development a shot there really is very little to stop you – even if you’re a complete beginner. If you’re keen on iOS development in particular, then you could do a lot worse than starting with either Stanford’s CS106 offering or Harvard’s CS50 before progressing on to CS193P. Once you’ve finished these courses you’ll have an understanding of what good software engineering looks like, familiarity with multiple programming languages, and you’ll know your way around Xcode and Apple’s iOS APIs.
If you’ve done all of the above and still want to learn more, I highly recommend downloading the WWDC app for iPhone or iPad (or visiting the website). The app is full of talks from Apple’s annual developer conference; introducing new iOS features and going in depth on old ones. These are a must the next time you want to add geolocation features to your new app, or to work out how to implement Siri Shortcuts integration.