iPhone SDK
Been playing a bit with the iPhone SDK lately. Fortunately, I bought a MacBook Pro a few months ago (with default boot to Vista since I rarely ever boot into OS X). If I could pick one word to describe the experience it would be "different." The whole Apple/Jobs culture even leaks into the developer platform. They really couldn't just pick a name like "Object" for example as the base class for various objects. Instead, they had to make it NSObject. Why the NS? It stands for Next-Step--which, as you may know, is the OS that Jobs worked on during his time away from Apple. On top of that, you can't just write an application for the iPhone. You have to get on a waiting list and be approved first. That takes about 6 months or so, after which you still don't have any promise that your app can get loaded on any iPhones. After you finish your app, you then have to submit it to Apple, who decides whether or not they want it on their iPhones. That's a hell of a lot of work to do before getting a yes / no answer (not to mention that even if you do get the app in the store, a cut of every sale goes to Apple).
While listening to the developer tutorial videos, I cracked up when they got into the discussion of naming conventions. Yeah, naming conventions are a good thing, but I almost fell off my chair when the official developer training video from Apple stated that if you don't follow their naming conventions, "your whole application will come crashing down around you." The other thing I found quite strange about the videos was that they seemed a lot more like marketing material than developer training. It took a few videos before any code showed up, and then it was useless snippets that you couldn't actually compile because there was a lot of missing glue code. They probably would have made a bit more sense had I known Objective C and been familiar with OS X development going in, but they struck me as pretty useless videos and I abandoned them as a source of information.
Back to the SDK itself... The SDK uses Objective C, which is quite a bit different than C++ and has a fairly steep learning curve IMO. Definitely not like jumping to C# from C++ or Java from C++. Technically, you can compile C++ with X-Code (the IDE), but you really want to stick with Objective C, since that is what all the libraries use. The IDE itself doesn't have intellisense. It will autocomplete, but only when you've typed enough of the method to narrow it down to a single method. It really makes you miss Visual Studio, where you can just hit "." and browse for the exact method you are looking for (apparently you can hit 'escape' to bring this up). The consequence is that you have to have a much better understanding of the libraries you are working with to be at all productive. There is a "class browser" to go find methods, but it is more like a treeview control plus notepad. You find the class you are interested in and it pops up the header file in a pane so you can browse it. The interface isn't tabbed like Visual Studio, so you'll quickly find yourself wishing you had one or two of those nice big 30" monitors. On the plus side, the IDE is really snappy. Much smoother than Visual Studio...but then again, it seems like it's doing a hell of a lot less in the background.
The UI libraries are strictly MVC. You have no other good option. Either you write MVC, or you go home. As far as I could tell, the interface builder doesn't really store the interface in a useful form. Early on, I tried to drag some buttons around and then go look at what it generated; but, as far as I could tell, the IDE appears to put the UI in some kind of resource file instead of generating something you can hand modify later.
My overall impression is that iPhone development is a bit on the painful side. Unlike the Microsoft tools, you don't really have a lot of options. Apple chooses the "best" option for you and you do things that way. Though there is some merit to this idea (some times Microsoft gives you a lot of rope to hang yourself with), I like having options. Honestly, I don't think most developers could get up and running with the SDK in a weekend and it's a lot to ask to have people pour a lot of effort into an application without knowing whether it will actually be accepted.
Anyway, it's really too bad Windows Mobile blows, because if Microsoft had a decent mobile phone OS, they would win hands down in the tooling department. Cross your fingers. Maybe Silverlight will make iPhone development less of a pain.