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.

Developing iOS or OSX based applications typically requires knowledge of Objective C, since XCode is highly tailored to this language.

Android, on the other hand, has chosen Java as it's preferred language for app development.

Now, I know other programming languages can be used to develop applications on either platform, but lets be honest, it's a lot easier (and encouraged) to develop apps using these "native languages."

As a new app developer, it seems like it would be much easier if there was a common language and development environment for developing applications on all the major platforms. This thought is probably too idealistic for a programming discussion, and I wouldn't be surprised if the SE vultures flew in to close this topic. But, here's my question.

Do you think that language endorsement creates unreasonable barriers to entry for new programmers, or do you think it's beneficial in some way (if so, why) for these platforms to use completely different development environments and languages for app development?

share|improve this question
    
"it's a lot easier (and encouraged) to develop apps using these native languages.". Yes, but it's still an option. For example I know that there are developers who write C++ in Android because they dislike Java. –  faif Mar 30 '12 at 17:13

5 Answers 5

No, it isn't a problem; any programmer worth his or her pay should be able to learn new languages and toolkits quickly. It's only a barrier to people who are lazy or less-than-capable. The point isn't to write Java or Obj-C; the point is to create an application with whatever tools you have available. If you can't differentiate between the solution and the implementation of that solution, you shouldn't be in this business.

As for whether it offers any benefits, it's a matter of tradeoffs. Having a common toolkit and architecture makes application development easier; you don't have to reinvent the wheel every time you want to put a drop-down menu on the screen. It provides consistency between applications, and makes it easier to enforce usability guidelines. It does mean you have to learn a new language and toolkit, but that's good for you. It may stifle "creativity", but when I think about the Wild West days of DOS and early Windows development, that's not a bad thing. Would it be nice if everybody picked the same platform? Yes, undoubtedly. Is that ever going to happen?

Not in my lifetime, that's for damned sure.

And platforms have always had preferred implementation languages; the original Macintosh toolkit was implemented in Pascal, fer cryin' out loud (they did provide C bindings, which made for some truly ugly code).

share|improve this answer
    
"any programmer worth his or her pay should be able to learn new languages and toolkits quickly." In my experience, most of those who think they have that ability do not, in fact, though they can get impossible-to-update, inflexible working code out the door for the first prototype. Learning languages takes time, passion and interest, and it's not for every programmer who is worth his or her pay. That said, the rest of the answer is valid, +1 :) –  Yar Oct 8 '12 at 23:09
    
@Yar: As always, I can only speak to my own experience. My first real project out of college required me to deliver code in each of Ada ('83 vintage), C, Fortran 77, SQL, and DCL (shell for DEC VAXen). Almost every job I had in the '90s required me to learn a new language or technology. Even now I split my time between C++ and Perl. I can't always vouch for the quality of the code, but it's usually not a horrorshow. If I can manage it, it ain't that hard. –  John Bode Oct 9 '12 at 3:07

To your first question: No. I do not think it creates an unreasonable barrier of entry. If you can learn to program in Java, rather than learning Java, then you already know (for the most part) how to program in Objective-C.

To your second: No, I don't think it's of any real benefit. Well, I guess it benefits Apple having everyone that wants to develop for Mac buying a Mac... but no, there's no discernable benefit to fragmenting such similar markets by such a difference.

share|improve this answer

Man, nobody among the big players cares about programmers and their strange notions or fairness and efficiency. Every one of them has been building a walled garden and has done a lot of tricks to make programmers stick to their and only their platform.

But as a purely theoretical discussion, yes, it would have benefited if we could target all of the platforms from the same development environment.

  • It would have minimized development and maintenance efforts if there was a unified development environment
  • It would have indirectly forced the platforms to support more or less the same functionality accessible in the unified manner which would have simplified life for developers
  • It would have created a unified user experience if the Windows Phone application looked and behaved identically to the iOS application

But then it would have also washed out the boundaries between platforms and took it down to who is able to ship the most densely packed hardware at the lowest cost possible. And they do not want that for sure.

share|improve this answer
    
Then do you think there is a need/ or place in this industry for a third party platform that would mediate the differences in these development environments? In simplified terms, you have to learn "apples" to develop on Apple's OS platform, and "oranges" to develop on the Android platform, but a third party platform would just require you to learn "mangos" and you could then port your app to both Android and OS. –  MSe May 5 '11 at 15:54
    
@MSe: That mediator would have likely been banned by Apple. I believe I've heard of one a year ago, somebody tried that and was shut off by Apple. Technically or legally, I don't remember. –  user8685 May 5 '11 at 15:59
    
I agree with all of your points except for the fact that one platform would have to look like the other. Apple has been successful in creating a distinctive look for their applications because they preselect their GUI elements in Interface Builder. Android (or anyone else, for that matter) could create their own GUI elements OR give user's more freedom in developing their own. The hypothetical unified development environment could simply assign different GUI elements depending on where the app was being ported. –  MSe May 5 '11 at 16:07

For your first question, either you know the concepts needed to program for iOS or Android or whatever, or you don't. If you don't, you likely won't be able to make a new app. If you do, learning the language will be easy. It will be harder to learn the frameworks and libraries, but you can do it.

For your second question, the multiplicity of environments came about for good reasons. Different companies start with different goals, and start at different times. Mac programming, for Mac OSX or iOS, originated with the NeXT cube something like twenty years ago or so (ever notice all the NS prefixes for NeXT Step?). At the time, Objective-C was a contender, and NeXT and Apple have put a whole lot of work into the environment over time.

Google came along much later, with much less baggage and probably somewhat different design goals, and wound up with something seriously different to work with. They weren't going to use Objective-C, because they thought Java a better choice.

The only ways iOS and Android would have had the same native language would have been if Apple had converted over twenty years of work into Java, for no real gain, or if Google had deliberately remained more compatible with iOS. Neither was going to happen. Apple, in particular, didn't become the most profitable computer and technology company in the world by trying to do what everybody else did a little bit better or a little bit cheaper.

Moreover, nobody's smart enough to set up the best possible development environment for a given application. People are smart enough to come up with different features, some of which will be better, and to adapt other people's features to their own system.

We aren't going to get convergence of platforms until we know what's best, and I don't think that's going to happen in my lifetime. Is Java better than Objective-C? Quite possibly, although they're very different languages. Is Java the best possible language for developing mobile apps? I very sincerely hope not. If we had a common platform, somebody coming along with a better idea would get an immense amount of resistance, far more than today, and software development would stagnate.

share|improve this answer

I concur with the general thought of "Don't learn a language, learn to program. Language is just a tool."

I'd also contend that having a wider, more diversified ecosystem makes for better programming environments, tools toys and end products in general. It forces all parties to create, adapt and innovate on multiple levels.

There is also the problem of getting these industry heavyweights in the same room and getting them to agree on anything without submarining the process.

share|improve this answer

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.