Hate Java?

Today’s guest post comes from our friend, Jonathan Fisher over at TheCodeMechanic blog. He points out some rather interesting issues in the “Java fight” but then hits the nail on the head: while people are developing new languages and hating on Java, the fact is, innovation is needed much more in other places.

Hate Java? You’re fighting the wrong battle.

One of the most interesting trends I’ve seen lately is the unpopularity of Java around blogs, DZone and others. It seems some people are even offended, some even on a personal level, by suggesting the Java is superior in any way to their favorite web2.0 language.

Java has been widely successful for a number of reasons:

  • It’s widely accepted in the established companies.
  • It’s one of the fastest languages.
  • It’s one of the most secure languages.
  • Synchronization primitives are built into the language.
  • It’s platform independent.
  • Hotspot is open source.
  • Thousands of vendors exist for a multitude of Java products.
  • Thousands of open source libraries exist for Java.
  • Community governance via that JCP (pre-Oracle).

This is quite a resume for any language, and it shows, as Java has enjoyed a long streak as being one of the most popular languages around.

So, why suddenly, in late 2010 and 2011, is Java suddenly the hated demon it is?

  1. It’s popular to hate Java.
  2. C-like syntax is no longer popular.
  3. Hate for Oracle is being leveraged to promote individual interests.
  4. People have been exposed to really bad code, that’s been written in Java.
  5. … insert next hundred reasons here.

Java, the actual language and API, does have quite a few real problems… too many to list here (a mix of native and object types, an abundance of abandoned APIs, inconsistent use of checked exceptions). But I’m offering an olive branch… Lets discuss the real problem and not throw the baby out with the bath water.

So what is the real problem in the this industry? Java, with its faults, has completely conquered web application programming. On the sidelines, charging hard, new languages are being invented at a rate that is mind-blowing, to also conquer web application programming. The two are pitted together, and we’re left with what looks a bunch of preppy mall-kids battling for street territory by break dancing. And while everyone is bickering around whether PHP or Rails 3.1 runs faster and can serve more simultaneous requests, there lurks a silent elephant in the room, which is laughing quietly as we duke it out in childish arguments over syntax and runtimes.

Tell me, what do the following have in common?

  • Paying with a credit card.
  • Going to the emergency room.
  • Adjusting your 401k.
  • Using your insurance card at the dentist.
  • Shopping around for the best car insurance.
  • A BNSF train pulling a Union Pacific coal car.
  • Transferring money between banks.
  • Filling a prescription.

All the above industries are billion dollar players in our economy. All of the above industries write new COBOL and mainframe assembler programs. I’m not making this up, I work in the last industry, and I’ve interviewed and interned in the others.

For god sakes people, COBOL, invented in 1959, is still being written today, for real! We’re not talking maintaining a few lines here and there, we’re talking thousands of new lines, every day, to implement new functionality and new requirements. These industries haven’t even caught word the breeze has shifted to the cloud. These industries are essential; they form the building blocks of our economy. Despite this, they do not innovate and they carry massive expenses with their legacy technology. The costs of running business are enormous, and a good percentage of those are IT costs.

How expensive? Lets talk about mainframe licensing, for instance. Lets say you buy the Enterprise version of MongoDB and put in on a box. You then proceed to peg out the CPU doing transaction after transaction to the database… The next week, you go on vacation, and leave MongoDB running without doing a thing. How much did MongoDB cost in both weeks? The same.

Mainframes software is licensed much different. Lets say you buy your mainframe for a couple million and buy a database product for it. You then spend all week pegging the CPU(s) with database requests. You check your mail, and you now have a million dollar bill from the database vendor. Wait, I bought the hardware, why am I paying another bill? The software on a mainframe is often billed by usage, or how many CPU cycles you spend using it. If you spend 2,000,000 cpu cycles running the database, you will end up owing the vendor $2mil. Bizzare? Absolutely!

These invisible industries you utilize every day are full of bloat, legacy systems, and high costs. Java set out to conquer many fronts, and while it thoroughly took over the web application arena, it fizzled out in centralized computing. These industries are ripe for reducing costs and becoming more efficient, but honestly, we’re embarrassing ourselves. These industries stick with their legacy systems because they don’t think Ruby, Python, Scala, Lua, PHP, Java could possibly handle the ‘load’, scalability, or uptime requirements that their legacy systems provide. This is so far from the truth, but again, there has been 0 innovation in the arenas in the last 15 years, despite the progress of web technology making galaxy-sized leaps.

So next week someone will invent another DSL that makes Twitter easier to use, but your bank will be writing new COBOL to more efficiently transfer funds to another Bank. We’re embarrassing ourselves with our petty arguments. There is an entire economy that needs to see the benefits of distributed computing, but if the friendly fire continues, we’ll all lose. Lest stop these ridiculous arguments, pass the torch peacefully, and conquer some of these behemoths!

Is Java the issue? Or are the industries that are still stuck in the 50′s the problem?

Source:

Hate Java? You’re fighting the wrong batte. (thecodemechanic.wordpress.com)

37 Responses to “Hate Java?”

  1. rlocke (@rlocke)

    Troll much? If you sincerely wanted to unite us against the antiquated technologies of yesteryear, then why the snide remarks about the snarky conquering elephant?

    Enjoy the flame war you started.

    BTW, this is much more consistent with my experience:

    http://w3techs.com/technologies/overview/programming_language/all

    But, you’re right, the biggest sites run Java, like Facebook, Google, Wikipedia, Yahoo, etc.

    Oh wait, that’s not true either. Hmmm…

    Reply
    • Dave

      … and you don’t think the reason why php and asp.net are topping that list is because those languages typically use the language as part of the urls (despite the bad idea it is to expose your current backend to what is supposed to be long-lastring resource identifiers)?

      Reply
  2. Peter

    Java is a great language for large teams of incompetent programmers. You will not be able to find competent programmers to code up the business logic for: Paying with a credit card. Going to the emergency room. Adjusting your 401k. Using your insurance card at the dentist. Filling a prescription.

    That code is mindnumbingly boring, and has few technical challenges beyond sheer size and complexity.

    With incompetent programmers, you want a B&D language — Java forces object oriented. It forces a single object oriented paradigm. It forces a set of standard libraries. Etc. It makes it as hard as possible for programmers to shoot themselves in the foot, and it minimizes learning curve to get up to speed, making programmers as interchangeable as possible. If you’ve got a team of half-wits trying to write an employee management system, that’s exactly what you want. The problem falls well within the limitations of the system. If you want to do something more complex — a startup solving a problem that’s never been solved before — and you have a team of hotshot programmers, you really do want a less constricting and more flexible language.

    COBOL is obsolete. Java vs. Python/Ruby vs. LISP/Scheme is a question of suitability to purpose — primarily problem difficulty and team composition.

    Reply
    • Mike

      Java is also a great language for small teams of highly competent programmers (e.g. my current startup).

      As always it comes down to picking the right tool for the job. But be aware that plenty of discerning hackers have selected Java as the right tool for the job (for a defined subset of jobs).

      Java is great for banging out relatively standardised, maintainable, fast and portable OOP code with access to an amazing ecosystem of libraries and tools. As a language it’s “good enough” (you can safely ignore the language weenies who have nothing better to do than bash it….) and the library ecosystem alone makes it the best choice in many circumstances.

      For the really fancy stuff (concurrency, meta-programming, code generation etc.) we just use Clojure – all the goodness of the JVM platform and library ecosystem plus all the advantages of a modern expressive language.

      Reply
  3. sdfsdkj

    “It’s widely accepted in the established companies.
    It’s one of the fastest languages.
    It’s one of the most secure languages.”
    all 3 are rubbish.
    “It’s platform independent.”
    rubbish
    c is more accepted, and not better.
    c is faster, and not better.
    securty is depended on implementing of the programmer.
    its “compile once, debug many” and you know it!

    you are left with
    Synchronization primitives are built into the language.
    and
    Hotspot is open source.
    Thousands of vendors exist for a multitude of Java products.
    Thousands of open source libraries exist for Java.
    Community governance via that JCP (pre-Oracle).

    im not saying java is good or bad, i am saying your claims are rubbish

    Reply
  4. P Pope (@phinp)

    The biggest problem with the “Java vs. The Rest” debate arises from the fact many enterprises are blinded to the possibilities of other approaches, this can be partly attributed to decision makers who grew up when Java was really the only way of creating an enterprise web application.

    What is now needed is a less rigid “Java only” approach from those management types, this would allow developers/solutions architects/enterprise architects to actually solve business problems in the quickest and most effective manner.

    Reply
  5. ¿Buscan nuevas oportunidades de negocio en eso de… « Breves de La Vigi

    [...] eso de las TIC? Dejen de pensar en crear el siguiente Pinterest y léanse esto. Trabajo de verdad http://blog.jelastic.com/2012/08/13/hate-java/ [...]

    Reply
  6. Martin

    I think your argument would have carried more weight if you removed the list of why people are starting to hate Java. Once I hit that list of naive reasons it made *you* seem uninformed, instead of the people who hate on Java, and I almost stopped reading.

    I personally have a distaste for Java when the constraints it adds, which are meant to force the creation of “proper” code, sometimes exceed practicality.

    Also a typo; “Lest stop these ridiculous arguments” should probably be, “Let’s stop these ridiculous arguments.”

    Other than that, a pretty good read.

    Reply
  7. was8309

    mvc was8309(me_gets_paid?),this_page(D6,A3)

    Reply
  8. Robert Reiz

    Great post. I think the same. It is stupid to “hate” a language. Every language has his advantages and disadvantages. And a good developer should know more than just 1 language. But the problem is really that a bunch of companies are just to slow moving and not even thinking about using a different language or database.

    Reply
    • kaushikfrnd

      exactly robert .Peoples stick to C# .net where as there are far better options in python django and java or scal play etc

      Reply
  9. Jim

    Another thing about Java…you can actually get a job writing in Java. That alone makes it my favorite language.

    Reply
  10. .Net

    Dear java, I’m C# and I lol at your insecurities, with my real generics, closures and integrated query syntax! But at the same time applaud you for your elegant syntax and unmistakable likeness to me. We share common ground in this argument but need to acknowledge that we are both mature, mellowed and well rounded, if not a little cantankerous and long winded at first to youngsters.

    Only when greenhorn developers start to realise that “software” is more than just pushing angle brackets full of lolcats to a browser, will they appreciate what a proper language can do, (or whine until some C developer has to build the module for them)

    Reply
  11. Justin Baker (@isacult)

    The industries.

    I live in Charlotte, NC which is a big banking city, where I attend UNC – Charlotte as a Computer Science/Mathematics major. Some of the big internships for Juniors/Seniors are with banks. Bank of America has a generously paid internship for Seniors, where if I remember correctly, was Java.

    I can agree that the industries are delaying progression immensely. There is no outside the box.
    Only proven, ineffective technology, driven by the opinions of those who…haven’t kept up to date.
    The millions of dollars that could be saved by more efficient, yet still stable, software, languages, hardware, etc is staggering

    Reply
  12. Brian

    “Businesses that are now technology companies (but haven’t realized it yet) aren’t using anything modern,” seems like an orthogonal point to “I find it hard to be productive with the set of tools Java provides.”

    I agree all of these companies are computing in the stone age. Why tangle this issue up in a language war though? There will always be those who rally for whatever their chosen language is, regardless of any actual evidence (e.g. the comments section of any “PHP sucks” blog post).

    It’s useful to have the conversation about deficiencies in a language in the context of trying to achieve something: “I find it hard to express this idea concisely in Java because of gaps in the type system” or “Concurrency in Ruby is difficult to manage.” or “The Python interpreter lacks good run-time instrumentation.”

    Reply
  13. kitd

    As your business gets bigger, the value of your customers’ goodwill increases exponentially. No one notices if ‘s entire website goes down for a few minutes, but when Global Corp’s telesales or customer services backend system is slow, it can easily be measured in $m. These corps are also formally regulated by industry watchdogs, and informally by PR & social media. Large corps are paranoid about losing their systems and the uptime requirements are far more stringent than for smaller cos. So making changes to large established systems carry a far greater risk per customer $ than they do for smaller customers.

    End result: whatever the software licensing & 24/7 support costs are, in all probability, they are worth it to the large corp over replacing _working_ code with new code. We’d all like to see efficient systems in an ideal world, but no CIO will take the risk if it isn’t worth it and can’t communicate the far-long-term benefits to the board.

    Reply
  14. AgostinoX

    This kind of articles aim to be a form of support to the values behind the java world, but will end up as a certification of the failure of that world. This is because, while many problems are real, these articles fail to even mention what the community (in the most broad sense) is doing in order to address them. The developement process in java is difficult and tiring because of mainly two facts: 1) selecting the components to use is a job by itself. example. you need xml? you have to choose one among: sax, dom, jaxb, stax, jaxb moxy implementation. database persistence? hibernate native vs jpa 2 vs many others. logging? java standard logging system vs log4j vs some wrapper that encompasses both. 2) once you have selected all your stuff, you’ll discover that the API logic is very different one library from another and the learning curve for the “new entries” is, again, very tough. These two facts explain the success of platforms like spring that offers a plus in terms of uniformity of approach. Nevertheless, there are very good news in the java world. JavaFX 2 is not just an extremely powerful yet incredibly simple graphic environment, it introduces an innovative vision of object communication, that is property bindings (there were different attempts to do so, but they miss the integration in the libraries and they have ended up into over complexity). This should sound as a Copernican revolution in java Beans world, whose last spec dates to 199x. JSF is also a very powerful yet simple technology that probably (with the addition of primefaces, icefaces or richfaces) has very few competitors in the web toolkit arena. But again, the problem of putting all together remains, continues to be underestimated and there are no signs of a change in this attitude. What would I (and probably many developers) like to see? Well. Given that many of the problem arises from the richness of the offer of instruments (say libraries) the more strategic missing feature is uniformity in documentation. To develop a web app with an actual design AND look, i need primefaces (good tutorial and reference), jsf (one book and an anemic reference), hibernate (good but rather LARGE tutorial and reference), JPA 2 (except for some books, the official docs are quite “abstract” in my opinion, far from the day to day problems), jdbc (last published book is on JDBC 3 while JDBC 4 doesn’t even have a donwloadable pdf). Today, the most strategic ally of a developer is stackoverflow.com. That is: the experience you need isn’t available in official places BUT it is available through advanced developers that support the community. In my opinion, the communication about java technology should be carefully designed and not left to itself. This is also a call for book writers, that indubitably prefer writing about single libraries/technologies. But many of their books are useless. A java developer is typically a cultured developer and is able (with ease) to read a javadoc and learn an api. Your task is to unveil the big picture and inside it, show what the paths are.

    Reply
  15. Tim

    Excellent post. I moved from Java to Clojure 2 years agao. But I spend 0 time hating on Java. There’s reasons Java and it’s ecosystem have dominated the Enterprise landscape for such a long time. But the real question for business people , not in IT, is what are the economic advantages (stability, performance, maintainability, etc) of the platform. I see so few in our industry broach the matter of our economic value to another entity, that this is a welcome breath of fresh air.

    Reply
  16. Josh Schlesser

    Hate java? Why not try hating COBOL on mainframes instead. Really?

    Pick the right tool for the job.
    I wouldn’t buy a mainframe to do blogging and I wouldn’t build an aircraft control system in javascript using node on heroku. If you need a highly available record oriented transaction processing system with multi site redundancy and a high degree of visibility and accountability into every single thing that goes on and I mean everything, a mainframe would probably be just the thing. Its going to cost you, but if you really need all those things, its probably worth it.

    Why not rebuild?

    I guarantee you that if it was cost effective to rebuild those systems onto java or python or whatever, it would be done by now. It has been measured in detail both by CIOs and by IBM. There isn’t any competition so IBM can charge whatever it wants. IBM knows exactly how much it would take to make people rebuild out of their lucrative mainframe business.

    mov eax, $1
    mov ebx, $0
    int 0×80

    Reply
  17. Yusuf

    Among the many reasons for using J2EE are that it can be billed at higher rates, it takes more time and resources and development comes with a good maintenance contract going forward. No wonder “programmers” love it!

    Reply
  18. Simon Brunning

    You think people are using COBOL because “they don’t think Ruby, Python, Scala, Lua, PHP, Java could possibly handle the ‘load’”? That’s not why. It’s because replacing the existing systems would be vastly expensive and very, very risky.

    These systems are typically poorly understood – most of the people who have worked on them over the years have moved on. They have little or no automated testing, so finding out exactly what they do is very hard. It’s like IT archaeology.

    But the systems work – over the years, critical functionality has been made to work and bugs have been fixed. They are expansive to maintain, but the banks successfully run their businesses on them, and have for years.

    How we shift the cost & risk vs. benefit ratio is a hard problem. Don’t over-simplify.

    Reply
  19. Pat

    Yawn.

    Really? Hate Java? So does that mean people hate:

    1. ruby (jruby)
    2. python (jpython)
    3. Scala
    4. Clojure
    5. etc.

    The Java ecosystem has:

    1) an extremely mature VM
    2) a massively large number of mature libraries that run on any machine
    3) can work with many languages including C, python, ruby, javascript, etc.

    Any new language that does not build off of the JVM is silly, because any new language will need all the features the JVM already has well debugged.

    Reply
  20. grover

    The basic problem with Java is summed up in this IRC discussion:

    how do you say float in java? just 1.5f?
    FloatFactoryFactory.getInstance(FloatFactoryFactory.defaultInstanceDescriptionString).getFactory(Locale.getLocale(“en-US”)).createBuilder().setString(“1.5″).getResult()

    Reply
    • Mike

      Thanks for the LOL.

      But seriously, that’s the fault of certain so-called “enterprise frameworks” combined with the “lets abstract everything into a design pattern” mentality of some architects, not an issue Java itself. I’ve seen equal monstrosities in any number of other languages.

      Reply
  21. Techslam

    Well, I moved from woking on Ruby on Rails to Mainframe and I regret it now
    Mainframe may be doing something great for these huge IT Corps, but as a developer point of view, it sucks big time. But at the end of the month, when it comes to a pay check, I better stick with Maintaining 1950’s COBOL code.

    Reply
  22. Vilified account (@altmind)

    >> It’s one of the most secure languages.
    What does it really mean? Security is not a trait of any programming language
    >>Synchronization primitives are built into the language.
    This is not a benefit. Primitives can be provided as library with the same success.
    >>Hotspot is open source.
    Author is mixing java language and jvm machine. I dislike java, not jvm.
    >>Thousands of vendors exist for a multitude of Java products.
    This is true. Nevertheless, nothing is said about quality of that products.
    >>Community governance via that JCP (pre-Oracle).
    Role of JCP recently diminished. Most important decisions are made out of JCP. ASF recently left JCP to protest Oracle policy towards JCP.

    There are many wonderful languages for JVM, personally i see no reason to use Java, when i can use groovy instead. When writing Java I feel that i’m writing substandart code, tedious, repetetive, bug-prone(null-safety, exception handling, concurrent-unsafe) code.

    The whole business of our company is built not on java, but on Groovy. This was conscious decision.

    Reply
  23. ab

    You say several times that “Java has completely conquered the web application space.” which is an absurd comment, borderline lying, and rather makes me doubt everything you say.

    Reply
  24. Phil

    “Java has been widely successful for a number of reasons: It’s widely accepted in the established companies.”

    I love this: it’s popular, most of all, because it’s popular! Just ignore all of the technical issues it has — you don’t need quality when you have thousands of vendors!

    “This is quite a resume for any language, and it shows, as Java has enjoyed a long streak as being one of the most popular languages around.”

    Insects outnumber humans by the trillions, too, but it doesn’t mean I want to use them to build my house.

    “suddenly, in late 2010 and 2011, is Java suddenly the hated demon”

    Where exactly have you been for the past couple decades? There is nothing sudden about this. (JWZ first posted his “java sucks” rant in 1997, for example.)

    You say the real problem is companies caught in the past, and here you are pretending to be surprised by vitriol from last century.

    Reply
  25. sdf

    Have you actual used Java at all? You points don’t stand up. Please do more research before posting if you haven’t much experience. I don’t know why DZone decided to post this post. I need to reconsider DZone’s credibility.

    Reply
    • Robert Sullivan

      I love when people reply to a post and say the points suck, yet do not offer a *shred* of proof or counter-argument. Mr. sdf, where is your post? Where have you taken the time to lay out your argument and back it up? It’s trivial to attack a post, it’s far harder to back your points up. And yes, you will leave yourself open to attack. Because everybody here, who is flapping their arms about Java – is missing the whole point of the article!! Go back and read it.

      Reply
  26. Eduk

    I work with RPG III in the banking industry. You don’t know what a bad language is until you meet RPG. The structure of the code is positional, so depending on which column you write a letter in you can be saying completely different things. The use of GOTO is seen as frequently as you see a FOR in Java. Variables can be up to six characters in length and you just have a bunch of five-character commands available (which also have to be placed in certain columns for things to work). There are more things, but I guess anyone can get my point.

    Reply
  27. griffmeister1971

    hey there and thank you in your information ? I’ve certainly picked up something new from right here. I did alternatively experience a few technical issues the usage of this site, as I experienced to reload the web site a lot of instances previous to I could get it to load properly. I have been thinking about if your web host is OK? Now not that I’m complaining, however slow loading circumstances times will sometimes have an effect on your placement in google and can injury your high-quality ranking if advertising and marketing with Adwords. Well I am including this RSS to my email and could glance out for much more of your respective interesting content. Ensure that you replace this once more soon..

    Reply
  28. eUKhost

    i also don’t like JAVA.

    Reply
  29. Limy

    Java beats the C family of languages when it comes to basic types.Java kept it simple, with just one basic type of each size. That’s more than enough for most people….

    Reply

Leave a Reply