Last January I set out to teach myself how to build an app for iOS (i.e. for the iPhone, iPad, or iPod Touch). The notion had been swimming around in my head for more than a year, for example, I'd already joined Apple's iOS Developer Program the previous year (which has a subscription fee of $100/year), but I'd never fully committed to doing it until a year ago. I think there were a number of factors that contributed to my finally taking the plunge: (1) it's simply a pleasure to learn a new language (Objective C) and SDK, (2) it's also very appealing to learn a new marketable skill, which seems to be increasingly in high demand, (3) I had a fairly specific idea for an app to build, which I felt would provide for me an awesome creative outlet, as well as an excellent context for learning and (4) Apple has built an amazing piece of technology that is a pleasure to use, so why not get in on the action of trying to harness it?
I'm happy to report that I did indeed follow through with my plans, having clocked probably something in the range of 500-1000 hours in the evenings and weekends over the past year teaching myself Objective C and learning the iOS SDK, as well as designing and building my app (I'll describe that in more depth in future blog posts). As I mentioned, I had already subscribed to the iOS Developer Program, and so began by playing around in Xcode. There is a wealth of information through Apple's developer portal, but I tend to learn best from books, so I purchase a couple of O'Reilly books: 'Learning iPhone Programming', by Alasdair Allan and 'iPhone App Development, The Missing Manual', by Craig Hockenberry. These were ok, and certainly helped me start getting my hands dirty. I also started exploring some of Apple's WWDC videos that are available via the developer portal. I think by March of last year I had developed enough basic skills that I was able to build a very crude first prototype of my app, which was fun.
But, I definitely felt as though I was only scratching the surface, and had a pretty superficial understanding of the entire iOS platform. So, I endeavored to learn more and to go deeper. I came across what turned out to be a very effective source of training: Stanford's iPhone Application Development course (Winter 2010), which was available online through the iTunes U collection of educational videos. I later discovered the Fall 2010 version, taught by Paul Hegarty, which is even better than the first course. Today I learned that yet another semester of this course is available: iPad and iPhone Application Development (also taught by Hegarty), advertised in the video above. They cover some relatively recent developments, such as Storyboards and automatic reference counting, which look pretty cool.
Late last summer I discovered a couple of books that I highly recommend: 'Programming iOS 4' by Matt Neuburg and 'Core Data for iOS' by Tim Isted and Tom Harrington. I dedicated a couple of months reading both of these from cover to cover (well, mostly). The Neuburg book is very pedagogical and well organized. The Isted/Harrington book is decent, but derives it's value mostly from the fact that there aren't many books out there about the Core Data framework for iOS. More recently, as a more robust version of my app has taken shape, I read the book 'App Savvy' by Ken Yarmosh, which describes the process of distributing and marketing your app on Apple's app store.
Even with an entire year of fairly focussed self-guided learning, I still feel I have quite a bit yet to learn about building mobile apps in general, and for the iOS in particular. I feel that you can only take your understanding so far while learning on your own 'in a vacuum', and so a couple of weeks ago I started attending an eight week long 'Introduction to iOS Programming' course at the start-up incubator EnterpriseWorks in the Research Park on the UIUC campus, taught by Mike Haberman. Even though I know quite a bit already, I'm finding the course to be very useful in helping to fill in gaps here and there, and I'm starting to meet fellow mobile app developers, which is my main motivation for taking the course.