views:

267

answers:

8

I am torn. I want to start making applications for OS X. There is a specifically under-served market that I would like to tap but I don't know if I should develop it only for the mac with Cocoa and Objective C or if I should develop it with Java and JavaFX.

I guess my question is, is Java robust enough to handle the same things as Objective C on Mac and C# (.net) on Windows?

+4  A: 

If you want to develop (exclusively) for OSX (and/or IPhone, Ipad) your best bet for native looking (and behaving) applications which tap into the power of the OS would still be learning Objective-C (and the Cocoa framework).

Learning Objective-C syntax isn't hard if you happen to have some plain C experience. Exploring the framework and functionality provided (Cocoa) is the more time-consuming part (the same can be said of other languages).

ChristopheD
I'm not an OS X geek, but didn't I see something in the news recently about the developer agreement for iPhone and iPad requiring that development be done exclusively with native APIs? That might not hold for desktop apps, I guess, but then again, the iPhone market is scarcely 'under-served' so that might not be what @Ben is talking about.
Adam Crossland
Yes, Apple now actively discourages/prohibits the usage of cross-compilers. Lots of discussion around that topic in certain circles (discussion between Adobe vs. Apple for example).
ChristopheD
Thank you for EXTREMELY fast responses. I think I will go with Objective C.
Ben Ratajesak
"if you happen to have some plain C experience..." Why would you expect that the OP has that? Why not, "if you happen to already have some Objective-C experience" and be done with it. Objetive-C is quite difficult to pick up as a first programming language, I think.
Yar
Well the OP didn't express familiarity with other languages... The first language is always the most difficult (most new concepts involved). I agree with the statement that Objective-C might not be an ideal beginner's programming language (although that was not really the question).
ChristopheD
+4  A: 

Mac users will generally avoid applications that don't behave as they expect. If you honestly think you can "tap" that market then you are going to have to be prepared to put the effort into understanding that market - and the native development tools will make that task easier.

Rulmeq
Sad but true +1
Yar
+1  A: 

Well, Java is robust, but still, there are some things that you want to do in a operating system specific... Mostly UI, since you can access both Windows and OS X libraries from Java, there are complications in the use of specific technology, for instance WPF creates very handsome GUIs for windows, while Java is not as good as creating those.

It usually depends on the type of applications that you want to create, are those for business, enterprise usage where UI is not a big issue, but portability is? Go with Java. If you want to create visually appealing or speedy tools for a specific market? Go with OS Specific languages.

jpabluz
+1  A: 

You should look at things differently. You need to learn programming and most of the cases Java is not the answer for a beginner.

What you needn't do is choose a language because "it's better". If you want to develop applications for OS X you should learn Objective C.

Then at some point in the future you might realize you need to do Java. No problem, you already are a developer, it'll be a breeze to learn Java then.

So the point is just learn to program.

sovanesyan
+1  A: 

If the under-served market is specific to OS X then I would go with something that targets that platform natively. If you want to create a general application that uses OS X as one platform the you should write it with Java or some other platform agnostic language. It really depends upon how portable you want your application to be, what features your application will have, and the type of application you have. I'd advise examining what languages best fits your needs as far as a tool (features, libraries, platform, etc.) before making the decision

Craig Suchanec
+1  A: 

It doesn't matter that you pick a language, just that you learn it. Variables, loops, decision logic, etc - the principles will be there in pretty much every language. All that changes, moving from language to language, is syntax and power (IE: memory management by hand in C/C++ vs managed memory in Java & .NET).

Not for your situation but in general - might want to choose a language that foreseeably is most employable. There are more Java & .NET jobs than there are Pascal ;)

OMG Ponies
+1  A: 

Java is robust enough but it has never really taken off as a platform for developing desktop applications. It is however very popular for developing web application due the advent of Java Enterprise Edition.

The reasons for Java's lack of penetration in the desktop application market can probably to traced back to bad quality of if the initial GUI development framework AWT. Swing improved on this and has continued to improve over the years but still has some quirks. This is primarily because Swing draws the screen components itself rather than using the underlying platform.

If you want an application that looks and feels native then you should use Cocoa. If you really have you heart set on programming in Java then you should consider using the Eclipse RCP. This is Java GUI framework that uses the native operating system widgets.

Tendayi Mawushe
IMO, the more likely reason for lack of desktop penetration is the lack of interest in desktop applications. Webapps, cloud computing, HTML5 are all targetting the consolidation of maintenance...
OMG Ponies
I hesitated to start a Java on the desktop discussion. However I am not talking recent history, I am talking about more than a decade ago when Java was being positioned for desktop applications. Even today commercial and open source desktop applications are still prevalent but precious few of them are written in Java.
Tendayi Mawushe
@OMG Ponies, he's talking about the lack of penetration of Java given the amount of Desktop applications there are out there. The answer is correct: Swing has been widely hated (and love, too) since its inception.
Yar
@yar, @Tendayi: Compare the number of SWING apps vs Java based webapps...
OMG Ponies
@OMG Ponies, the way the argument usually goes is that we ask, "why don't we choose Swing for the Desktop?" But I guess you could ask, "why don't Java developers develop for the Desktop?," but I think the question is backwards.
Yar
A: 

Should I learn a operating system specific language or something like Java?

Yes, you should.

By which I mean, computer languages are tools. A good workman has several tools in his toolbox. You don't find people on plumbingoverflow.com asking "should I learn how to use a pipewrench or a blow torch".

JeremyP
That is a great analogy. Oh sorry, I meant that it's not a great analogy. The OP wants to get started developing on OSX, and wants to know if Java apps can look/behave natively. Your answer, "get all the tools you can, man." That does not help at all.
Yar
I refer you to the title of the question. The correct answer is "both". The best way to decide what the best tool for the job is is to try them out. In my experience, the programmers that fixate on one particular language tend to be not so good as those with a broad range of languages and who are keen to learn more.
JeremyP
That's true, of course, but that's no advice for someone who is GETTING STARTED.
Yar