When we want to learn how to play an instrument, learn to dance, or play a sport, we know that for each hour of performance, we will need to put in many hours of practice.
Programming is the same way where we “perform” by making an app. To learn and get better we also need to “practice”. Projects and tutorials have their place, but practice is how we develop the individual sub-skills that let us perform. [Slides 1-10]
To learn more about the distinction between practice and performance, I recommend the book Badass by Kathy Sierra (or watch her talks about this subject). In the chapter on practicing better, she writes that for anything you want to learn, there are sub-skills that will let you ultimately perform. When you start, they are all in the “Can’t do” category (Column A). Your aim is to learn them and then ultimately master them (Column C) so that you can perform the skill without thinking. To do so, you need to learn them in isolation (Column B), and perhaps keep splitting them into easier sub-skills that are each independently mastered.
In addition, you will need to review Column C to make sure you still have mastery and replenish Column A to continue your progression. [Slides 11-14]
For iOS, there are a lot of skills you need to learn even to make simple apps. To help, I’ve made a Trello board with what I think a minimum set of iOS skills you should try to master. I want you to know that even after 24 years of professional programming and 8 with iOS, I still practice — right now, I’m trying to learn iOS Game Development, and here is where I am in my skill progression. [Slides 15-17]
For practicing Swift, Apple provides Xcode Playgrounds and supports them on the iPad as well. You can get a list of Awesome Swift Playgrounds including ones that cover each chapter of Apple’s Swift book. When you are ready to make your own, read Erica Sadun’s book on creating Playgrounds. Using Playgrounds will let you practice Swift in isolation of other skills and will help you learn Swift faster than if you try to do it while making an app. [Slides 18-21] (at slide 21 I demoed Xcode playgrounds)
Another thing you need to know to make iOS apps is the Model-View-Controller architecture. One way to practice that is to think about what parts of each app you use are implemented as a Model, a View, or a Controller. [Slides 22-25]
To help isolate more iOS app skills I made an app called Event-o-Mat which implements a conference app (and I used it to make the NERD Summit app). It is open-source and you can change the images and data in it to customize for any event.
But, I also made git branches where I removed some code from the finished app that isolates practice sessions for basic iOS skills like learning how to use Interface Builder to add outlets, actions, and gestures. [Slides 26-28] (at slide 28, we did the first four exercises)