Home » Software Development » Hate Java? You’re fighting the wrong battle.

About Jonathan Fisher

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 web 2.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!

Reference: Hate Java? You’re fighting the wrong battle. from our JCG partner at The Code Mechanic blog.

Related Articles :

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!


1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design


and many more ....




  1. Java the language is a hopeless mess of bloat and straightjackets.

    It will never anything else.

    That is why Scala, Clojure and JRuby are so important to keep Java the platform from being just a platform for legacy code. Of course your average Java API monkey won’t be to look outside the box to learn these amazing languages.

  2. don’t stick C in this. C is great, java is horrible, it has to die.

    • But seriously…WHY WHY WHY bring C into this? I mean I can see why someone might one to put Java and C-O in a pit fight to death…Java and C is like putting two dogs in a cage to see which one smell the other one’s balls first.

  3. No, Rails is not bad for scalability. This is a myth. Twitter still uses it, github uses it, Diaspora uses it. Refactoring in Rails is not that difficult with the right tools. Refactoring is a matter of tools, not language.

  4. I think you’re confusing IDEs and programming languages.

  5. Only reason why someone would hate Java in general is because it’s too main stream. No, really.

  6. My very first encounter with java was interesting. I enjoyed writing it
    at first, until I realized I had to make multiple modules.. just to do
    one thing.. and it was extremely verbose. Although, this was rather
    minor. I gave it the benefit of the doubt and continued. Then I took a
    job where the systems admin, who was hardcore into java, was the biggest
    douche bag I’ve ever had the misfortune to known. This one man,
    intelligent, but by far the most pessimistic, egotistical, idealist jack
    wagon – broke my spirit in ever wanting to use and code in java. He
    specifically told me, myself being a junior, that I will never learn to
    code well like him. I will never be able to live up to him in his ways
    of java and that my place is below him. This almost n fact wanted to
    make me quit coding all together and I’m still bordering it to this day.
    If you want to know why people hate java so much, you should look at
    the community. Most new developers are straying away from it, because of
    exactly this. refuse to work with people like this. Although I may not
    have liked how long it took to write a program, at the very least I
    would adapt to it – but it’s hard to adapt as a junior – when people are
    like this. If this was supposed to be reverse psychology, it definitely
    didn’t work. In the end, I absolutely hate and despise java. The
    community has ruined it for me completely in ever wanting to even try
    and learn it. That’s my two cents. Good day to you.

  7. I think Java as a language is not that bad. The problem -specially with web applications- is the plethora of frameworks you have to stand up before you do anything. It’s not so much programming, environment configuration that programmers spend time on and loose heart with.

  8. Java has Unsigned Integer and Signed Byte? Nope. C does. Java is a DEAD language to me and I’ve banned it from my workplace and forced my employees to shift their java knowledge to C#/C/C++.

    Java need to die, there is no argument. It’s a langauge that pile the works on the programmer rather than itself therefore costing everyone time, money, and morale.

    • Java leaves it on the developer? Whahahaha xD
      No, it actually takes work out of your hands, that you can’t use this efficiently is your own problem.
      I personally prefer Java for small 2D games and C++ for bigger 3D games, but so will I use a fork for pork and a spoon for soup. So will a fish swim and an ape climb, everything has it’s good sides and rotten sides.. So has c++ with it’s manual memory management. Now that’s putting the work on the developer.

  9. You make a lovely point but I’m not a programmer. I don’t care how good or competent the code is. I am an end user and Tier 1 support. As a user I detest the frequent updates and the pre-selected “Do you want the Ask toolbar?” and “Do you want Ask to be your default search engine?”

    When a customer’s software breaks because they loaded legacy software AFTER current Java updates I have to try to find an old version-specific JRE, get them to close everything and uninstall Java, blah blah blah.

    Or I’ll be in front of a customer’s PC and the top 1.5 inches of their browser is cluttered with Yahoo!, Ask, Google, and Bing toolbars. “Do you ever use any of these?” “No, I don’t know how they got there or how to get rid of them.”

    So why do I hate Java? Because of its unabashed abuse of a captive user base.

    • Jeff,

      You know that there are free Oracle OTN downloads for both the JDK and JRE that don’t include any of that ASK toolbar bullshit right? Apparently your IT group doesn’t?

  10. “It’s a langauge that pile the works on the programmer rather than itself therefore costing everyone time, money, and morale.”

    Yet C/C++ does this in spades and certainly much more than Java does. Good luck with that.

  11. lol at those who say java will die. just look at how much java is involved in everything. from android to web to desktop to every thing. and its growing more and more everyday.

  12. Java is powerfull as nitroglicerin in correct hands.Ofcourse it will tear you apart if you dont know what you doing.

  13. I used to program mostly in c++ and seriously I hope java will die !!! Not because i prefer c++ or it is popular to hate Java , simply because it is the worst language ever made in Software development history.Unfortunately i give it a try just to get more into Android programming… So now i hate it even more !! Stupid complicated , non standard and slow. So here is some reason why i hate Java (and Android)

    – They forcing you to code in Java. (well , there’s an option to use Native code from java trough JNI , but that’s so stupid and complicated , that sometimes it makes you cry)

    – You have to define a class just to write a helloWorld example.

    – Hard to learn after c++.The syntax doesn’t make any sense.

    – Android and Eclipse made me hate Java even more.

    – Seriously , i’m tired of people who say “Java has automatic memory management what makes it better than other languages” That’s actually a typical behavior in these days…one monkey said that once and all the brainwashed sheep just keep repeating on and on…For God’s Sake whats wrong with new and delete ? why people think that’s complicated ? Actually it’s lot lot easier for couple of reasons. you have more control over your code.You can decide when to free the memory.You can decide how to free the memory.And if you prefer automatic memory management there’s hundred billions of solution in c++ for that. Or you can even write your own smart pointer/reference counting system easily. So all in all : I don’t see any privileges using Java because of memory management.

    So for me Java is dead already… i stopped developing Android apps until they fix this c++/java mixing nonsense .Maybe someday the developers will realize their mistake and give us a solution to access Android SDK completely from native side…

    • So, you hate the way that Java is used, not Java.

      Even the people that say ‘I hate Java’ are really hating the way that it is used, not the Language.

      But Java is fast, helps to avoid the memory leaks that cost a lot of money to the Enterprises, is portable, is more productive and helps to reduce costs.

      The problema with Java is that a lot of people say that they know Java, but its false. The know a little of Java and think that they just know all about Java.
      In fact you need a lot of time to be really good in Java, for knowing its API and how to build good code.

      Maybe you wouldn’t hate Java if you dedicate your time to know it well, instead of losing it hating nosense.

      • Totally agree!!!! Some people hate Java is because they never go beyond the point to enjoy the beauty of using Java to solve the problem.

  14. I started learning Java with an enthusiasm years ago but sometime later realized it has no future. The reason is simple. It is an extremely complicated language laden with unnecessary verbosity and terminology that put burden on the programmer. And the use of new terms (e.g., container, contentpane, bla bla) and formal vocabulary almost combinatorially explodes as you explore it further. In an effort to systematize things Java people have created a behemoth that is continuously growing grotesque and irregular.

    Why not use C and other languages which are simple, elegant, fast, and come up with fewer constructs and concepts that we can use to engineer any software product.

    • You obviously have never tried other languages (if you think Java is extremely complicated), go do a bit of programming in C++ or C# and then you will quickly see that Java is the lesser evil. I’m not a huge fan of Java and wouldn’t do my hobby projects in it (I prefer Clojure and smaller scripting languages) however I would rather do professional work with Java than any other language. The reasons are simple:

      Java is the most complete and consistent language out there. Many languages, C++ being a notable example, bloat the language with features which have been piled on without thought of how they fit together, that aside the worst part of languages like C++ is that they push a certain mindset on you (in C++ being temples and type-safety) but when you actually start thinking according to the mindset the languages surprise you that they don’t fully support the way of thinking they have been promoting (e.g. C++ templates cannot be restricted to certain types, i.e. if you have a numeric templates you could use it for strings resulting in a big mess). Java on the other hand never surprises me in this fashion, I’ve never encountered Java features which look like they’ve been hacked on to the language and I have never encountered feature holes (e.g. C++ templates but no constraints), whereas in many other languages it is trend to continuously hack on bits and pieces of features but never actually completing their functionality, it’s difficult to explain unless you’ve actually programmed in a language like C++.

      Java has a huge set of libraries and you can pretty much do anything in Java, I used to think Java was to verbose but actually it allowed me to build my first large project (a board game with a full GUI) whereas prior to that everything was just little hack scripts. C is nice and elegant however it is very low-level and is pretty much useless for anything but VERY low-level work i.e. device-driver/OS kernel level. Try building a GUI app with the Win32/64 NT libraries, you’ll likely commit suicide before you get it to function correctly, believe you’ll be wishing for terminology such as container, contentpane over STDCALL, FILE*, HANDLE*, WINHANDLE, GHANDLE GCONTEXTHANDLE, BLAHBLAHHANDLE*, etc, don’t even get me started on string processing in C.

      • “C++ templates cannot be restricted to certain types, i.e. if you have a numeric templates you could use it for strings resulting in a big mess”

        Can you show an example of this ? if your type (no matter if it’s a string or color or whatever) has a defined operator that is used by the template , how would that turn into a mess ? it will work just as it is expected…

        • Here is a simple example, it is a bit contrived but it shows why you cannot rely on the type having a defined operator.

          T left_shift(T arg1, U arg2) {
          return arg1 << arg2;

          All seems well, it will work for an int, short, long `left_shift(10, 2)`, and even for any bignum class provided it implements the '<<' operator. Theoretically it should fail for anything else e.g. a string. Wrong!

          `left_shift(std::cout, 2)`, that will print 2 to the screen or whoever standard output is redirected to. Now imagine that I don't call the function with std::cout directly, but instead it is an argument passed to another function template which passes it to the above function template with 2 as the second argument, imagine there are multiple developers for which your template function is a black box which they know nothing about. It can turn into a big mess quickly.

          OK I admit the exact example above is unlikely to occur in the real world, but it does demonstrate a flaw in C++'s templates. Real-world examples are likely to be less obvious but will involve '%' not behaving the way you expect it to, it could be very subtle, some method called add doesn't do exactly what you expect it to. It would be much better if we could have something like Java's interfaces, Haskell's type classes or what is known as protocols in several other languages, at least that way you are stating that you're expecting your object to adhere to certain traits or constraints.

          • well… your example only proves that you are indeed java programmer… why would anyone write such templates ??? it’s like playing the cello with a saw…. left and right shift are bitwise operators and absolutely notning to do with templates.I recommend to pick up a c++ book and read the template part to understand what templates are exacly

            “imagine there are multiple developers for which your template function is a black box which they know nothing about.”

            yeah good c++ programmers would laugh at it and say :” oh no… someone hired an ex-java programmer again…”

            Your example proves that java programmers are mean , blindfolded and affraid of their own shadow! You don’t have to prove nothing , we already knew that… a typical java programmer example :

            Bar * bar = new Bar();
            bar = NULL;

            and they usually say ” You see ??? pointers are dangerous ! thank God we don’t have them in Java” alhoughthey just don’t understand the GOOD programming principles.

          • “it could be very subtle, some method called add doesn’t do exactly what you expect it to”

            Now what that suppose to mean ?! you mean like a member function say add() you expect addition but performs subtraction ? Well if someone SOOO stupid to write such functions they are probably fired by now… Not to mention that you can do that freely in JAVA too… Yeah member functions are dangerous ! They should remove them…

          • Java is one of the languages I program in, I’m not passionate about any particular language but I do regard this as a serious flaw. C++ pushes the idea of type safety and strong typing as opposed to weak typing using void* in C. However all that has changed is that void* is substituted for a typename template parameter, barely any type safety is gained, sure you have optimization gains but that wasn’t the reason why templates were introduced in the first place. You asked for an example and I gave you an obvious contrived example to prove my point. Real world scenarios could very include the addition operator which is supported by all numeric types as well as strings. Or better yet, your template may only work with integral types but any integral, that is only int, short, long, a bigint class, etc. and not with floats. How do you distinguish between floating point and integral types, they both support exactly the same set of operators. I built a fraction class template a while back, floating point numbers do not make sense in fractions but I have no way of imposing that restriction other than thorough documentation or some obscure type traits hack.

            “a member function say add() you expect addition but performs subtraction” no silly, a member function add() which you expect performs addition between numeric types but instead adds an element to a list, i.e. anything which can fit under the name add, add is a pretty generic name and could have 1000’s of definitions. (C++ uses many generic names, begin(), end(), next(), etc) The programmer may not even be aware that the template uses the add function. If you had interfaces (such as in Java), type classes (such as in Haskell), or protocols (such as in Objective C) you would specify that the typename parameter is expected to implement X, e.g. a numeric interface, the interface contains all the methods/functions which the type is expected to implement and a documentation of each, plus a documentation of the interface explaining what the type implementing is supposed to be, this way you won’t get confused by what member function add(), or begin() or next() is supposed to do.

            I didn’t say templates are dangerous just incomplete, they were introduced into the language to make things more type safe over the dangerous type unsafe void* (C++ programmers say so) but they don’t offer full type safety as is found in other languages which support some form of generics. Yes you can get around it and you don’t strictly need it, you just need discipline but why? Java as a whole is a more well designed language, you’ll hardly ever find such gaping holes as you’ll find in C++, don’t even get me started on the STL.

          • Interesting… the only problem is , i use c++ 10 years now. I worked on many large projects , contribute to opensource projects on GIT , sourceforge , right now we working on two indie games , (one of them is written from scratch in c++!) I’VE NEVER ENCOUNTERED SUCH THING YOU SAY ! i don’t see whats confusing to you ? if a linked list has an add() member function , you probably know that it isn’t performing addition but adds a new element to the list. And you will probably implement the + operator for addition and not an add() function… if a linked list has a + operator i know it will merge the two linked lists and return the new merged list.

            In short : your argument makes no sense , since it is all about things that are completely unnecessary as adds extra complexity to a language but does nothing meaningful except slows down compile time and runtime + increases the chance to write bad spaghetty code

            The good example for this is the GC… It forces you to do bad programming.Forces you to not think.Forces to forget about allocated memory ,but does nothing meaningful , well i does actually makes your app use twice as much memory as needed.Any language that tries to be smarter than the programmer will fail it is just matter of time.The funny thing is i implemented smart pointers in 10 lines of code in c++. But still prefer using manual memory management (or a very simple ref counting system that does the job in 100% of the cases)

            The same argument over and over… i’ve (and other c++ programmers i know) never had problems with memory management , pointers , operators and templates. I had technical problems , like how to implement a scenegraph or a navigation mesh but that has nothing to do with the programming language

          • Like I said earlier my examples were contrived to prove a point. Here’s my real world example of the fraction class template. My class template takes one typename parameter, the type of the numerator and denominator fields. My class should be able to hand any integral type: int, short, long, long long, etc. and it should be able to handle any type which behaves like an integral e.g. a big integer class. It cannot handle floating point types, and should not be used with floating point types. Problem is I have no way of indicating this in my class template implementation, the only thing I can do is add thorough documentation. Other languages such as Java, Haskell (I already mentioned them) allow me to specify a constraint on the type, e.g. I can say that the typename parameter has to be an integral type, any integral type but an integral type. This is helpful for certain cases where programmers can get confused as to what exactly is an integral type, is that class called bignum an integral type or a real number.

            Can I do without constraints, yes most certainly I can with good documentation, however there is no reason why C++ shouldn’t support constraints, what was supposed to be concepts but was dropped from the standard, to me it is a design hole. Templates are the main culprit responsible for slow compile times, type constraints or concepts will not slow it down much further. Runtime complexity is completely unaffected as this is all a compile time check.

            I don’t know why you brought up the GC, I was referring to C++’s design holes surrounding templates. I didn’t say Java is the perfect language but is a better designed language. GC has tradeoffs, it can be faster than reference counting, since there is no need to update reference counters constantly, but unpredictable i.e. it causes pauses. GC can deal with circular references, whereas with reference counting you need to explicitly designate one of the pointers as weak. GC can be more performant when memory is shared across threads, ARC requires synchronization and locks. RAII scope based object lifetime is great but useless when you want to share memory across threads. It’s not a clear black and white GC is bad, manual memory management/reference counting is good. I have no problem with managing memory in C++, in-fact I use C++ on a daily basis, just that the language does have some design holes which other languages do not have.

  15. I write in over 13 languages, yes, even COBOL (D, F & ANSI) I don’t think there is a one fit language, it totally depends on the need. I personally enjoy the many flavors of assembler, for sheer speed and size. Things i can do in 500 bytes, a java programmer wouldn’t even think of! Things have become so bloated that today’s programmers are so far removed from what is going on under the covers. I write embedded code for micro controllers, which only sometimes have an LED for debugging. I do know what is going on under the covers. Today’s world is now, how fast you can get code off your desk, or implementing a new feature quickly, that the art of programming is lost. I use JAVA for some things, C & C++ for others, even reverse engineer COBOL code when the source is gone. One thing I can say about JAVA is there there a huge amounts of libraries available and the portability of the language, not to mention JAVA programmers are in huge supply.
    I do not hate JAVA, its just to cumbersome for me.

    • “I don’t think there is a one fit language, it totally depends on the need” good saying.
      However, unfortunately most of the people in the USA. don’t even know this. They think “NEW” is good. Some of them even abuse their power as a MANAGER to ban the Java language in the work place. FXXX that!

  16. Java will never be certified to run on an airlines, and we can all be thankful for that.
    Now seeing the FAA knows how bad the language is, why so many other idiots still use it is beyond me.
    GC = crash n burn

Leave a Reply

Your email address will not be published. Required fields are marked *


Want to take your Java skills to the next level?

Grab our programming books for FREE!

Here are some of the eBooks you will get:

  • Spring Interview QnA
  • Multithreading & Concurrency QnA
  • JPA Minibook
  • JVM Troubleshooting Guide
  • Advanced Java
  • Java Interview QnA
  • Java Design Patterns