I've been a professional Java developer for just over 2 years now. Let me give you a simple example.
The three leading Ecommerce platforms (Oracle ATG, Hybris and IBM WebSphere) are all done in Java.
There is huge demands for Java developers working on Web and Enterprise systems the world over. The average Salary for Java developers is pretty high in most places (london and Sydney) and the day rates you can charge as a contractor are very good.
There also seems to be more open source and technical community in Java.
I am glad that I went down the Java route.
also, Most Java development jobs nowadays focus on the web and server side stuff, this is followed by mobile (such as android) and embedded (such as TIVO boxes).
I went from writing client-server code in Java to writing similar things in .NET.
After two months of C#, I remember thinking to myself, quite clearly, "Oh, thank God, the nightmare is over."
Debuggers that worked. Native calling systems that actually interoperated well. A set of classes that weren't horribly overdesigned and under-implemented.
Best of all, no culture that insisted on factories that made factories that made factories.
Writing Java on phone platforms is fine. But the enterprisey stuff is death on roller skates.
Hey, if you can stand it (my cousin does), then you might make a bunch of money. My cousin spends six months hacking Java for a bank, then six months vacationing. I prefer to do stuff that doesn't make me contemplate washing dishes for a living again.
.NET has its warts, but it's not cancerous the way Java turned out to be in the hands of the architecture astronauts.
I have spend most of my career doing Java6 JEE6 and modern Spring and it all feels quite modern. I did a lot of C# at University and it is a good language and platform but I don't think it's better than Java. New / modern Java is fine, it's old java that you want to avoid.
If you ever try any of the modern stuff (django, rails, play, grails, any node.js framework) in depth, j2ee / Spring and java just feels old and ancient. Spring has gotten better over the years, but there's still just too much work and too much unnecessary complexity and cruft with Spring. It's really telling when even Spring's creator jumped ship to work with TypeSafe and jvm7 has huge improvements designed for other languages.
imo C# is an improved java, but C# open source ecosystem is just anemic compared to java.
I actually like old and ancient. That means all bugs have been fixed already. Systems become complex quickly enough and you need to use the most boring bricks imaginable if you want to build something sturdy.
> I actually like old and ancient. That means all bugs have been fixed already.
By that logic everyone would still be using Cobol or Fortran for new development. Moreover neither Rails, Django, or Grails are brand spanking new anymore. Those projects are mature. If you don't want to stray too far away from the jvm comfort zone, Grails is actually built on top of Spring and Hibernate and it's still maintained by the Spring team.
I'm not sure which debugger you use to debug Java code but I can do local _and_ remote java debugging via Eclipse.
IntelliJ supports JavaScript and JSP debugging as well.
Client-server development using EJB 3.x is way much better, cleaner, and simpler than .NET, sorry, this is something that I don't think you can argue elegantly.
.NET culture when it comes to open source is sub-par while Java is very rich. Spring, Tomcat, Jetty, Hadoop, HBase, Eclipse, NetBeans, Maven, Ant, the list goes on. These are mature and high profiled open source projects wherein .NET I have never seen an open source project reached that level of acceptance.
While Java has this sub-culture of factories that made of factories. .NET has this culture of fighting with the latest and grandest libraries that Microsoft launched once every 6 - 12 months.
Enterprise .NET is not at the level of Java yet (compare Message Queue, remoting, security, and other capabilities .NET are still lagging).
.NET has its cancer in its own way.
I honestly believe that you have not used Java that deep professionally.
The nightmare for me has been over in the mid-nineties, when I discovered Unix through Linux.
There's no way I'll ever be going back to working on Windows. I'd rather go work as a plumber or a truck driver (not that there's anything wrong with that) then have to work on Windows ever again.
C# / F# might be interesting, but using any Windows as my OS is a big no-no. Never this nightmare again.
And, nearly 20 years later, the great thing is that a lot of devs previously working on Windows are now working on OS X (anybody disputing that trend is a fool).
Major win for Unix with both Linux and OS X. Not to mention all the devices running either iOS or Linux / Android.
The nightmare is over: Windows shall never be the OS powering all these servers and devices out there and hence .Net shall never be the dominant platform.
It's not that .NET has its warts (it does), it's that Windows has its ugly warts and I'll never ever be using that inferior OS ever again and I'll never ever again will be forced to deploy on an Microsoft stack.
In the mid-nineties I considered quitting IT. And Linux saved me. And now OS X. Thanks.
I wouldn't go this far myself, but I deeply sympathize. I developed an inordinate level of familiarity with the Windows ecosystem for 10 years. I could tell you which registry keys did what for which COM components <shudder/>. Then I rebooted my technical self into Mac/Linux/Ruby and would have to scream into a pillow for 20 minutes before I'd be able to open up a windows command line again. Although I did do a bit of PowerShell when it came out and -- wait for it -- it was actually pretty nice. But still, the overall OS is such an odd beast in retrospect.
That's an incredibly ignorant response and you have no idea what you're talking about.
Java looks bad? You're probably talking about certain swing applications which are now very rare on the desktop.
Java is slow? You clearly have no idea how fast the JVM can interpret and JIT java nowadays.
Java is insecure? You're mainly talking about applets which are an ancient technology on their way out (slowly). In terms of actual JVM security. Every product has its security issues.
You seem very ignorant, your java experience is probably from the past e.g. J2EE1.4 and old swing apps.
Modern Java is an good language on a great platform. There's a reason why it runs some of the worlds biggest ecommerce sites and worlds fastest trading desks.
Desktop java is dead. Actually desktop anything that's not web is going to end up dying. The server is where the languages will duke it out next and Java is fine there. C# is also fine on the server. The nice thing about Java is it easily runs on linux and has many OSS libraries to help quickly standup server applications.
The best way I can think to phrase it is "in-browser VMs are dead". This covers Java, Flash, that one Microsoft had for a while, and anything else that uses the browser plug-in mechanism to load heavy frameworks.
Your experience is not necessarily because Java is slow. It could just be the applications you are running that are slow for reason that have nothing to do with the language.
Swing is probably going to be slower (maybe?) than some native windowing framework.
But Java as a language running on the JVM is certainly not slow.
I've just been looking up pycharm and it seems that the slowness issues are to do with things like opening files and doing parsing. These things are likely to be slow for anything but the language they are written in.
Most people are exposed to Java via enterprise monstrosities.
It depends on your POV. I've had to deal with an enterprise Java crapware app that was essentially a terminal emulator for an old mainframe... except that it required more than 4GB of memory on the desktop to work appropriately.
Although you are taking heat for saying they are less secure, this is mostly true. Specifically, it is the JVM that has major security problems, not the apps themselves. This is not so much a fault in Java but in Oracle's implementation and their longstanding failure with security.
Fun fact, several Windows versions have included a security mitigation technology called ASLR (Address Space Layout Randomization) that breaks a large majority of exploits and raises the bar significantly. Exploit developers and penetration testers love Java, because any machine that has it installed (most of them) breaks ASLR, re-enabling all of those exploits that Microsoft had otherwise mitigated.
The three leading Ecommerce platforms (Oracle ATG, Hybris and IBM WebSphere) are all done in Java.
There is huge demands for Java developers working on Web and Enterprise systems the world over. The average Salary for Java developers is pretty high in most places (london and Sydney) and the day rates you can charge as a contractor are very good.
There also seems to be more open source and technical community in Java.
I am glad that I went down the Java route.
also, Most Java development jobs nowadays focus on the web and server side stuff, this is followed by mobile (such as android) and embedded (such as TIVO boxes).