Writing iPhone apps are hard. True, it could be much worse, and as cocoa developers, we're spoiled by the MacOS, but the iPhone App Store is quickly gaining notoriety as full of crappy apps and flashlight programs. A great deal of blame is laid at the feet of those rushing in without cocoa backgrounds, especially by the old guard. Even more is laid at the feet of the NDA, which limits idea exchange, and this has a lot of truth. But I've come to believe that the NDA causes an even more subtle issue. That of reliance on demo code.
Whenever someone is interested in iPhone development, I point them to the Hillegasse book, which deals exclusively on Mac programming. However, Hillegasse does two wonderful things. First, he teaches a lot of the design concepts of Cocoa that are universally portable, especially to cocoa touch. Second, the book teaches concepts in a way that is rare, and one I've learned to appreciate.
He doesn't do demo apps, one for each chapter to show off a technique. Instead, over the course of the chapters, he slowly develops and integrates the techniques into a handful of apps that have real (if fledgling) utility. In doing so, not only are the techniques of the chapter taught, but overarching design methodologies that don't fit into any one section. These can not be taught by demo code apps.
Demo code apps, almost by definition, demonstrate a specific technology or feature. But in order to focus on that one aspect, the rest of the app is paired down and stripped. The job they do is to demonstrate a small subset of the API, and in that they excel. However, they are never designed to demonstrate the entire API as a complete whole. This becomes a problem in the vacuum created by the NDA. A great many iPhone developers are new to Cocoa, and have not developed on the Mac. As such, all they have seen is the demo code, with things like its rampant mixing of model, view, and controller into one.
My own code still has much to go, as there is so much more I want to make. But it involves not only reinventing the wheel due to the lack of outside support, but also unlearning the demo code app techniques that have sadly become the de-facto standard in this vacuum.
