I was chatting with my TUAW colleagues this morning about Mac versus iPhone programming. And as per usual with these conversations, we veered in the direction of unfettered speculation. It's an occupational hazard.
As someone who regularly develops on both platforms, I declared that the iPhone represents the future of Mac programming. The iPhone, I
posited stated, offers a great new platform without the need to be fully backwards compatible like the Mac. Our own Victor Agreda challenged me to back up that position. After a bit of time and thought, I decided to do so in this post.
My key point is this: Apple's engineers have learned a lot of important design lessons during the history of OS X. When the iPhone debuted, it gave those engineers the chance to rebuild an OS and an API from the ground up. Those engineers could craft a platform and its libraries that built on the Mac's successes without dragging along its less fortunate design decisions. Yes, there were some lemon frameworks that initially made the grade, but over time, Apple has reduced their number.
Even now, Apple continues its iPhone design process, adding new frameworks and APIs at a prodigious rate. The iPhone OS remains a work in progress, developing in ways and directions that the initial release two years ago could not have anticipated. And Apple does this, knowing fully that the closed platform allows them a great deal of design freedom that would not have been possible on the open Macintosh.
In contrast, consider in how many ways the Mac's successful history drags the platform down. A commitment to existing APIs and historical design practices show up in nearly every Mac development project. The simple elegance of the iPhone's built-from-the-start-as-Objective-C 2.0-based API is largely missing from Cocoa libraries.
Whether you're working with buttons, menus or simple text views, the iPhone development approach simply works better: beautiful 2.0-style properties, consistent API design, better-thought-out object inheritance trees, and so forth. With the iPhone, you see a great new platform evolving without the need to be fully backwards compatible
Snow Leopard, with its minimal API changes has bought the Macintosh a few years of stability. But I think it's time for Apple to rethink the platform as a whole, re-imagining its API through the lens of current iPhone OS development. While Snow Leopard offers Apple the room to stay still for now, I can see Apple moving forward in a separate engineering effort to Cocoa Touch Mac, a hypothetical cross-platform OS that supports general development on iPhone and future Mac devices like my imaginary snow-princess-rainbow-pony-iTablet.
The ghost of NeXT-past, as TUAW-colleague Joachim Bean puts it, still haunts us. It's time to exorcise the unhelpful bits of that pervasive spirit and usher in the new age of the iPhone and its API design examples. Mac OS X is, and has been, a superb development platform. What I'm suggesting is that iPhone OS might just be a better one.