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.

After getting shot down on SO, I'll try this here:

I'm sure you'll all know of Apple's recent announcement to deprecate Java on OS X (such as discussed here).

I've recently come back to programming in the last year or so since I originally learnt on ye olde BASIC many years ago. I have a Mac at home and a PC at work and whilst I have got Windows and Ubuntu installed on my Mac as VMs, I chose to focus my "relearning" on VB first (as it was closest to BASIC) and then rapidly moved to Java as it was cross platform (with minimal effort) and so it was easiest to work on code from both OSes.

So my question, if the winds of change on Mac are blowing away from Java and in this post-Sun era, what would be the best language to focus my new efforts on?

Please note, this isn't a general "which language is better?" thread and or an opportunity for the associated flame-war. There's plenty of those and it's not the point. I realise that in the long term one shouldn't be allegiant to an individual language so, taking this as an excuse, the question is specifically which is going to be the most quick to be productive on given the background whilst bearing in mind minimum portability rewrites (aspiration rather then requirement) and with a long term value of usage.

To that I see the main options as: C# - Closest in "style" to Java but M$ dependent (unless you consider Mono of course)
C++ - Hugely complex but if even slightly conquered, then a win? Is it worth the climb up the learning curve?
VB.Net - Already have background so easiest to go back to but who uses VB for .Net these days? Surely if using a CLI language I should use C#...
Python - Cross-platform but what about UI for the end-user?

EDIT: As a usage priority, I envision desktop application programming. Though the ability to branch in the future is always desirable. I guess graphics are the next direction once basics are in place.

share|improve this question

closed as not constructive by Jarrod Roberson, Mark Trapp Feb 5 '12 at 7:31

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

3  
XD I saw your closed question on SO and was curious about the answer. Thank god for this site. :) –  Gordon Gustafson Oct 24 '10 at 20:17
2  
With all the hundreds of SE sites now, like a fool, I didn't even know this one existed! Unfortunately, as no one else does either, I don't envision a massive flow of answers... –  Smalltown2k Oct 24 '10 at 20:24
4  
I hope that users would start to deprecate Apple... –  Lorenzo Oct 25 '10 at 7:11
14  
They're not depricating Java on OSX, they're just not developing the JDK themselves anymore (in the same way Microsoft don't develop the Windows JDK). They are making their Java technology available to open source developers as part of the Oracle/IBM backed OpenJDK project (apple.com/pr/library/2010/11/12openjdk.html) so the premise for the question is somewhat flawed. I'd stick with Java. –  Jon Hopkins Nov 12 '10 at 16:52
1  
You question is ill-informed and incorrect in fact it is the farthest from the truth. They are just delegating the OSX implementation to Oracle and actually still providing support to Oracle to help them ship on OSX in a more timely manner than Apple ever did. –  Jarrod Roberson Feb 5 '12 at 5:37

13 Answers 13

up vote 7 down vote accepted

It depends on where you want to go:

C#: will have the shortest learning curve if you already know java, but M$ dependent like you said. If you want to do anything with windows, C# is a great choice.

C++: not worth it IMHO as its more difficult to use. Inherent lower-level makes it better for game programming.

VB.NET: I agree with you, if you want a CLI language go with C# as its massively more popular.

Python: cross-platform, very different from java but widely praised for its beauty as a language. Used in many different areas, several different gui choices.

Javascript: used for browser scripting and html manipulation only. Extremely useful for web design/dev but barely used anywhere else e.g. desktop.

PHP: big in server-side world.

Scala: kind of like a 'better java' on the jvm, but outsting the jvm gets rid of it.

As you can see, it depends on what you want to do. What are you priorities?

share|improve this answer
    
C# is mostly cross platform with Mono, so your not always dependent on M$. You can easily write an app in Mono and still have all your features –  TheLQ Oct 24 '10 at 21:08
4  
AFAIK, Mono has to play catch-up with C#, so you will NOT always have all the latest features.. :/ –  Joril Oct 25 '10 at 7:29
1  
@Joril - In addition MS's assurances that they won't sue the Mono project over use of their IP only goes as far as the .NET core, not to some of the more recent and extended stuff (MVC.NET for instance). –  Jon Hopkins Nov 12 '10 at 17:08
1  
@Jon Hopkins MVC.NET? Winforms too! and WPF! All of these belong to MS and if this happened to Java, I can't trust C#. –  Camilo Martin Nov 27 '10 at 18:20
1  
C++ with Qt is a fine replacement for Java. Not much more difficult to use either. –  user16764 Feb 5 '12 at 15:21

You should first ask yourself what type of applications you want to code (web, desktop, libraries?) and for whom (yourself, corporates, small clients?) - it's quite difficult to answer the question otherwise.

Also right now I think it's premature to jump from Java if all you're basing your decision on is Apple's announcement. If I were you I would continue learning Java and make a more informed decision in 6 months or so by when it should be clear what the long term future of OSX is as a Java development platform.

Oh, and if going the .net route I would avoid VB.Net unless you have a strong reason to learn it. There's nothing wrong with it as a language but most books, blog, community activity, etc will be in C#. There are also lots of general books which use Java for code samples and switching those to C# usually very straightforward whereas converting them to vb.net requires a bit more thought (it's not hard, but it gets in the way of learning the concepts that the books address).

share|improve this answer

I concur with the points you make about the languages in your list.

As for Python, the Qt GUI (PyQt) would be the current best choice of cross-platform UI, in my opinion: it looks quite good (it looks almost native on OS X, for instance, contrary to TkInter) and it's well supported (as opposed to wxpython on OS X).

If you want to keep web development in mind, Python also has Django, which is currently quite popular (I guess for good reasons).

Plus, I can't think of a more enjoyable language than Python. :)

share|improve this answer
    
I find Java more enjoyable then Python. Though I find Java more enjoyable then just about anything. –  Josh K Oct 24 '10 at 22:05
    
@Josh Even C#? It does have its advantages –  TheLQ Oct 25 '10 at 0:42
1  
@TheLQ: C# is Java from MS. Nothing crazy special about it. –  Josh K Oct 25 '10 at 1:05
    
@Josh K: Aren't you bothered by all the type declarations, and more generally by the verbosity of Java compared to Python? –  EOL Oct 25 '10 at 18:52
1  
@EOL: They also allow you to run 2 to 10 times slower, but that's not the point. I don't notice any speed difference when working with Java vs. PHP. –  Josh K Oct 25 '10 at 22:23

Go for C#, you will not be so dependent.

With such skills you could gauge you way:

  1. The market is still growing! It's a smart, fun and clever language.

  2. Don't worry. Knowing C# you should be able to learn other languages easily.

share|improve this answer
2  
Well there are languages that are "not at all dependent", so why go with one that is "not so dependent"? :) –  Joril Oct 25 '10 at 7:26

Depends On What You Do

Java is also probably not dead, there will be a JVM, it's a very popular language and Oracle can't allow the Apple platform to simply die. Why you are writing Apps in Java baffles me, you don't write GUI's in Java.1

I've recently come back to programming in the last year or so since I originally learnt on ye olde BASIC many years ago.

One year of programming means you have barely scratched the surface. If you really want to ditch Java, go for another widespread structured language like C++.

To that I see the main options as: C# - Closest in "style" to Java but M$ dependent (unless you consider Mono of course) C++ - Hugely complex but if even slightly conquered, then a win? Is it worth the climb up the learning curve? VB.Net - Already have background so easiest to go back to but who uses VB for .Net these days? Surely if using a CLI language I should use C#... Python - Cross-platform but what about UI for the end-user?

You seem to be UI focused, and I'm not a desktop GUI programmer. I tended to web based languages and wrote the occasional Swing GUI (not something I recommend).

My honest opinion is that you should look at web centric technologies. Again, look for a strong backing language that will force you to implement good styles (Java) and then augment it with a more loosely defined language (PHP, Python, JavaScript). I highly recommend learning JavaScript (language, not browser) due to my belief that in the near future JavaScript will become one of the more prevalent languages. Look at MongoDB, Node.js, jQuery, Firefox plug-ins, Appcelerator, these are all JavaScript centric.

If you want end use UI work, go browser and JavaScript.


1. It's difficult to create a unique user interface beyond the supported platform look-and-feels.

share|improve this answer
1  
Java GUI's are actually quite nice and easy to code. –  user1249 Dec 29 '10 at 19:31
    
IMHO you'll get more bang for your buck by learning Ruby for your backend instead of Java. Java may be more widely supported / applicable, but Rack / Sinatra / Rails -based services are so much more pleasant to code and maintain. Don't even get me started on the difference between Gem and Maven.... –  Coderer Jun 10 '11 at 20:57
    
@Coderer: Don't get me started on the failures of gem. –  Josh K Jun 10 '11 at 20:59
    
-1 for the unsupported assertion that "you don't write GUI's in Java." That's one of the things I like about Java is that I can come up with a basic Swing application, and tell it to default to the platform look and feel and expect it to look decently average without any extra work. –  Tom G Feb 5 '12 at 0:38
    
@TomG: I don't make things to be “decently average.” I guess if that's your target then you should be fine. –  Josh K Feb 6 '12 at 15:55

As the other answers said, it depends on what you want to do. However, the need for portability also depends on what you want to do. If you're planning to do most of your development at home on the Mac, and you want to do desktop applications and maybe graphics, why not take a look at Objective C?

share|improve this answer
    
Upvote for Objective-C. Especially since it's truly cross-platform through Cocotron and GNUstep projects. –  Ivan Vučica Jun 7 '11 at 20:47

You could actually still focus on Java -- Apple is opening the source to their Java implementation and rolling it into the OpenJDK, according to a recent announcement.

share|improve this answer

You need not abandon Java as yet. From an Apple press release dated November 12, 2010 titled Oracle and Apple Announce OpenJDK Project for Mac OS X:

Apple also confirmed that Java SE 6 will continue to be available from Apple for Mac OS X Snow Leopard® and the upcoming release of Mac OS X Lion. Java SE 7 and future versions of Java for Mac OS X will be available from Oracle.

share|improve this answer

If you want a skill that will last at least the next 10-20 years - concentrate on Java.

Big corporations have moved to Java in a big way and there will be a lot of development in Java for many years.

Failing that; C#. A lot of client side code is .NET driven and server side code is Java.

share|improve this answer
    
or longer. IBM embraces Java on their non-PC platforms. –  user1249 Dec 29 '10 at 19:31

Delphi

You can be one of the first to natively compile Delphi on your Mac.

(pay no attention to the dates in this article)

share|improve this answer

If you're a Mac developer, you may like Objective-C. Plus, Cocoa frameworks exist for other platforms (Windows, Linux, various BSDs) through Cocotron and GNUstep projects. Objective-C is fast native code with a touch of dynamism which may slow it down. Cocoa (Apple's implementation of OPENSTEP, plus a lot more) is quite well designed. If you primarily develop for Mac or just feel curious, I recommend you take a good look at Cocoa and Objective-C.

share|improve this answer

I m an apple programmer, I do love cocoa but in general a very nice language for PCs (You come from VB..) is C#.

I do not love java: too slow and too complex for normal task.

Big companies are going to java? can be..

in my opinion future wil be on web for massive sw development, but with lower salaries ( aLOT of peole can write good or bad code for web.. js, php.. and so on...)

I riche niche can be iOS where only smart people with deeper knowledge of memory details and knowledge derived from C can work.

share|improve this answer
1  
"...I do not love java: too slow and too complex for normal task...." == Complete FUD! Especially in 2012 when the JIT has been demonstrably FASTER than C in many non-trivial cases since 2009! –  Jarrod Roberson Feb 14 '12 at 22:02

You question is incorrect, Apple isn't deprecating Java on OSX, they just are handing over the development of the OSX specific parts to Oracle.

This is a good thing, OSX still is the best development environment for Java and will continue to be for a long time in the future!

share|improve this answer

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