Why Java Sucks

I’ve been using Java seriously for about 2-3 years. When using an IDE like Eclipse I can be very productive, I can probably code faster in Java using Eclipse than in any other language (including PHP and Python), debugging is easy, errors can be found quickly and easily. But as any platform does to some extent: Java sucks, and I’ll tell you why.

Swing
I haven’t used it a lot myself, thankfully, but to me it seems too complicated, slow and on top of all: ugly. When I use an OS, I like consistent behaviour and looks. I don’t want some friggin’ purple, slow, ugly looking window on my screen that eats away half of my memory. Who really uses a Java application that uses Swing? Nobody, and for a reason: Swing sucks. We want native-looking GUIs. That’s why IBM developed SWT which uses native widgets supplied by the OS. Not only is this a lot faster and uses less memory, it looks better too. Proposed Swing slogan: “Sure it looks like shit, but at least it does so consistently on all operating systems. ”

J2EE
J2EE is the Java way to build “Enterprise Applications”. It’s widely used in many enterprises. I have some experience with the Servlet/JSP part of it and it works reasonably well. One thing though: Sun loves XML. Every servlet you create, every JSP taglibrary tag you write has to be registered in an XML file. That sucks. The first thing I did when I developed KeyTopic is work around the servlet registration problem (by using only a single servlet). I also briefly looked at EJB, that’s even much, much worse. Every EJB has like an interface file, home-thing file, remote-thing file, and a couple of XML files attached to it. Most of this can be generated automatically by using applications like XDoclets, but still, it’s a mess. It’s confusing, complex, and most importantly: so much more complex than it has to be. At least, that’s the feeling I get when I look at it. For example, check out this post about What Should a Good Enterprise Java Developer Know. I’ll just quote the list, to make it more clear:

  • You need to be proficient in object-oriented analysis and design (OOA/D), design patterns (GoF, J2EEDP), and integration patterns. You should be intimately familiar with UML, especially class, object, interaction, and state diagrams.
  • You need to learn Java the language and its core class libraries (collections, serialization, streams, networking, multithreading, reflection, event handling, NIO, localization, etc.).
  • You should understand how the JVM, class loaders, and garbage collector work in general. You should be able to decompile a class file and comprehend basic byte code instructions.
  • If you’re going to write clients, you need to learn applets for the web and Swing, AWT, or SWT for the desktop. You should also be familiar with the JavaBeans component model for UI widgets. JavaBeans are also used in JSP to isolate business logic from the presentation tier.
  • You need to learn the JDBC API and how to use at least one persistence/ORM framework like Hibernate, JDO, CocoBase, TopLink, or iBatis. You also need to understand the implications of the object-relation impedance mismatch, how it will affect your business objects’ interactions with a relational database, and its performance consequences.
  • You need to learn about the Java sandbox security model (class loaders, byte code verification, managers, policy and permissions, code signing, digital signatures, cryptography, certification, Kerberos, etc) and the various security/authentication APIs, like JAAS (Java Authentication and Authorization Service), JCE (Java Cryptography Extension), JSSE (Java Secure Socket Extension), and JGSS (Java General Security Service).
  • You need to learn Servlets, JSP, and optionally JSTL (Standard Tag Libraries).
  • You need to be familiar with popular web frameworks, like JSF, Struts, Tapestry, Cocoon, WebWork, and their underlying design models, such as MVC/Model2.
  • You need to learn how to use and administer web containers, like Tomcat, and how to deploy and maintain web applications on them.
  • You need to learn about distributed objects and remoting APIs, like RMI and RMI/IIOP.
  • You need to learn at least one XML API, like JAXP (Java API for XML Processing), JDOM (Java for XML Document Object Model), or DOM4J.
  • You need to learn how to build Web Services using Java APIs and tools, such as JAX-RPC (Java API for XML/RPC), SAAJ (SOAP with Attachments API for Java), JAXB (Java Architecture for XML Binding), JAXM (Java API for XML Messaging), JAXR (Java API for XML Registeries), and JWSDP (Java Web Services Developer Pack).
  • You need to learn a lightweight application framework, like Spring, PicoContainer, Avalon, and their IoC/DI idiom (setter, constructor, interface injection).
  • You need to be familiar with various J2EE technologies, like JNDI (Java Naming and Directory Interface), JMS (Java Message Service), JTA/JTS (Java Transaction API/Java Transaction Service), JMX (Java Management eXtensions), and JavaMail.
  • You need to learn about Enterprise Java Beans (EJB) and their various component models: Stateless/Stateful Session Beans, Entity Beans (with Bean-Managed Persistence [BMP] or Container-Managed Persistence [CMP] and its EJB-QL), and Message-Driven Beans (MDB).
  • You need to learn how to manage and configure a J2EE application server, such as WebLogic, and utilize its add-on services, like clustering, connection pools, and distributed transactions support. You should also learn how to package and deploy applications on it, and be able to monitor its performance and tune it.
  • You need to be familiar with Aspect Oriented Programming and Attribute Oriented Programming – both are confusingly abbreviated as AOP - and their popular Java specifications and implementations, like AspectJ and AspectWerkz.
  • You need to be familiar with various utility APIs and frameworks, like Log4J (logging/tracing), Quartz (scheduling), JGroups (network group communication), JCache (distributed caching), Lucene (full-text search), Jakarta Commons, etc.
  • If you’re going to interface or integrate with legacy systems or native platforms, you need to learn JNI (Java Native Interface) and JCA (Java Connector Architecture).
  • You should be familiar with Jini technology as it relates to distributing systems.
  • You should be familiar with the Java Community Process (JCP) and its various Java Specification Requests (JSRs), like Portlets (168), JOLAP (69), Data Mining API (73), etc.
  • You should master a Java IDE, like JetBrains IntelliJ IDEA or Eclipse. (Some people prefer vi/emacs with make files. Whatever makes you tick!)
  • Java is verbose and requires a lot of code artifacts (e.g. EJB); therefore you should be familiar with code generation tools, like XDoclet.
  • You need to be familiar with a unit testing framework (JUnit) and learn various build and deployment tools (Ant, Maven).
  • You should be familiar with several software engineering processes commonly used in Java development, like RUP (Rational Unified Process) and Agile methodologies.

Aargh! Kill me!

Choice
With Java you have choice. Too much choice. You have a choice in everything: widget sets (AWT, Swing, SWT), XML parsers (W3C DOM, SAX, JDOM, …), web developement frameworks (like a hundred, so it seems). It’s so much choice that I just don’t know what to choose and what the implications will be. This is a major reason why I hesitated to start with Java, it’s just so amazingly overwhelming and complex.

Purity
Basically the only proper way to write your software in Java is system independent; you’re stuck with the common denominator. On the server side this usually isn’t the biggest problem, but when you do client stuff, you might want to use the system tray in Windows. No! Thou shallt write pure code! Oh sorry, I bought this really cool OS that has all those cool features, but now I can’t use them because that’d affect my purity. Get the f*@#$)(*#@$*@#!

The Language
Java is a fine language, still. With Java 1.5 (not out yet) some stupid decissions were made. Generics for example. Generics in Java use a wipe-mechanism to retain backward compatibility with previous Java versions. Some of the drawbacks are these:

  • No parameter type information is retained on a generic collection. You can’t ask what the type parameters were of a certain collection at run-time, for example.
  • You can’t use a primitve type as a type parameter.
  • The new boxing features and generics won’t always work as you might expect.
  • You can’t create an array of generic collections.
  • There is some additional minor stuff that involves inconsistently using the keyword ‘extends’ when actually implementing interfaces (for which Java always used ‘implements’, not with generics).

The problem with this is that you can only understand why this stuff doesn’t work by understanding how they implemented those features, which is a typical example of a leaky abstraction. More information on these problems with Java 1.5 can be found in Bruce Eckel’s presentation (Real Media).

Some smaller things

  • The Classpath: As a beginner you’ll always have problems with the classpath. Java can’t find the class you’re trying to use, says the package declaration is wrong. Trouble, trouble, trouble.
  • In Java not everything is an object (or can be treated that way): there’s also primitives. Primitives (int, float, char, double, byte, …) are radically different than objects. The only reason they’re here is for speed’s sake, and to complicate things more. This sucks.
  • Applets: They suck: they either don’t work; don’t work everywhere; take a lot of time to load; nobody has the Java plugin installed correctly or at all; and are barely used for the right thing. Avoid.
  • James Gosling, the founder of Java, says stupid things: “Java always has been faster or as fast as C++.” (source: Bruce Eckel)

The Alternative
C# and .NET score much better on most of these points. .NET 2.0 will have CLR support built-in for generics and won’t use a hack, like the wiping that will be used in Java 1.5; the GUIs use native widgets; .NET allows purity, but you don’t have to avoid dark alleys for the rest of your life if you step out of the managed .NET world; there’s a lot less choice in application frameworks (they basically all come from Microsoft); there are no classpath problems; there are value types and reference types, which are, arguably, more natural than primitives and object types; C# is a more feature rich (and in my opinion better) language than Java; and XML file usage is more sensible. Sure, .NET isn’t perfect either, but, arguably, it sucks less.

More Java Suckage

Disclaimer
Of course I’m exaggerating. Java is a good platform to develop software for and with. It’s really not that bad as I make it look. On top of that, as I said in the introduction, every language sucks in a way: C# sucks, C++ sucks, Python sucks, Perl sucks and most of all: PHP sucks.

  • Methods aren't objects, which I find really stupid. And all those *final* classes in the std libraries are a real pain as well.
  • Jaap
    Gideon: Why would you want methods to be objects? Doesn't that go against what methods are supposed to do? change the state of the object.
  • Zef
    I think he means you can't treat them like objects. You can't pass them to for example a function as if it were an object. In languages such as Python, everything is an object, including methods and classes.
  • Too bad you didn't mention Ruby on Rails (http://www.rubyonrails.org) as an alternative. I've been looking at it the past couple of days, after having been busy writing a clone of it for .NET. Ofcourse, RoR is purely a web application framework.
  • Zef Hemel
    I'm not so very fond of Ruby (too perl-ish). But I never heard of Ruby On Rails either, looks like it deserves to be looked at.
  • jiMMy
    Admin, please erase the previous two jiMMy & replace with this one. Your forum mistakenly strip valid c++ syntax as tags... leaving unleggible... I clear it up

    C++ ROCKS. I explained why...

    TOYS
    -----
    Def: Any language that runs on a toy-machine (virtual machine) is a toy-language (interpreted/jitted)!!! Any app written with a toy-language is a toy. Any OS written with a toy-language is a toy-OS...


    Toys have unrealistic demands (tiny energy cells like aaa batteries like in a child playtoy or high resource [jit-overhead, memory-usage, etc.])
    Grown-up kids grows-out or get-bored of toys easily.... So dont write another Linux.KDE,Gnome in toy-languages or risk being labelled as simply TOYS. Any TOY LANGUAGES sucks PERIOD.


    C: printf("%d %f\n", 3, 3.14); /* cumbersome, error-prone, disaster-waiting-to-happen, unmaintainable, arguments-matching-schemes in print function - embarassement in modern programming pratice */

    c++: cout {operaor} 3 {operaor} " " {operaor} 3.14 {operaor} endl; //Ushes programmers to new age. No silly arguments-matching-schemes in print function

    Java: System.out.println(3 + " " + 3.14); //Ushes programmers to new age. No silly arguments-matching-schemes in print function

    Java 1.5: System.out.printf("%d %f\n", 3, 3.14); // Ushers programmers back to dark ages. Moves 10 steps forward, 10 steps back

    Back in early days, these very same language designers bitched about C++ most powerful features (templates & operator overloading):

    1. to complex to master/implement/blah blah
    2. subject to abuse

    Their recommendation - we dont need it, can be easily replicated:
    1. use manual error-prone to cut and paste to mimic template
    2. use extremely verbose methods to mimic operators
    *** class_subtract(class_divide(class_add(class_multiply(2,3),5),6),1);


    Guess what, templates finally make their way back, these very same features, they trashed...

    java1.5: about_time{int} var = new about_time{int} ();

    Templates can get extremely complex (expression-templates, metaprogramming etc). If they can retrofit such complex constructs (templates) in Java 1.5, where is the logic of not including simpler constructs (operator overloading) which will greatly benefit maintainability of numerical codes??? Lack of directions again...

    Here is where we are at currently:

    C++ == (C)++
    Java == (C/C++)--
    Java1.5 == ((C/C++)--)++ == almost C/C++ again //sheez....

    Why the sudden illumination? Does it take them that long to see the light at the end of the tunnel? These very same language designers, who once trashed C++ most powerful features, finally seen the light that Bjarne long saw values in multi-paradigms...
    The man foresaw the great values in multi-paradgms (templates, operator-overloading, etc.) by adopting & adapting it to archaic C.

    In my book, C++ is the language, maybe a superset (C++)++ language has ther right to surpass it but certainly not by lesser languages variants like these:
    1. C
    2. (C/C++)--
    3. ((C/C++)--)++
  • Roger
    Java is my favourite language (until 1.5 arrives). It's slow and sometimes bureaucratic, but it has from the beginning software engineering in mind, and this is cool at specification and design time, because there's not surprises. J2EE maybe is too complex for web developing, but it's really a distributed processing framework that has the top mark in distributed application benchmarking (look for DNA sequencing), so you maybe are trying to kill flies with a cannon...
    A really good thing: little amount of keywords (compared with C++ and C#) and consistent syntax (at least in 1.4).
  • robertw@wilson.com
    You forgot to mention CFMX coldfusion which has none of those issues you mentioned, people alway mention .NET and forget the Microsoft almost aquired CF a few yaers ago because it was so good. If you haven't tried it don't knock it, I have respect for your article because you have actually used JAVA and can talk properly about it.
  • Tjerk
    Java has some bad points, but the .NET platform has one big disadvantage: It is created by Microsoft, microsoft owns the platform and that is bad. In java you are independent from the platform and that is a huge advantage. And swing is not slow, en looks really good, but only if you use it right. See www.jgoodies.com for some cool java. Java rules
  • Zef
    Java is owned by Sun. That's just as bad.
  • maverick
    I have some radical new ways, implementing which, java can even surpass assembly speeds.
  • Sam
    You have no idea what you are talking about. do some research before start writing stuff on the web
  • Sam
    you have no idea of what you are talking about. do some study first before writing on the web
  • george
    I have been programming C++, C, perl, php and a few others for years. Out of boredom, I started reading some Java books, to really get into it -- I only had a superficial knowledge of the language.
    My very first impression: why does a dynamically allocated and garbage collected language need static arrays, for instance? That's just one of the things I didn't like - I think some choices are just plain wrong - but in general I must say that it does get most things right.
    Now, when you start reading about the rest - it's a complete and utter mess - a nonsense of acronyms, technologies that sound like vaporware, and plain old marketing. I see absolutely no need of having this sort of complexity - what happened to KISS? what happened to writing tools that serve a specific purpose well? I have been making a list of the different technologies I need to explore that are common to a Java developer and I have 2
  • george
    ...and I have 24 acronyms so far - and I am still missing bits!!! This is not only absurd - it's also surreal.
    Just my $.02
  • Anonymous
    cool discussion
  • Bobq
    Really wasted too much of life reading this ...
    Proof that a little knowledge is a BAD thing.
    It takes time to appreciate the finer things, unfortunately as you focus is obvious you'll stay in the dark ages.
  • Don
    It's a programming treadmill.... once you get on, it never stops - the marketing folks at Sun/Oracle, etc keep adding new crap that your boss thinks the company will need. After 10 years of never ending learning, it gets tired. Life is too short.
  • Swing is not ugly...... Can give you loads of examples.
  • Berlin Brown
    One thing, I don't know if he a genius or crazy or both. But I like Paul Graham's approach. Java wants you to add a bunch of libraries and APIs so that you are constantly having to keep up with trends as opposed to actually working with your application. I like Paul's approach. He wants to remove for example, Strings, Numeric Literals ,Lists, Vectors from a language. Basically, if your language is robust, you won't need those in your language. Java takes the opposite approach. We will define a type for everything.
  • For more reasons why Java sucks, have a look at:
    http://javasucks.blogspot.com
  • Joost
    I'd like to know a successful swing app. Or even an AWT one. You just feel the JVM sitting there when you click a button in a Java GUI. For web development, it might be ok, I don't know. For GUIs, I don't want Java GUIs.

    The programmer must bring the program to the user's platform, the user shouldn't need to bring the platform to the program.
  • Very entertaining - sums up alot of what I've come to hate about J2EE over the past few years.
    But the worst aspect of J2EE, one that you don't mention, is that Java J2EE allows you to do things at compile time that make no sense at runtime.
    The Java compiler is too generic/stupid to spot these faults and provide warnings/errors.
    For example - class variables in servlets... compile fine but create truly *horrendous* concurrency faults when another user overwrites the value.
    What's desperately needed is a J2EE compiler (instead of javac) to compile code for J2EE platforms.
  • Anonymous
    You're all idiots. Use the right tool for the job. Sometimes Java is the right tool, sometimes it's not. I've been using C for the past 3 years and so far don't have any reasons to change it.
  • kuldeep
    Yaa i too agree its not quetion of whether java is better than some other language but the question should be which technology is better for the project in hand.Their is no Panacea in the programming world.
  • Kevin
    This article (and subsequent posts) is like a trainwreck... I couldn't take my eyes off it. I've never seen anyone complain before about having too many choices. There's alot out there and it's a powerful thing, just take time to do a little research and figure out the best approach. You can't be so sure of yourself if you don't know what you're talking about.

    I'm still trying to figure out Jimmy's TOY rant. That was the funniest and most absurd thing I've read in a while.
  • Anonymous
    In our shop the Perl code runs faster than java. As for apps, just launch NetBeans IDE and go for a walk. Java is a dead horse now with all the other BETTER options from PHP to Trolltech Qt. Its only a question of legacy - so if you like being a java janitor, you are in luck. But things are changing fast and Java is no better in 2005 than it was in 1995. Its still a toy for professionals who refuse to be weened from the java tit.
  • Anonymous
    I HAAATE java *written while sitting in a java class*
  • Anonymous
    Or you could just use Perl. Seriously. I've heard all the alarmist hype on perl but it is far superior to anything else I've used but: 1) you can ALWAYS do exactly what you want exactly at the time you want to. (like you said, there are NOT a zillion choices that require learning a hugh class, how to use it, and how its zillion member functions work.) 2) It ALWAYS works the SAME on ALL systems! (Java works differently depending on the platform) Finally, I have been on a one person web application project for 5 years (Perl). The folks over the wall have been using Java for 4 years. Everyday they have a crisis on their 6 person team (even though their app is only a little bit more complicated then mine) They are continuously banging their heads against the wall spending a week or more working out solutions to Java problems they encounter. On my project, I think the longest I spent on a bug was 30 minutes in 5 years. Perl is concise, direct, consistant and guess what? - you don't *have* to write obfuscated code with it. My Perl code is more readable than any Java code I have ever seen. The Java people peer review it for me.
  • All this 'Perl' bullshirt. You wonder why jobs are heading overseas? "We've been using Perl for X years; it's great." Get off of it.

    Perl is a great replacement for Bash, ksh, csh, etc. That's it. It is not a high level team / project oriented language, but it is for the high school "I don't need a Computer Science degree" asswipes.
  • java sucks
    - classpath issues to no end
    - jars inside of jars inside of wars inside of ears all to overcompensate for the lack of a linker
    - EJB. don't need to say any more
  • you sucks
    Java itself is ok and beautiful to create large scale software, but J2EE sucks

    Don't get too much into the hundreds of framework. You don't need a framework another than jsp if you are making webapp less than 5000 lines.
  • java bites
    For this reason alone I think Java SUCKS!

    How do you find the number of days between two dates in Java?

    http://forum.java.sun.com/thread.jspa?threadID=...

    VB6 has DateDiff, VB.NET and C# it is not much harder. Talk about reinventing the wheel.
  • Nice little compilation of facts. I agree especially with the web services stuff.

    Just not at all cohesive. The learning curve for new adopters in Java is prohibitivley steep. Even with a tool like NetBeans, developing web services is such a hazard. The standards change overnight as they make all these heady decisions about whether it should be "document centric" or not. Blah blah blah.

    Just release ONE god damn API already. And stop forcing me to write my programs according to YOUR (Java's) patterns! The best example again is web services - look at how much you lose from something that is going to turn into a servlet in the end?!

    Microsoft is kicking Java around now with .NET 2.0 and ASP.NET 2.0. Good & hard.

    Time for Java to wake up and consolidate once and for all. It has way too many APIs that build on each other. Most people end up only being interested in the end result of a collection of the APIs, and they're so confusingly explained and dependant on each other, nobody wants to have the risk in using them!
  • Fernando
    If Java sucks that big then why is it the chosen programming language for most academic work that is underway now?

    And what the heck is this bunch of 'you need to learn' straw man arguments? Bull crap, specially when you suggest .NET at the end. And no mention to Rails ?!?!?!

    You can write good software in Java just as you can in any other language. I've seen tons of nice Java application that were really easy to maintain and test.

    And btw who said JUnit is a bad thing? I can't see why testing your application in a concise, reusable way could be wrong.

    As two other folks mentioned here,
    1) you don't need to know all the crap listed in the original post to be a good Java programmer.
    2) your choice of language doesn't dictate how good your application will be. it's up to the programmer to write it properly or not.

    And finally, for the dark ages fellas:
    Patterns are GOOD. Welcome to the 21st century, and go take some CS classes if you feel lost.
  • George
    Ruby is the best languige, it takes all the good ideas from perl and improves opon it and it is terse
  • nope.thanks
    I was developing web apps with PHP. I thought it's very good, until I started upgrading PHP every month.
    I have started writing java web applications with simple servlets and jsp pages. I liked it.
    Then I learned XSLT and I thought: hey that's cool.
    Then I learned Struts and ... wow it's so easy to write and maintain your web applications. It's really great.
    To work with DB I was using only jdbc.
    Then I started using OJB and hey it works so good. Both Struts and OJB saved me so much time and made the projects much easier to extend.
    So ... what is so bad to have choice?

    I'm using .NET and it's good. But I have so many troubles with it and VS:
    no CVS and no way to use SourceSafe over internet
    you can't put two forms in a page /that is sooooo stupid/
    the event model is weird, yes it works, but sometimes you are not sure what happens first and what second
    And guess what. I can't choose the development IDE, I can't choose the application/web server, I can't choose the server's OS.
  • Eerie
    This "difference between two days" thing in Java is so horrible that I have to share the Ruby version with you.

    require 'date'
    old = Date.parse '2005-06-17'
    diff = (Date.today - old).to_i

    ..which gives you 333. Could've been written in one line as well. You can also write like old + 122 to get 2005-10-18. You can do the same stuff with the built-in Time class which will answer in seconds (one division needed).

    But of course this language is a TOY.
  • Finding the difference between
    You can use the overcomplicated approach, or you can use:

    long diffInMiliseconds = firstDate.getMillis() - secondData.getMillis();


    Java doesn't suck any more than any other language around. It just has its pros and cons.
  • Melvin R. Zamora
    Its natural, things are evolving. Trying things, tieing and untieing, writing and erasing.

    More choices? meaning there's great innovation going on.

    Keeps changing? meaning there's great renovation going on.

    One has to stay its own camp, avoid sailing on two rivers. If your boat is sinking find another boat or fix the hole.

    Maybe you will find a confluence by the year 3000.
  • Melvin R. Zamora
    > Who really uses a Java application that uses Swing? Nobody, and for a reason: Swing sucks.

    Java in early years is considered as an adjustment stage. So it sucks! Just like you, you suck in your early years.
    Just like anybody else, One has to ask this question: "Am I productive in my formative years?"

    You can just wait and see as it progress. BTW, bad comments are good, it helps us suck more.
  • Erwin Katz
    TO those of you who say that they have never seen a Swing app, try the top 4-5 investment banks in the world. They use mostly Swing apps deployed over webstart.

    Swing is NOT slow. If I click a button and it takes a while.... it is PROBABLY BECAUSE THE CODE THE BUTTON TRIGGERS IS SLOW! Do not shoot the messenger! There have been many screwy sluggish Java apps out there, and many people blame the GUI because it is what they see.

    Swing is NOT ugly. There are many look and feels out there that absolutely trump anything else on offer out there.

    Swing IS difficult to master. It will take a good two to three years to become an expert in Swing. But the rewards are worth it. 500 pounds a day contracts are out there if you are willing to master it.

    I don't know what alternatives exist for Swing, but I can't see any better GUI toolkit out there at the moment. The author who wrote this blog is clearly a moron.
  • "Erwin Katz" wrote:
    > The author who wrote this blog is clearly a moron.

    Zef, I think you got another fan.. :)
    enjoy your holiday..
  • Japs
    J2EE Sucks. (Period) .NET Rocks.
  • Chris King
    Of course you are mostly dev types and so miss the main pains. 3 apps, 3 different developers...

    Dev one: 'just use 1.4.2 and it will be fine.

    Dev two: 'Ya, you will have to update to 1.50 update 6, sorry...good luck'

    Dev three: 'Ah, hey its Java...all I need to know is the browser and the version of JRE...'

    Hey, thanks Sun. Guess what, they have NO solution and if you do some asking they just say, the developer of the application will need to look at that.

    Christ, try to support 3 'mission critical' Java applications and add to that a dozen outside apps that all seem to need a different JRE.

    Yeah, real platform independant. Thanks Sun for empowering Developers to wash their hands of reality.

    -ck
  • ian
    It's not C++/java/ruby/python that's the problem, it's the software paradigm they're written around. The reason they're all clunky, over complex, multi-tiered, overly reliant on previously written code, difficult to alter, is because they are based on the failed and failing programming paradigm that is Object Oriented Programming.
    It's based on a tissue of unsubstantiated twaddle about how it mirrors the real world, easier maintenance, etc etc, I'm sure you've heard it all.
    That's why C and Perl make better faster more maintainable programs. While it's OOP, it will be crap, that's why it seems counter intuitive, because it is.
    Ian
  • Simpleton
    I've noticed that the most enthusiastic Java supporters have the least experience of other programming languages. These are the same guys who have no experience of other programming *paradigms* either. This is known as lack of perspective.

    These Java "cheerleaders" seem to be also the kind of guys who like to tinker with complex stuff, and challenge themself with difficult solutions - like it was a some sort of a game.

    These are NOT the kind of guys who are interested in the *project* they are on, or about client satisfaction, or project schedule, maintainability, or simplicity.

    Java sucks in many ways, but it takes perspective to see it.

    One good proof, as someone mentioned above, is that Java projects are always in some sort of crisis. There is always some mystical technological hurdle to overcome.
  • Dopey Joe
    //One good proof, as someone mentioned above, is that Java projects are always in some sort of crisis. There is always some mystical technological hurdle to overcome.//

    Java projects are only in crisis if those who code them are idiots.
  • Scott
    Typical windows developer comments. Choice is the reason to go with Java. One of the last comments talks about Java project being in "crisis" which is simply not true. I've been working with Java for 5 years now, and have not faced technological hurdles anymore than I faced with any other language.

    Lastly, if you want to write something specific for windows go ahead, nobody's sitting over your shoulder saying you have to make something platform independent (unless your boss is). Java is meant to be able to span OS's and have the same functionality available with the same codebase, but if all that exists in your world are windows users then by all means write it specific to windows.
  • Fernando Gonzalez C
    The author has many problems about the criticism about Java, worst of them is doing good projects of development without have a minimal requirement of theory, technology and design.

    I respect overall his points of views, but i don't share those. Is true, in J2EE projects you have to know many specifications, but not at all!, this depends on the complexity of the project.

    The author should matures himself, working in development houses where bit by bit he realizes to take a whole understanding of J2EE.

    Thanks
  • Nicholas T
    As someone said above, you are obviously all idiots. Languages, frameworks and technologies are all weapons of choice.
  • Nicholas T
    Also the precious tray that the blogger envied so much is part of jdk1.6.0, in a cross-platform implementation ;)
  • http://area51solutions.com/modules.php?name=New...

    Applies to :The World

    Removing Java Support

    As of July 8th 2008 Area 51 IT Solutions will no longer be supporting Java technologies. Sun Microsystems has failed to keep integrating Java technologies up to date on Windows Servers and make the integration process on the fly.

    Its pretty bad when a server admin has to uninstall the latest version of a techonology and load a version 4 years older with all kinds of security holes and problems to make it work. Jrun is no longer compatible with latest version of JRE 1.6 and cannot be installed to run it on the fly.

    Sun Micrsystems never realeased a offical filter for there latest version of JVM.dll to handle servlets or jsp, applets or any technology to handle pre hyper text request on open tag pages.

    They never came out with a appropiate ISAPI Filter to scaline there JVM.dll . Java is dying and we refuse to integrate any technology that refuses to exceed customers expectations or security needs.

    Area 51 IT Solutions Does not take Interest in Sun Microsystems and its lawsuits involving Microsoft.. We only care about the quality of the coding our customers recieve and Sun Microsystems fails to meet our standards.
  • andor toth
    massive lolz at the comments on having to learn some database/persistence/programming/framework skills, these are not drawbacks, these are musts anyway for any skillful developer, and they actually help a lot

    luckily enough the severe "drawbacks" of java have been solved or worked around by now by the likes of SWT, Applets in 1.6 (just check Quake2 running in an applet using opengl), JSF, TopLink, Java EE5, IceFaces with Ajax or countless other open source top notch frameworks basically for developing any kind of software. Of course, .NET also has these capabilities, actually Microsoft and the Sun led java community is in a healthy competition they are trying to implement each others best ideas even better in both directions. Only difference Java is multi-platform (in theory .NET also is i dont really know if there are any production level .NET implementations for other OS-s than win) and open source
  • Mark Howard
    well i am a complete beginner and looking at java and c#

    I am confused lol

    I think ill go with C# then check out java

    Java seems overwhelming with the all the j names and j2ee swing etc etc etc

    C# ofcourse is windows only but windows isnt going anywhere..

    if you have some advice shout it..
blog comments powered by Disqus