Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?
Java Programming

Why is Java Considered Un-Cool? 1782

jg21 writes "After the Slashdot discussion on Paul Graham's 'Great Hackers' essay, it had to happen. Java developers have taken umbrage at Graham's assertion that "Of all the great programmers I can think of, I know of only one who would voluntarily program in Java. And of all the great programmers I can think of who don't work for Sun, on Java, I know of zero." Now in JDJ Sachin Hejip pinpoints the Top Reasons Why Java is Considered Un-Cool and to tries to debunk them. He levels some of the blame at the Java compiler for "too much chaperoning" and speculates that Java fails the geek test precisely because "it's such a language-for-the-masses." But isn't he missing the point? Enterprise-grade apps and "coolness" may be inapproriate bedfellows. Besides, does any language offer both?"
This discussion has been archived. No new comments can be posted.

Why is Java Considered Un-Cool?

Comments Filter:
  • by Defiler ( 1693 ) * on Tuesday August 24, 2004 @09:32AM (#10055164)
    I'm not sure the article author has actually read the Paul Graham essay that he is responding to.
    He almost entirely fails to discuss any of the attributes that Graham assigns to languages that 'Great Hackers' like to use.
    In particular, Graham claims that terser languages are more powerful [paulgraham.com], because studies have shown that coders churn out a pretty constant number of lines per day, regardless of the programming language. Java is anything but terse.
    I could go on, particularly since the Sun JVM isn't open source, and Graham makes a point of claiming that Great Hackers prefer to use open source tools. I think frantic defensive articles regarding Java aren't helping anyone. The managers that choose Java don't read Paul Graham articles, and I doubt Paul Graham much cares what a Java-oriented business journal has to say about his articles. Please note that I am just relating the opinions that Graham has put on his website. I do not necessarily share his views.
    • by skaffen42 ( 579313 ) on Tuesday August 24, 2004 @09:47AM (#10055323)
      Yeah. Java really sucks and is uncool. No open source programmer would ever use it.

      Hell, could you ever imagine an orginization like Apache producing Java code. If that ever happens I'm giving up and moving to Jakarta [apache.org].

    • by LWATCDR ( 28044 ) on Tuesday August 24, 2004 @10:11AM (#10055612) Homepage Journal
      I do not find java all that verbose. Terse or not the really key to getting real work done quickly is a large collection of libraries so you do not spend your life reinventing the wheel. Look at Perl it is not a pretty language but cpan makes it so useful that it has yet to be replaced by Python or Ruby.
    • by mwood ( 25379 ) on Tuesday August 24, 2004 @10:43AM (#10056054)
      "the managers that choose Java"

      Hey, waitaminute, who let the *managers* choose?

      "Fred, here's a saw. Go pound some nails in."
    • Depends ... (Score:5, Interesting)

      by gstoddart ( 321705 ) on Tuesday August 24, 2004 @10:48AM (#10056122) Homepage
      In particular, Graham claims that terser languages are more powerful , because studies have shown that coders churn out a pretty constant number of lines per day, regardless of the programming language. Java is anything but terse.

      In my experience (which isn't huge with Java, but I've used it for commercial work), one of the things I liked most about Java was that it actually tended to save me lines of code.

      Oh, sure it's got an explicit full-on syntax, but I'm comfortable with that. What I was most impressed with was there was a vast amount of standard data types and APIs available to accomplish a very huge amount of stuff. Looking at C++ and the like, the APIs are anything but cross-platform. (Any helpful links to a good C++ API (not GUI toolkits) which is both POSIX and Windows might make me use that some more.)

      For the type of code I was writing at the time (oddly enough, server side stuff behind a web front-end, no GUI) I found I could always find a standard routine to do what in the past I've had to implement from scratch.

      I also specifically loved the good type checking and the like. I want that from my languages.

      I'm actually planning on using it for some projects I want to work on for myself.

      Would I say it's the perfect language? Nope. Would I claim it has all of the shiniest language features? Nope. Do I, as an old-school C-coder, think it's a straight-forward API rich language that I can get stuff done in? Damned straight!

      Since I don't grok functional-programming and I despise languages with really wierd syntax and the like, for me, Java is like the Toyota Camry of languages. For the way I use it, it's fine.

      • Re:Depends ... (Score:5, Informative)

        by Saucepan ( 12098 ) on Tuesday August 24, 2004 @11:24AM (#10056617)
        Any helpful links to a good C++ API (not GUI toolkits) which is both POSIX and Windows might make me use that some more.
        C++ has been around so long that by now there are jillions (possibly even hojillions) of C++ libraries/frameworks/APIs. Since you say you don't need a GUI kit, and assuming you are doing server programming, you might find ACE [wustl.edu] helpful.

        I used ACE for a previous multithreaded server and the project was very successful. We developed on Linux and FreeBSD but had no difficulty porting to Solaris, and could have ported to Windows with a couple of days of effort (we had use the occasional POSIX-specific idiom, but this was our own fault, not the toolkit).

        The author, Douglas Schmidt, is a well-known standards wonk and performance freak -- an interesting combination that results in a kit that provides full cross-platform support while running hard with C++'s approach of "you don't pay for it if you don't use it." The kit included a full CORBA ORB [wustl.edu] that supported realtime operation (ie, bounded maximum delay).

        Probably the best compliment I ever heard about ACE was a from a very senior coworker who commented that ACE was "not bad, for C++." Trust me -- from him, that was high, high praise.

        Having said all that, when I have to share the tree with other developers, Java is my favorite mainstream language.

    • by jimfrost ( 58153 ) * <jimf@frostbytes.com> on Tuesday August 24, 2004 @11:14AM (#10056453) Homepage
      studies have shown that coders churn out a pretty constant number of lines per day, regardless of the programming language

      This is true, but that is not the whole picture. One of the things that was obvious right away is that minimizing the number of things the programmer can do wrong causes a significant jump in the effective productivity of the programmer.

      Brooks talks about this in the Mythical Man Month as it related to assembly versus high level languages, but we do see the same effect when moving between a language like C and something like Smalltalk or Java. It has been my experience that a good programmer writes more and higher quality code in Java versus C or C++, largely due to three factors:

      1. Mandatory exception handling forces error handling down into the code where it can best be dealt with. In other words, you have to work harder to not handle abnormal situations.

      2. Garbage collection eliminates whole classes of memory mismanagement problems.

      3. Standard libraries contain many useful classes that had to be written independently in C/C++ (leading to a variety of different container classes, for instance, of widely varying usability and quality).

      All three of these affect both time to deliver and quality of delivered code. We're not talking about minimal changes in productivity, either. I've been watching and working with Java and C++ since ... well, pretty much since they made it out of the laboratory. The improvement in real world productivity seen with Java is a factor of two to four greater on average versus C/C++ (measured by "how long does it take to get this feature to work", which is not necessarily the same as "how much code did I have to write"). Often lower for GUI work (depending on which GUI toolkit/tools you're using) but much higher for network code. Moreover, bug counts in released code are dramatically lower, like one tenth as many, and they tend to be less serious (a feature may fail, but seldom does the entire application fail).

      In any case I guess I would have to vehemently disagree with Graham's contention that great hackers don't use Java. I suspect that is more a matter of which circles you run in, as that certainly doesn't hold true in my experience. There are fewer using it today than three or four years ago, but I surmise that that is mostly a matter of language maturity; the best programmers tend to sit on the bleeding edge, and that's not Java anymore.

      Your mileage may vary, contents may have settled during shipping, etc.

  • by illtud ( 115152 ) on Tuesday August 24, 2004 @09:33AM (#10055173)
    ...I'd love to tell you, but I'm trying to fix my $CLASSPATH
  • How about (Score:5, Insightful)

    by antifoidulus ( 807088 ) on Tuesday August 24, 2004 @09:33AM (#10055177) Homepage Journal
    people just concentrate on the best tool for the job instead of worrying about things like, "coolness".
    These, "my programming language is better than the rest and here is a list why" arguments are BS. Every situation is different, every problem requires different tools/methodologies to solve. You wouldn't go into the carpentry business and claim your hammer is the best hammer for every single job would you? You would be laughed at and possibly hit in the head with said hammer. Same goes with programming languages.
    • Re:How about (Score:5, Insightful)

      by Bastian ( 66383 ) on Tuesday August 24, 2004 @10:32AM (#10055924)
      people recognize that using the best tool for the job every time isn't the way to do it, either. It's good to be comfortable with a lot of languages, but if you're constantly switching between FORTH, Perl, C, C++, Java, SmallTalk, VB, Ruby, Common Lisp, Python. . . you're never going to actually get good at anything.

      There are cases where you want to choose the best tool for the job because some options are just terrible. There are also cases where you should stick with what you know. If I'm banging out a quick workflow integration app that needs a GUI on a Mac, AppleScript may be the 'best' language for the job, but it's also true that I don't work with AppleScript much and my level of expertise in it is low enough that I would probably get the job done faster and better if I did it in Objective-C despite its not being the best language for the task.

      This "best tool for the job" analogy shouldn't be taken too far. Comparing hammers to programming languages is like comparing hammers to engineering contractors.
  • Its just a tool (Score:5, Informative)

    by hoofie ( 201045 ) <<moc.mikdnaemearg> <ta> <emearg>> on Tuesday August 24, 2004 @09:34AM (#10055185)

    Java is a tool - just like every other programming language.

    People do/don't use Java for many reasons - the choice of a programming language in a commercial environment depends on many different factors.

    I work in Java - I can't say it excites me but it does the job.

  • Wait (Score:5, Insightful)

    by Lord Grey ( 463613 ) * on Tuesday August 24, 2004 @09:34AM (#10055189)
    The title of the article is "Top Reasons Why People Think Java Un-Cool - Debunked" (emphasis mine). I did RTFA, and I saw no debunking. Just a list of reasons why people might not like Java.

    This is news?

  • COBOL (Score:5, Insightful)

    by sql*kitten ( 1359 ) * on Tuesday August 24, 2004 @09:35AM (#10055191)
    Java is the new COBOL. No, I mean that quite seriously. COBOL means "COmmon Business Oriented Language". Java is the language of choice for modern day corporate application development. In the corporate world - which probably accounts for more actual lines of code than anything else - applications fall into two categories, forms (inputting data into databases) and reports (getting data out of databases). The corporate world wants legions of cheap, interchangeable programmers to work on these applications. Kids are taught Java at college or learn it themselves. The language makes it very easy for one person to work on another person's code, and it makes it quite painless to document your work as you go. That's the reason "hackers" don't like Java - they've just transferred their traditional dislike of COBOL to it.
    • Re:COBOL (Score:5, Funny)

      by Marlor ( 643698 ) on Tuesday August 24, 2004 @09:40AM (#10055249)
      Java is the new COBOL. No, I mean that quite seriously.

      Well, considering what COBOL programmers are earning these days, Java might be a valuable skill in the future.
    • Re:COBOL (Score:4, Interesting)

      by RetroGeek ( 206522 ) on Tuesday August 24, 2004 @09:54AM (#10055418) Homepage
      COBOL was developed the way it was to allow managers to look at the code and have some reasonable chance at understanding what it does.

      Which is why you have "sentences" and "paragraphs" and why COBOL is so damned wordy.

      It is supposed to read like English. And if you go to some trouble with the naming of your variables you can almost make it like that.

      Perl is the opposite of COBOL. Succinct to the point of incomprehensibility.
  • Too verbose (Score:4, Insightful)

    by random_culchie ( 759439 ) on Tuesday August 24, 2004 @09:35AM (#10055196) Homepage Journal
    Some of the things in java are terribly verbose. especially when going to design GUIs.
    Using the language you just "feel" as if there should be an easier way.
    I'm no fan of microsofts products but I think C# is an excellent language to program in. It addresses alot of Java's shortcomings and it is a joy to program in.
  • by gr8_phk ( 621180 ) on Tuesday August 24, 2004 @09:36AM (#10055202)
    The site must use a lot of Java code.
  • by wayward_son ( 146338 ) on Tuesday August 24, 2004 @09:37AM (#10055214)
    It's got the simplicity of C++.
    The freedom from corporate interference of Visual Basic.
    The speed of an interpreted language.

    And you wouldn't believe how efficiently it uses RAM and CPU power.

    I don't see why everyone doesn't use Java!
  • Who cares? (Score:5, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @09:39AM (#10055235)
    Who cares if it's cool or not? From my point of view, it pays the bills.

    From my employer's point of view, it makes me more productive than (most) other languages would, since I spend less time worrying about crap like header files, pointers, memory leaks, and so on.

    So everyone wins. "Cool" stopped being important when I turned 18.

  • by freality ( 324306 ) on Tuesday August 24, 2004 @09:40AM (#10055244) Homepage Journal
    See how easy it is to assert that something isn't cool?

    When I read Graham's article, I was disappointed. It had that air of someone being passed by, by a lot of fun. Saying Java isn't cool is like saying Scheme or ML isn't cool. It's just a personal preference, and when you express it, you run the risk of sounding anal and/or ignorant. His older articles were better considered.

    Here's my utterly ignorant statement of the day: No matter how many ultra-cool hackers I know tell me that Lisp and Scheme and ML are cool, I never have fun using them. They force my brain into such an unpleasant state of nerdliness that the only thing I can program in them is a mathematical proof or some sort of logical system.. in short, I'm forced to become a boring CS professor using them.

    Don't bother debunking reasons why Java isn't cool. The only path to cool is the acceptance of luserdom. Only when you have nothing to lose will you dare to do something audacious.

    Look at punks. The only time they're cool is when most of society considers them fringe lunatics with no social graces. And then the rock happens again. It's when they're "cool" that the music invevitably begins to suck.

    Being called uncool is a blessing in disguise. Thanks Paul.
  • Java pays!!! (Score:5, Interesting)

    by KrisCowboy ( 776288 ) on Tuesday August 24, 2004 @09:40AM (#10055248) Journal
    During the recruitment week in our university, one of the companies that visited was CA(Computer Associates). CA guys gave an options. The students can chose either one of C, C++ and Java for their exam. Well, 80% of the guys went for C, because it's their `first language'. Rest of them went for C++ and only 1 student out of 120+ students opted for Java. To cut a short story shorter, he got selected after a technical and HR interviews which were cakewalks compared to other guys' interviews. Well, if a language's gonna pay me 25,000 bucks(Indian Rupee) a month, I'd be more than happy to go for it. Cool or not.
  • by DesScorp ( 410532 ) <DesScorp.Gmail@com> on Tuesday August 24, 2004 @09:44AM (#10055291) Homepage Journal
    Most developers I know basically slam it for it's reputation for being slow, and frankly, because it's not C, the geek Gold Standard. Perl has the same difficulty and has it's own cultish crowd (Perl users are the Greatful Dead fans of computer science). Python is somewhat trendy as well.

    But Java....Java was designed to be easily learned, and to especially be used in web-based apps. To Unix geeks, that makes it kind of the Visual Basic for the Slashdot crowd. Not something to brag on.

    Fact is, it's a great language, and it's still growing. A friend of mine is a professional Java developer (mostly server side stuff), and he's one of the brighter bulbs in the lamp. He loves it, and still thinks Java's potential is largely untapped. Whereas we know what C can and can't do, Java is still growing. He thinks it'll be used (and used effectively) for things we can't even imagine yet.
    • by pthisis ( 27352 ) on Tuesday August 24, 2004 @10:27AM (#10055851) Homepage Journal
      Most developers I know basically slam it for it's reputation for being slow, and frankly, because it's not C, the geek Gold Standard.

      That's not it at all. First off, I'd say Lisp (not C) is the geek Gold Standard--most of your top-name geeks, from Mccarthy on through RMS to Jamie Zawinski and ESR have been LISP hackers, with the notable exception of kernel/systems guys. Even GIMP was written by LISP fans. But C is definitely in the running, primarily because it fits a (rather large) niche very well--it's the closest thing to a portable assembly out there when you need to get down to the nuts and bolts and still be kind of portable.

      [Note that I am not supporting any of the following arguments, merely enumerating what I think some of the objections to Java are.]

      What Java doesn't do, from a geek standpoint, is fill a niche very well. A true hacker wants a language that is committed; if you're going to be strongly typed, be VERY strongly typed and have a decent type inference mechanism a la Haskell or ML. If you're going to be dynamically typed, by really dynamic like Scheme and Lisp. If you're going to be OO, support it fully like Scheme, Python, and Objective C (and geeks tend to support the Scheme-world definition of OO). And if you're going to be functional, do _that_ full-out like Lisp and ML.

      Note that these are all language features. Most geeks want to support a language based on the language itself, not on the libraries or the implementation ("those can be fixed" is the somewhat insightful and somewhat naive argument). As a language, Java isn't anything new and doesn't fit any of those areas as well as other languages.

      I think it's almost secondary that Java is a B&D language; it's the failure to be pure about how it implements various programming paradigms and type structures that gives it the geek *yawn*. C++ suffers from the same thing.
  • by DG ( 989 ) on Tuesday August 24, 2004 @09:44AM (#10055293) Homepage Journal
    Enterprise-grade apps and "coolness" may be inapproriate bedfellows. Besides, does any language offer both?


    No, seriously - properly written perl is both "enterprise grade" and as cool as hell.

    Of all the languages I've ever worked in, nothing let me build systems as easily, as robustly, and as QUICKLY as perl did.

    Remember the Daimler - Chrysler merger? Perl was the glue that unified the HR systems and LDAP directories. As far as I know, it still does. Our LDAP - LDAP replicator tool (written in Perl) was a damn sight more reliable than the native replicators, plus it would do schema translation, plus it had a smaller footprint.

    Somehwere along the way, perl seems to have picked up a bad reputation for being illegible and obscure - and certainly one has the freedom to write the cliched "line noise" programs if one wishes. But perl done right can not only be legible, it can be beautiful.

  • Oh come on (Score:5, Insightful)

    by Phaid ( 938 ) on Tuesday August 24, 2004 @09:44AM (#10055303) Homepage
    It's just not that hard to understand this. For good or ill, programming has always been an ego-driven profession. You hear stories of punch cards and marathon hacking sessions, and how cool it was that some guy arranged all of his code so that memory accesses were precisely in alignment with the rotation of the memory drum. You do not hear about how cool the fact that someone's applet can't crash because of automated bounds checking and lack of explicit pointers.

    Java is seen as uncool precisely because it protects you from your own mistakes -- it's an attempt to make programming approachable to the masses, and the fact that it's forgiving makes it look like programming with training wheels. And just like the 50 year old MBA will never fit in with the Harley crowd, Java programming will never be seen as cool as "real" hackers' languages like C.
  • by revscat ( 35618 ) * on Tuesday August 24, 2004 @09:46AM (#10055318) Journal
    ... where does that put C#? In the basement with the red Swingline?
  • Totally mis-informed (Score:4, Informative)

    by brunes69 ( 86786 ) <slashdot@k[ ]stead.org ['eir' in gap]> on Tuesday August 24, 2004 @09:51AM (#10055371) Homepage

    The number of mis-informed posts on this subject is staggaring. An attempt to debunk some of them:

    Java is slow - This is a myth. A long-running Java app running under HotSpot will over time grow to be faster than nearly any simmilar C or C++ app. Why? Because the Vm can over time learn how the codepath actually is executing and optimize it at the assembly level. The only way you could consistantly achive performance as good would be to hand-code the whole app in assembly, and thati s assuming you already know in advance exactly how the program will be used so you know what paths to optimize. This is highly unlikely.

    Java UIs are slow - Java UIs are only as slow as your toolkit. Yes, Swing blows ass. But there are Java bindings for Gtk, Qt, and wxWindows, all of which are pretty cross-platform. And there is also the SWT toolkit from IBM which uses native widgets when possible, and when not falls back on its own widgets.

    Java needs a VM so you can't run it everywhere - THis has to be the dumbest one of all. Since when can you write any resonably complex C or C++ application for multiple platforms without some effort? Any C/C++ app targetting anything more than basic POSIX will be littered with #ifdefs everywhere. With Java at least you can complile it just once, then ship multiple VMs , rather than having to adust your code and re-compile for every target platform.

    • by Frankie70 ( 803801 ) on Tuesday August 24, 2004 @10:16AM (#10055683)
      Pete Becker of Dinkumware has debunked a lot of FUD spread by Java Programmers. Pete worked on the Java Library & the C++ Library for Dinkumware (& earlier for Borland) so he knows quite a bit about the subject.

      Here are his usenet posts [google.com] on the subject.
      • by brunes69 ( 86786 ) <slashdot@k[ ]stead.org ['eir' in gap]> on Tuesday August 24, 2004 @10:32AM (#10055927) Homepage

        Some of his posts are grossly incorrect. Examples:

        But the semantics for many programs would not be correct, since Java requires array bounds checking. Disabling it means that you're not compiling Java.

        True, if youe xceed the bounds of an array in a Java app you will get an array out of bounds exception - but that is the worst that can happen, a nasty error message. However, this is a totally different can of worms in C/C++. If you don't check the bounds of every single array, you could be exposing buffer overlows in your application, which is a huge security hole. +1 for Java.

        You've posted three examples of code that you claimed was as fast or faster in Java than in C++, and every one of them, when compiled properly, turned out to be faster in C++ than in Java.

        Faster when run how many iterations under hotspot? 1? 10? 100?

        In Java you have to write nine copies of the basic sort function: one for arrays of chars, one for arrays of doubles, one for arrays of Objects, etc.

        For one, most people use the Collection or List interfaces for utility classes so that you can pass in any type of object, be it an ArrayList or a linked list, so in the Real World(tm) this is rarely an issue. Additionally, Java 1.5 has templates so it is a moot point.

        I could go on and debunk more of his debunking, but I can tell from his posts that ihe is quite biased and is not being resonable. Just for reference, I am *not* a Java developer. I write a lot of C++ code and a lot of java code, both are ideal for certain situations. For example, desktop apps with need for a fast startup time will always be best written in C++ until Java Vms are built into the OS. But for long-running business applications, where startup time is not a huge requirement and ease of development, debugging, and security are a higher priority, Java wins hands down.

    • by Anonymous Coward on Tuesday August 24, 2004 @10:26AM (#10055835)
      In theory, all of hte above is correct.

      But I am a JAVA developer using Borland JBuilder X (one of the leading JAVA IDEs, implemented in JAVA) on a 3Ghz machine. The UI is the slowest, most unresponsive thing on my system. If the maker of one of the leading JAVA IDEs can't package their system (w JDK of their choice, toolkit of their choice, etc) so that its responsive on a modern machine using XP Pro, then I think it's fair to say that JAVA is slow for GUIs. (Yes, XP pro sucks, but every other app on my machine, most of which are written in C/C++, work fine.) Try eclipse - even using SWT, my experience is that its about as unresponsive, compared to Microsoft's C++-coded IDE, and even compared to Emacs, which is largely written in bytecoded LISP (and not even a very fast LISP) and has been known as a hog for decades.

      Also, while hotspot VMs in principle can grow to faster cpu performance than native compilation, the major cause of JAVA's slowness is space cost, not time, plus startup time (of the JVM, classloader, etc). I've never heard of any JVM which is reasonable in space terms. Most need a 10M resident set for hello world, and go up very fast with increasing complexity of app.

      Starting BEA (_the_ leading JAVA app server) on my system takes 30 seconds. This is absurd. (And it's not even precompiling the JSPs needed, because as soon as I hit a page, it chokes again for multiple seconds.)

      Plus, htere are things that native compilers are better at than hotspots, as they can make lower-level decisions than a bytecode compiler while they can still see the source tree. I don't think either type of compiler is clearly better than the other, but I don't think its fair to say that JIT is always faster. Try using a few JAVA apps, then using a few C++ apps, and see which one works better.

      That said, JAVA has a huge security advantage over C/C++. Even experts screw up sometimes using those languages (look at the occasional security hole in carefully coded bits of core unices). _Any_ garbage collected, bounds-checked language has much of what JAVA has (excluding secure classloaders, sandbox, bytecode verification) for security, in fact. Some, such as OCaml and Common LISP, can potentially be far faster than JAVA, especially at compute-intensive tasks. If speed is no object, use Python or Perl (and I know, sometimes they're just as fast).

      Tool choice depends on the task. And sometimes the task is "interface to these twelve hoary enterprise systems using the same language the standards committee decided the other twelve hundred programmers will use." Don't laugh. I think the analogy from JAVA to COBOL has some truth to it...and just think how much better of a COBOL JAVA is, in most ways. But that doesn't mean that Paul Graham should like JAVA. He made his career by seeking out the kind of problem that is NOT subject to the above constraints, but very different ones. (Did anyone actually _read_ his article? Or his other 30?)
    • by kahei ( 466208 ) on Tuesday August 24, 2004 @10:49AM (#10056136) Homepage

      Java is slow - This is a myth.

      I honestly don't understand why people are still repeating this. It _is_ slower than either native C++ or .NET (MS implementation, don't know about Mono) for the vast majority of serious tasks (I am not including GUI stuff). It's all very well talking about how in theory HotSpot will optimize code beyond what a static C++ compiler can do, but the memory requirement of the Java program is typically so much greater that processing speed barely matters -- and it cannot be optimized, without a scary custom VM, because the app programmer has no direct control of it. I'm not just saying that for my health -- _look_ at Java memory footprints, _look_ at your options for reducing them (ie adjust the GC. Great.)

      Java bytecode is not easy to optimize, having been originally intended for interpretation (my, how silly that seems now!). This is usually a minor issue compared to memory. I also suspect that, using the standard Java libs, IO is bound to be slower than a more direct approach unless the JVM takes some shortcuts and makes some methods into special cases. But actually, from the point of view of my actual work it doesn't matter what the reason is -- performance critical serious number crunching is done in C++, and that's pretty much a universal, because everyone relevant has made the same simple observations I have. This C++ can then be wrapped with a Java interface for the benefit of other systems that depend on Java and for people who only care about whether the system is Java or not (and so that it works with WebSphere now that the company is locked into WebSphere, heh heh).

      So, _whyyyyyyy_ am I _stilllll_ told by posters on /. and people just out of university that "Java on Hotspot is theoretically faster than any compiled code!" I mean just stop it. Please. You are free to use Java. Java has many good points. Go use it and enjoy those good points and HUSH UP ABOUT HOTSPOT.

  • by blackmonday ( 607916 ) on Tuesday August 24, 2004 @09:52AM (#10055380) Homepage
    Maybe it's because a whole lot of us are too busy working on multi-million dollar financial projects to stop and tell you how cool it is? Java is all about the server side, so if we're not coding desktop apps, its because there's more appropriate software out there for that. That doesn't make Java uncool - there's a lot to be said about enterprise Java. Whether it's cool or not, it works.

    By the way, I frequently use a very cool Java desktop app - It's an Amp/Effect editor from Line 6 that controls their Guitar and Bass Amps - It's all Java, looks and runs fantastic. Check it out if you have a Podxt [customtone.com].

  • by Ozwald ( 83516 ) on Tuesday August 24, 2004 @09:53AM (#10055398)
    First impressions for java weren't all that good. Back in the early days it wasn't just slow, it was painful. We'd ask "why does VB have a user interface that's so much quicker?" I still don't know. We also asked why every interface looked different. Java never did successful wrap the APIs provided by the OS and there's no reason not to.

    By the time of the second impressions, Sun and Java zealots started to become annoying, promising silly things like it was faster than native code. Maybe in some cases it is, but certainly not where it counts: the GUI.

  • by Master Of Ninja ( 521917 ) on Tuesday August 24, 2004 @09:54AM (#10055410)
    The problem with Java is that Sun really has managed it properly. We all thought it was cool when it came out, but the promises really weren't true. Write Once Run Anywhere mostly managed to work on different platforms, but the GUI is so god awful slow nobody really wants to bother. Its just easier to code native. I'm not exagerating here that even Visual Basic programmers could have come up with something better.

    Sun has let the technology stagnate while Microsoft has caught up (and IMHO surpassed) Java with their .Net products. Hate MS all you want but .Net actually is really easy to use.

    Plus I don't know what's going on at Sun marketing, but they've descended Java into acronym hell. Plus the naming conventions don't really make sense now. The new version of Java is J2SE5 (I'm not even sure that it is this now).

    I'm taking this from the perspective of desktop developers (rather than the server side as they seem to use Java fine). Java really does blow, and there are now better technologies to use. Sun has even ignored integrating other, better technologies (*cough* SWT) due to NIH syndrome.

    If Sun went and fixed their mistakes rapidly (a bit late IMHO) then Java could still be cool. But everyone on the desktop who's used it considers it a steaming POS.
  • by pottymouth ( 61296 ) on Tuesday August 24, 2004 @09:56AM (#10055438)
    "And of all the great programmers I can think of who don't work for Sun, on Java, I know of zero"

    Why do I get the feeling I wouldn't want to debug this guys code??
  • by theonomist ( 442009 ) on Tuesday August 24, 2004 @09:58AM (#10055459) Homepage

    First, I've read Graham's essay, and his definition of "Great Hacker" is on the vague side, and consists largely of platform advocacy. It turns out that his "great hackers" are all people he knows. Fair enough: He can't really judge anybody else. But that leaves him with such a small and selective set of data that his conclusions are meaningless. For example: He claims that all "great hackers" refuse to work on Windows. He works at companies developing software for UN*X. Not surprisingly, most of the programmers he knows are UN*X people, who don't work on Windows. So what? This proves nothing at all. He has merely suggested (however plausibly) that Windows developers tend not to develop for UN*X and vice versa, which is tautological. Dennis M. Ritchie has a Windows box on his desk these days, but Graham doesn't know Ritchie personally, so Ritchie's not considered. Graham's working from a thin set of anecdotes.

    Secondly (and this has been said before [ericsink.com]), Graham's "great hackers" are prima donnas who refuse to deal with practical problems outside some very limited set of problems that they enjoy. I remember a story about Richard Feynman helping paint the walls at Thinking Machines when he worked there; I guess Feynman wasn't a "great hacker".

    Finally, I often hear from Java advocates that the memory-lebensraum problem and the speed problem are due to programmers not understanding the internals well enough to work around their flaws. This is not said to be true of any other programming language on Earth, as far as I know.

    It all sounds like a crock to me. Knowing the tools better will always help, but if only an expert can write usable code -- not great, but merely usable -- the language is junk, or at best the implementation is junk.

  • Who Gives A Shit? (Score:5, Insightful)

    by jjohnson ( 62583 ) on Tuesday August 24, 2004 @10:04AM (#10055525) Homepage
    Anyone still concerned with whether or not their favoured language is cool or not is a 1) hack, 2) student, or 3) self-described 'geek' who's not nearly as good as he thinks he is.

    Java works well in some environments and for some tasks, and poorly in others, and a lot of that depends on the programmer, not the platform.

    Besides, success is its own argument. If you can't understand why Java is so big these days, maybe that's your fault, and not the world's.
  • by Junior J. Junior III ( 192702 ) on Tuesday August 24, 2004 @10:08AM (#10055570) Homepage
    Exec1: Bill, we have to do something about Java.

    Bill Joy: What's wrong with it?

    Exec1: No one's using it.

    BJ: The hell they aren't. Java's everywhere.

    Exec2: Well, maybe, but no one wants to use it.

    BJ: Why?

    Exec3: Maybe because the performance sucks compared to programs written in C++?

    BJ: That can't be it. Sun hardware doesn't perform very well either, and people use our servers all the time! By the way, you're fired.

    *uncomfortable silence*

    BJ: Well, why else can it be unpopular?

    Exec1: Sir, I think geeks won't want to use it because it's not cool enough for them.

    BJ: Not cool enough for geeks? How the fuck does that even make sense? Someone get marketing on the phone and tell them we need an X-TREME mascot for Java, right away. That'll make it "cool" enough for these geeks.

    Secretary: Yes, sir. Right away sir.

    BJ: Alright, now then, what else is on the radar?
  • by Kohath ( 38547 ) on Tuesday August 24, 2004 @10:26AM (#10055840)
    Java is uncool because people are snobs. You can't think you're better than everyone else without thinking that the popular choices are beneath you.

    Let me summarize the attitude:

    I'm better than you. I'm one of the good ones, not one of the masses. Java? You still use that? I used to use that, but now I only program in the new super-trendy "Rubytalk" It's a Ruby-smalltalk hybrid, but I tweaked the compiler so none of the keywords are longer than 3 letters.

    I have to go now. I have reservations at the new "Chittii" restaurant. I had to make them 3 months ago. All the food is vegan. You Java programmers probably eat at McDonald's and shop Walmart with the rest of the proles.

    Bye. Oh, and tomorrow I'm taking the day off. PBS is running a six-part biography series on British showtunes composers. It's the only channel I watch.

  • by RAMMS+EIN ( 578166 ) on Tuesday August 24, 2004 @10:40AM (#10056012) Homepage Journal
    I think the author could have done a much better job at debunking those myths. I, for one, am not convinced. Some snippets:

    ``you cannot really make your friends go ga-ga at amazingly brief programming constructs.''

    Right. When you have to write BufferedReader in = new BufferedReader(new InputStreamReader(System.in)), that indeed doesn't give a strong sense of brevity. Nor does public static void main(String argv[]).

    ``Java has been considered slow for ages.''

    And it's still slow. Each time a new release comes out, people get into the debate of Java is slow vs. you moron did you actually test that? Well, after 1.4 I have given up on testing. It's slower than unoptimized C for all programs I have tested with. Probably this is because I use the wrong kind of tests (ranging from simple loops and calculations to simple chat servers and clients), but just the fact that there are such wrong programs tells something, IMO. And startup time and memory usage continue to amaze me.

    ``Swing is a brilliant, although hard to learn, API.''

    If it's hard to learn, what makes it brilliant? Certainly not its good performance or integration with the host environment. Themability and portability are good, but other toolkits have these, too.

    ``Java is a strongly typed language therefore you have to tell the compiler exactly what you intend to use.''

    That's a fallacy. ML is also strongly typed, yet you don't have to tell the compiler the type you want to use.

    ``Java is popular. Anything that is popular has lost its elite status and therefore is not cool.''

    You mean like Linux, Apache, Perl, PHP, gcc, etc. etc. etc. etc.?

    Actually, now that I have read the full article, I don't think the author was trying to debunk any myths at all. More just summing up the points, so that those who want to defend/attack Java know where the battle is.
  • Bad article (Score:5, Insightful)

    by photon317 ( 208409 ) on Tuesday August 24, 2004 @10:54AM (#10056188)

    Just like the last article slashdot linked from this source. For one, it's a straw-man argument. He gets to set up the 10 greivances that he'll knock down. How about he ask Paul for a list of 10 greivances to knock down? Secondly, the greivances he picks and his arguments against them clearly show that he's incapable of thinking in the way that people who despise java think, which makes him a poor arbiter of such things. Would a great hacker really say "Java sucks because it doesn't have a cool IDE like MS Visual Studio?"

  • by sideshow Pablo ( 807881 ) on Tuesday August 24, 2004 @11:00AM (#10056246)
    I know, I know, not another TOTL(The One True Language(tm)) comment.. but...

    I'm amazed that how all of the current "state of the art" Languages/Frameworks still haven't caught up to Smalltalk yet.

    Smalltalk is a Language/Library/ and integrated development environment all in one.

    It's had for over twenty years:

    1. multiple hardware support via Virtual machines,
    2. garbage collection,
    3. robust library,
    4. Edit and continue debugging (the stack unwinds to the spot of the edit and it continues from there, once a coder experiences this, going back to pause, figure out problem, stop program fix, recompile and restart from the beginning sucks 'big time'),
    5. Pure object based (everything including 'primates' is an object, at least how it appears to the programmer that is ;)and it makes it hard to write procederal code unlike Java/C++/C#, where it take coder discipline not to )
    6. A good GUI framework (heck, it was used to invent Gui's),
    7. Clean elegant language: 5 reserved words
    8. Encouraged an iterative programming style( XP ).
    9. And More...

    Java/C#/.Net wish they had all of this "20 year old" tech. They are good Languages/tools that are slowly evolving into Smalltalk. Why don't you just save time and go to the top of the food chain?

    It's amazing how one research lab, Xerox Parc, could have been SO far ahead of its time. Its like software has stood still for twenty years.

    You can explore it via the open source squeak project. Understand it is written for coders by coders so it takes a little work to come up to speed on it, but in my option, well worth the effort. And Morphic just rocks. http://minnow.cc.gatech.edu/squeak/1 [gatech.edu]

  • Great Programmers? (Score:5, Insightful)

    by Fujisawa Sensei ( 207127 ) on Tuesday August 24, 2004 @11:01AM (#10056274) Journal

    Martin Fowler of Refactoring does Java.

    Erich Gamma of Design Patterns is a major player on the Eclipse project.

    Besides why should people consider a language cool at all? Shouldn't it be, "What I can do with a language" is considered cool?

  • Why I Dislike Java (Score:5, Insightful)

    by Prien715 ( 251944 ) <agnosticpope&gmail,com> on Tuesday August 24, 2004 @11:31AM (#10056733) Journal
    My dislike of Java has nothing to do with slowness. It has to do with control and succinctness. Trivial example:

    // Must be stored in a file called "hello.java"
    public class hello {
    static public void main(String[] argv) {
    System.out.println("Hello world!");

    Since everyone likes readability, I'd like to ask what part of "static public void" helps you to understand the program. Let's compare this to, oh say Perl.

    print "Hello World\n";

    Which, as Perl's reputation precedes it, is obviously harder to understand.

    Javs relies on vast ammounts of knowledge drilled into the heads of students. If the OO paradigm wasn't so popular, Java would be entirely obtuse. Anything not memorized must be looked up. You wanted to add that integer to the float? Too bad. Go look it up type converting. Additionally I'd like to conjecture that the human mind is better at remembering small things than large ones. Therefore, system.out.println() is more difficult to remember than print. I'd rather remember something like "-e" (Perl) to test for file existance, than the Java equivalent, which I have looked up and since forgotten (though I've used each the same number of times).

    While C may be verbose, it allows you to have near complete control of the physical operations of the hardware (e.g. when you delete memory or use a pointer, this has a physical analogue).

    Java is both verbose (lots of commands to do simple stuff), clunky (really long commands), and forces you to use the OO paradigm whether or not the problem demands it. It's these reasons why I dislike it.
    • by Capt_Troy ( 60831 ) <`tfandango' `at' `yahoo.com'> on Tuesday August 24, 2004 @11:39AM (#10056823) Homepage Journal
      Your sample just goes to prove that java and perl may not be suited for the same tasks (which everyone already knows). Comparing languages is pointless, it's like comparing a fork and a spoon. Forks are good for steak, spoons are good for soup.

      I use Perl when I have a task suited for Perl, Java when it better suits a task.

      I do agree that it's difficult to do some simple things in Java... I personally feel that it's benifits outweigh it's detractions in most cases though.
  • by eyefish ( 324893 ) on Tuesday August 24, 2004 @12:20PM (#10057440)
    OK, so here's my list why Java *is* cool and is used by great programmers:

    1. It runs everywhere unmodified. This has got to be the coolest thing of all, and the reason I adopted Java in the first place. At the beginning this was not always true, due in major part to the AWT graphics libraries, but today it is.

    2. It's more productive to work with it, leading to fewer bugs. This is very important in business apps. I certainly no longer get C/C++ pointer problems, memory leaks, or perl syntax error problems.

    3. It is fast (ok, it loads slow the very first time, but with JDK1.5 this seems to being addressed as well). Somehow Java lends itself so easily for users to write efficient code (i.e.: multithreading is a snap and platform-independent), that somehow the applications we've been replacing with it simply run at least twice as fast as the older C++, VB, and perl apps.

    4. It is simple. Sure, some hackers like garbage-looking code because they think the harder to understand their code the cooler it is, but in my book the cleaner and simpler code wins any day, specially when programming in a team environment. I think Java should be given credit as the environment that brough simplicity back to programmers in the internet age (just as VB did in the client-server day).

    5. You can use multiple tools to develop the same code base. Heck, and now with ANT (possibly one of the coolest tools in recent times) you can choose your IDE (or command-line if that's your thing) and move the project back-and-forth between IDEs to take advantage of each (GUI design, refactoring, etc). Choice is a good thing.

    6. I'll repeat it again: How cool is it to develop in Windows and drop the app unmodified in Linux or OS/X and see it run as expected with NO changes to the code? Or if you prefer, develop in Linux and deploy in Windows. Either way it works.

    7. It is standard. Sure, it is not open source but then again not everything has to be. I think the fact that open sourcers advocate freedom should be reason enough to allow other companies to choose if they want to free their software or not. It is their choice. The fact that it is standard means that Java is protected from the "Unix division plage" where now almost no Unix is compatible with any other Unix. Geez, even Linux is starting to become incompatible with all the different versions of itself. Sometimes centralized control is a good thing.
  • by Ian Bicking ( 980 ) <ianb@colorstuEEEdy.com minus threevowels> on Tuesday August 24, 2004 @02:32PM (#10059142) Homepage
    Well, Graham doesn't really need me to defend him, but I will anyway. This article doesn't really get the point:

    Java has considerably fewer surprises: on this one he might have a point. I might say "Java has fewer orthogonal features" instead. For instance, there's little ability to do metaprogramming in Java (unless you use AspectJ). There's just lots of interesting things you can't do -- and interesting things can also be hard to understand or cause surprises. Java's compromise is arguably valid, though not very exciting.

    Java has been considered slow: obviously he doesn't understand where Graham is coming from. Many interesting languages are slower than Java, including many of the languages that Graham suggests (Perl, Python, Scheme).

    Swing disasters continue: again, he doesn't understand Graham. To address his criticism of Java, you must ask "is Swing fun to program" not "are Swing apps fun to use".

    Java is strongly typed: well, sure. ML is a statically typed cool language. And Lisp, Python, and Smalltalk are all strongly typed. (If you don't understand the distinction between strong and static, read this [artima.com].) The problem is really that Java doesn't trust the programmer, not the specifics of its typing. Though if you trust the programmer, static typing starts seeming a lot less useful. And yes, great hackers don't like languages that don't trust them, for obvious reasons.

    Java has a vast library that is available to all Java developers: this is a guy with a Common Lisp background. He certainly has no problem with good libraries, and he never mentions any problem with extensive libraries. Programming in an open field can be fun sometimes, and can help you think about things differently, but libraries are never a detraction (you can always ignore them if you want).

    Java did not have a good IDE: I don't think Graham said that great hackers really like Visual Basic, and that's why they don't use Java. I laugh just considering that argument.

    Java is popular: if you ever listen to the users of languages like Smalltalk and Lisp, they will bemoan at great length that they are not as popular as they deserve. Though you'd only know this if you ever looked at these communities.

    Java is an application programming platform: so are Lisp, Smalltalk, Python, etc. Most of the kinds of languages Graham is talking about are not systems programming languages.

    It's nice this guy tried, but he really doesn't understand what Graham is talking about. Which is kind of the point -- to understand Graham's perspective you need to have the intellectual curiosity to do non-work-related projects, using environments that are unfamiliar to you. You need to reflect on those experiences and make judgements about what you like and what you don't like. If you've only used Sun and Microsoft languages, you won't get it. That doesn't mean you can't do good work in Java, but if that's all you do, then you won't be much of a hacker at all.

  • by cgreuter ( 82182 ) on Tuesday August 24, 2004 @04:06PM (#10060324)

    As the fortune file puts it, "A language that doesn't affect the way you think about programming is not worth knowing."

    Learning C was a mind-expanding experience for me because it let me do anything I wanted and because it taught me about self-contained functions. Learning Smalltalk was a mind-expanding experience because it was this giant, full-featured language built out of a few simple principals. Learning Perl was a mind-expanding experience because it was this hideous, misshapen monstrosity of a language where every single wart turned out to make my life easier. Learning Lisp was a mind-expanding experience because you could extend the syntax of the language itself from inside the language.

    And Java? It's basically just C++ with some of the better ideas from Smalltalk (or Lisp, Eiffel, Sather, Modula-3 or whatever) grafted onto it. Been there, done that, got the T-shirt.

    That's not to say that Java isn't useful--it is. It's just not exciting. There are jobs for which Java is the right tool and some of those are even interesting from a hacker's point of view. It's just that the language itself that isn't interesting.

    The only time I consider brushing up on my Java skills again is when I'm looking for a job.

    (As an aside, my take on Paul Graham's comments is that if a company is looking for Java programmers, it's a bad sign because it means that the suits are making technical decisions. I'm inclined to agree with that--if the company is run by people who think Java is cool, you have to wonder what other kinds of decisions they are making.)

    Disclaimer: I've done very little in the way of Java programming, although I did once write a compiler for it.

Each honest calling, each walk of life, has its own elite, its own aristocracy based on excellence of performance. -- James Bryant Conant