Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

From your experience in developing mobile apps, which mobile development platform is easiest to develop? iOS, Android or WinPhone 7? And why would do you think it is the easiest? If you can order it from easiest to most difficult it is even better.

share|improve this question
1  
This can greatly depend on the programming background of the developer in question, especially if it's only one of C, C#, or Java. –  hotpaw2 Apr 26 '11 at 6:15
add comment

1 Answer

up vote 18 down vote accepted

From my experience this depends heavily on the kind of application you want to do. Assuming that familiarity with the platform is not an issue.

If you need to develop a "programming logic", "algorithms heavy" application:

WinPhone 7 -> Android -> iOS (ascending order of difficulty)

Reason: WinPhone supports "out of the box" a richer set of languages strong in that area (e.g. C#, F# vs. Java or Objective-C) and has a pretty good standard library for "backend" stuff (roughly equal to Android, but far surpassing Cocoa, which is just embarrassing in this regard).

Objective-C is missing generics and its collection API is missing broad support for map/filter/fold etc. operations (the basic support is there thanks closures/blocks) and the underlying implementation of your datastructure changes with the number of elements it stores, which results in hard to predict performance when e.g. using NSArray, NSDictionaries etc. combine this with a pretty verbose syntax, outright insane method naming conventions and glaring holes in its API (e.g. no Regexes, no Parsers) and you end with huge amounts of boilerplate when implementing even simple algorithms.

Java is "just" hampered by a lack of closures (with the resulting code bloat transforming collections) and non reified generics (which are not a huge problem) and needing to check for Null Pointer Exceptions more often than you'd like. All of which result in non trivial amounts of boilerplate when trying to express anything where you want to transform one set of data into another set of data (which most algorithms are about in essence). F# (and to a lesser extend C#) don't come with this baggage, which in my experience results in a lot less code when doing "algorithm stuff".

If you don't mind the extra work you are able to use Clojure and/or Scala on Android which would put it in this regard in the same spot as WinPhone. MonoTouch/Mono Android allow the iPhone to come close in this regard, too.

If you need to develop a "UI intensive", "interaction heavy" application my ranking is:

iOS -> WinPhone 7 -> Android (ascending order of difficulty)

Reason: This is IMHO highly subjective, but Cocoa Touch gives you a very rich set of beautiful UI widgets and Objective-C - archaic as it is - is very good for handling "UI stuff" (Key-Value-Coding, Responder Chain etc.). WinPhone seems interesting in this regard (delegates/lambdas are very useful for handling asynchronous events), so I would say it is a close second. Writing GUIs with Android is IMHO unnecessary complex, some of this being a result of Java's lack of dynamism and/or closures.

If you need to get really close to the metal - abusing the hardware to the best of you abilities, I would rank them as such:

Android -> iPhone -> ... -> WinPhone 7 (ascending order of difficulty)

Reason: Android allows you to develop native apps and distribute them (in theory) without restrictions. On the iPhone there is no other option, but AFAIK Apple restricts you access to the OS a bit more than Android does. Apart from that I would say both are really close. WinPhone completely sandboxes you.

There are of course multiple other possible scenarios with corresponding rankings.

share|improve this answer
1  
Nice. Thanks for the detailed explanation. Very much appreciated. –  jpartogi Apr 25 '11 at 13:19
    
Can you elaborate more why Windows Phone 7 is more suitable for heavy logic type apps? Shouldn't Objective-C and Java be capable for that as well? Also another category that you missed is game development. Which platform would be easier? –  jpartogi Apr 25 '11 at 16:35
2  
Objective-C is missing generics and its collection API is missing broad support for map/filter/fold etc. operations (the basic support is there thanks closures/blocks) and the underlying implementation of your datastructure changes with the number of elements it stores, which results in hard to predict performance when e.g. using NSArray, NSDictionaries etc. combine this with a pretty verbose syntax, outright insane method naming conventions and glaring holes in its API (e.g. no Regexes, no Parsers) and you end with huge amounts of boilerplate when implementing even simple algorithms. –  Alexander Battisti Apr 25 '11 at 21:49
    
Java is "just" hampered by a lack of closures (with the resulting code bloat transforming collections) and non reified generics (which are not a huge problem) and needing to check for Null Pointer Exceptions more often than you'd like. All of which result in non trivial amounts of boilerplate when trying to express anything where you want to transform one set of data into another set of data (which most algorithms are about in essence). F# (and to a lesser extend C#) don't come with this baggage, which in my experience results in a lot less code when doing "algorithm stuff". –  Alexander Battisti Apr 25 '11 at 21:55
    
I have no experience at all with Game Development, so I can't comment upon that. –  Alexander Battisti Apr 25 '11 at 21:57
show 2 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.