a developer's blog


Course review - CS193P iPhone Application Development

If you're interested in learning iOS development, skip the tutorials, skip the official documentation, and go straight to this Stanford course. It's aimed at XCode 5 and iOS 7, but I think he (Paul Haggerty) teaches a new version of the course each Fall so it's not likely to ever be out of date.

Course Material

There are 18 75-minute videos jam-packed with useful information. In almost every class he does a demo where he does lots of live coding. The first half of the class is typically slides. In case you missed something on the slides though, he has extremely detailed and annotated pdfs of the slides. There are 6 homework assignments and 1 final project.

All videos and slides are downloadable from iTunesU while the demos are downloadable from the class's website.

My Bonus Material

While going through the class I took picture and notes in an Evernote notebook which I made public. This still serves as a valuable resource for me (rather than having to search through his pdfs).

I also have a github repo which includes most of the demos and solutions to all the homeworks.


Some Object-Oriented Programming experience is helpful and probably necessary. I had some from my Python web-development background and that was enough. You don't need to know anything about Objective-C or XCode.

What you will do

By the fourth homework assignment you will have created the card game Set as well as a playing-card matching game. The 5th and 6th homework assignments use Flickr APIs to grab recent photos taken and display them by geographic region or photographer as well as keep track of your recently viewed photos.


You will become very comfortable with

  • Object-Oriented Programming
  • Objective-C and Cocoa
  • creating iOS apps
  • working with XCode as well as XCode's interface builder
  • Model-View-Controller design pattern
  • drawing custom views
  • working with gesture recognizers and animations
  • working with asynchronous network requests
  • working with CoreData (iOS's datastore)
  • working with photos, map-kit, camera, and other iOS stuff


In general I thought the course was terrific. I have never seen a professor prepare this much for a class. And it's comforting to know that someone has put this much effort into optimizing the class.

If I'm to say just a few complaints about it, looking back I've realized that it contains a whole lot of information, but not all of it is so relevant to my work at Prezi. The last 4 or 5 classes are more like a random collection of topics which I think are better viewed when you actually need to know that information. For example, you're not likely to remember how to use MapKit until you've created an app which uses it.

Also, there are a few things not mentioned in the course.

  • CocoaPods is a community-driven package manager for Objective-C which really eases the integration of 3rd party stuff.
  • AFNetworking is one example of an awesome 3rd party library which provides a much more straightforward way of managing network requests than with the standard NSURL stuff. The creator of AFNetworking also maintains a helpful (but somewhat advanced) blog about Objective-C at
  • ReactiveCocoa is another example of a 3rd party library which supports a different manner of design patterns than the traditional OOP stuff taught in the class. This is a slightly more advanced topic though. See my blog post about FRP.

The list of 3rd party stuff goes on and on. These are just the ones which I know and use off the top of my head.