Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
×
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:
  • 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.
  • lame (Score:0, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @09:34AM (#10055178)
    This was a lame article, IMHO.
    It had the sarcastic "Oh, it's too easy for you?" theme going. No, that's not
    why I dislike Java.

    Here's why:

    o Java GUI is slower than native alternatives

    o Java is not supported by all platforms, and is not supported by
    WinXP by default.

    o All the Java "binaries" I've tried relies on me having installed a
    local interpreter.

    o It's object oriented (*)

    *) Hey, I said this is MY list. I dislike object oriented languages, m'kay?

    Oh, and take a look at this page [panix.com] for some more GOOD arguments why Java sucks.
  • 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.
  • 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 Russ Nelson ( 33911 ) <slashdot@russnelson.com> on Tuesday August 24, 2004 @09:37AM (#10055212) Homepage
    Python is an enterprise-grade programming language because its code is so readable. Sure, you can write a perl program faster, but six months later you won't be able to read it.
    -russ
  • by tedgyz ( 515156 ) * on Tuesday August 24, 2004 @09:38AM (#10055221) Homepage
    Please, do we have to hear this comment every time Java comes up? It was cool to say that in the 1990's, but it's a little out of fashion now.
  • 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.

  • Well... (Score:5, Insightful)

    by thrill12 ( 711899 ) * on Tuesday August 24, 2004 @09:42AM (#10055268) Journal
    ..on the laptop I use for work (a Pentium-2 ...) it's just like that. Don't understand me wrong: I have programmed in JAVA, I liked it.
    But as corporations nowadays still have little budget left for buying their employees decent PC's, JAVA still has this practical limitation.
  • Use What Works (Score:3, Insightful)

    by grunt107 ( 739510 ) on Tuesday August 24, 2004 @09:42AM (#10055269)
    There are Java pundits, and LAMP lovers. Not to mention .Net-sters.

    The real issue is use what works, regardless of 'cool' (hell, COBOL was probably cool once and is still used in some places).

    As the story points out, Java is not used for low-level (device) programming. And Assembler is rarely used for data movement (ETL).

    I say, for QuADs (Quick And Dirties), use a slower coding language that allows for quick development. For Enterprise-level Web/XML apps use something like Java or .Net (MONO). For low-level use C++/C/Asm.

    Or try Bison...
  • by flacco ( 324089 ) on Tuesday August 24, 2004 @09:42AM (#10055277)
    he's a rich guy (wrote yahoo stores or something) who has never even *used* java.

    i've read several of his articles, and none of them strike me as particlarly insightful. most are more of the "hey, i have this quirky idea, which i think is cool but is actually rather mediocre, and i have a lot of leisure time on my hands, so i'm going to flatter myself by dwelling on my quirky, mediocre idea in public" variety.

  • by DesScorp ( 410532 ) on Tuesday August 24, 2004 @09:44AM (#10055291) 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 Nakkel ( 748351 ) on Tuesday August 24, 2004 @09:44AM (#10055299)
    I cant speak but for myself, but we use some Java applications at my work. Some work just fine while others literally grinds the computer to total halt. IANAP (I am not a programmer) but somehow I get the feeling that some Java applications are just badly programmed. Why else the variation in performance?
  • 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.
  • Type System (Score:2, Insightful)

    by BarryNorton ( 778694 ) on Tuesday August 24, 2004 @09:44AM (#10055304)
    Says the article:
    Java is a strongly typed language therefore you have to tell the compiler exactly what you intend to use. And if you make a mistake in the way you use it, the compiler has the guts to tell you that you were wrong. Too much chaperoning?
    The problem with most Java code is that there was (for nearly a decade, despite this being a well-established feature of type systems) no parametric polymorphism, therefore using the containers collection meant throwing away the typing information and casting... and, no, the compiler doesn't tell you when you're wrong, not even the static type checker does, the dynamic type checking fails at run time! That's not cool!

    I think the guy needs to learn something about modern programming languages before sitting down to write...

  • by Anonymous Coward on Tuesday August 24, 2004 @09:46AM (#10055322)
    VM startup is quite fast these days (tenths of a second on reasonable desktop hardware):

    user% cat hello.java
    public class hello {
    public static void main(String[] args) {
    System.out.println("hello, world!");
    }
    }
    user% javac hello.java
    user% time java -cp . hello
    hello, world!
    0.140u 0.020s 0:00.29 55.1% 0+0k 0+8io 0pf+0w

    Classloading is slow as all get-out, and even moreso when you're suffering through the startup of a Swing application, since Sun saw fit to make every Swing class reference every other Swing class.

  • by Scarblac ( 122480 ) <slashdot@gerlich.nl> on Tuesday August 24, 2004 @09:48AM (#10055332) Homepage

    Java is used a lot these days. There are three main reasons, in my view, why it became so popular:

    • In the beginning, there was an amazing amount of marketing and hype.
    • After that phase, it continued to be popular because by that time there was a large amount of libraries, both free and commercial.
    • As a language, it's not that hard to learn, and it gives some protections that C++ doesn't have.

    So if you look at it purely as a language, it's just not that cool. You don't see amazing Java hacks. It's not great, it's just not bad. Add to that a few really irritating things (that are being addressed) like constant casting and having to check every exception all the time... Why would it be considered "cool"?

  • by cs02rm0 ( 654673 ) on Tuesday August 24, 2004 @09:49AM (#10055350)
    What would you recommend as an alternative? I've found it hard to stray from Java to other programming languages, even though I'd like to learn a few more, simply because building a GUI with anything else means learning not just the language but an unrelated toolkit or something. I can't find anything else to program in that isn't harder to learn to create GUIs with!

    (It needs to be a viable linux option for me though... having just wondered if you're talking about something like VB).
  • Re:a few reasons (Score:4, Insightful)

    by lmsig ( 110148 ) on Tuesday August 24, 2004 @09:50AM (#10055356)
    In my career I've written more C then anything else. Followed by PERL for test automation. Recently I'm working a new program that is 100% Java. It has been a pleasure. I do not see any huge performance problems that people seem to complain about. I'm not just writing a database/forms program either but doing REAL work in image processing.

    I have no idea what you mean about byte code making it harder. You compile things into a JAR, in most OS's you can double click the JAR and run it. How is that difficult?

    Tons of production software is written in Java. Especially server side.

    C/C++ are out there but the reality is that they are too hard to use for very large project. It can and will be done successfully but it costs a fortune. I can do so much more using Java with so much less budget that its amazing.

    As far as being multiplatform. It comes close. I've never had any huge problems outside of cosmetic differences that might need to be tweaked, but that it easy. I was even doing 3d graphics on the mac and demoing them blindly on a windows PC without testing on Windows (I refuse to own one of those) and had no problems.
  • Re:IMHO (Score:2, Insightful)

    by ruckc ( 111190 ) * <ruckc@NoSPam.yahoo.com> on Tuesday August 24, 2004 @09:50AM (#10055360) Homepage
    If an application in a language constantly crashes, its 99.999% of the time not the languages problem. This actually brings to light one of the benefits of using java, you know exactly the kind of errors you can get if you read the API. Based on these errors you know you could get, you should make the program recognize and handle the exception.
  • Re:Also Speed (Score:4, Insightful)

    by Ignorant Aardvark ( 632408 ) <cydeweys@noSpAm.gmail.com> on Tuesday August 24, 2004 @09:51AM (#10055368) Homepage Journal
    I had to use Java back in school and I won't touch it unless my superiors threaten the branding iron (again). Java loads too much overhead and it doesn't have the same responsiveness as C based apps, IMHO. I don't think Java is optimized enough, and it shows. All the cross-platform support comes at a price and that price is speed.

    Java is optimized ... for security. Java has all sorts of neat features built in like automatic bounds checking on arrays that simply don't exist in languages like C. This means that it may run slower, but in a computing environment where processor speed doubles every 18 months, would you rather have a little bit slow execution for now or a fundamentally flawed security paradigm? Programming in C leaves you wide open to buffer overflows and other attacks, and it takes a security-oriented programmer to overcome those problems. And guess what, once you get all of the code in there necessary to make it secure, it runs at about the same speed as Java. Java just puts all of the security stuff in by default, which I don't think is a bad decision in this age of computer worms and viruses.
  • string handling (Score:3, Insightful)

    by Spazmania ( 174582 ) on Tuesday August 24, 2004 @09:51AM (#10055375) Homepage
    I can't speak for anyone else, but the thing I don't like about Java is that the string handling sucks ass. There are how many different types of strings that you have to convert back and forth between in order to do something simple like accepting text from a network socket, altering it, and presenting it on the screen? At least three major type conversions that come to mind as the minimum-path.
  • Strongly typed... (Score:3, Insightful)

    by Yrd ( 253300 ) on Tuesday August 24, 2004 @09:51AM (#10055378) Homepage
    ...Java's strong typing isn't a problem because it's strong typing. C++ does strong typing rather nicely. Haskell does it even better. Java's libraries, because they don't have anything like templates (at least until Java 5), require huge amounts of casting and instanceof checks to pull anything out of a container. That's when static typing gets in the way instead of being helpful.

    I'm quite a fan of static typing, really (honestly), but not the way it works in Java. Of course, I hate lots of other things about Java too, but it's not because it's 'un-cool', it's because it's crap. Even if nobody used it, it still wouldn't be cool (I'd have a party though).

    And although it pains me to say it of a Microsoft product, I hope C# takes over from Java, because although it's not perfect (no language is, or can be), it's for the most part what you might call 'Java done right'.
  • 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 SparafucileMan ( 544171 ) on Tuesday August 24, 2004 @09:52AM (#10055389)
    That's bullshit. Didn't Graham start and run his own software company? Didn't he write production-grade code that handled thousands (or hundreds, at least) of users simultaneously? Didn't he make millions doing it? And what language did he use?

    That's right, he used LISP.

  • 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.

    Oz
  • Java *is* un-cool (Score:2, Insightful)

    by glenmarshall ( 586674 ) <glenmarshall AT yahoo DOT com> on Tuesday August 24, 2004 @09:53AM (#10055402) Homepage
    One reason Java is un-cool is that it is just another proprietary technology, owned by Sun. If Sun goes away, as it very well may, the Java code-base is at risk. And that would be very un-cool. Linux and Open Source development are cool. Geeks tend to like consensus-based technology that doesn't have a heavy intellectual property burden. Ultimately, Java is un-cool for the same reason that Windows is un-cool.
  • by NitsujTPU ( 19263 ) on Tuesday August 24, 2004 @09:54AM (#10055407)
    ...and then I'll tell you it can join the club of "cool" languages.
  • 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 awol ( 98751 ) on Tuesday August 24, 2004 @09:54AM (#10055414) Journal

    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.

    Er, that is every single computer program you have ever written. First let me disclaim that I make my living writing in C (a little C++ and some interpreted languages). But I firmly believe that until we approach every program as the "proof of a logical system" we will be burdened by the inexorable piles of poo that is the vast majority of the software written today.

    Functional programming is the way forward. I don't mean this as a personal criticism of the parent poster, just a general comment. The fact that they (most programmers) cannot see that every program they have ever written is a logical system is an indictment of how most people get into the industry. Code is just applied mathematics and most coders do not have the mathematics to apply. The sooner we fix this the better the quality of the programs we write will become.

  • Too much OO (Score:1, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @09:54AM (#10055415)
    I wouldnt say that any of those reasons is why I dont like Java. My reason is the enforced OO that has a tendancy to drive me up the wall. The fact that everything must be an object and used properly. Is irritating if you are trying to do a smaller program that doesnt need the OO.
  • Re:Well... (Score:4, Insightful)

    by Rattencremesuppe ( 784075 ) on Tuesday August 24, 2004 @09:58AM (#10055461)
    Anyway my point is that I find Java can do anything that C/C++ can do

    you never did device drivers or realtime systems, did you?
  • Re:resentment (Score:2, Insightful)

    by JavaPriest ( 467425 ) on Tuesday August 24, 2004 @09:59AM (#10055481)
    I surely believe what you are telling, but in what way is Java responsible for that? Your companies uncool recruiters are to blame here.
  • by Florian Weimer ( 88405 ) <fw@deneb.enyo.de> on Tuesday August 24, 2004 @10:00AM (#10055487) Homepage
    A program made in Java without an eye to security is going to be more secure than a program made in C without an eye to security.

    I wouldn't count on that. The classes of vulnerabilities that affect typical C and Java programs are just different. Of course, buffer overflows aren't a problem for typical Java programs. On the other hand, lack of synchronization is not such a big problem in the C world.

    For example, if you write a web application in C, it's quite unlikely that it exposes data from a different session if you hit the browser's back button. With Java, such problems do occur (because the same servlet object is used in different sessions and some programmers use it to store session-specific data).
  • 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.
  • Comment removed (Score:5, Insightful)

    by account_deleted ( 4530225 ) on Tuesday August 24, 2004 @10:04AM (#10055526)
    Comment removed based on user account deletion
  • by dajak ( 662256 ) on Tuesday August 24, 2004 @10:05AM (#10055539)
    I notice everytime I use JAVA, it simply eats processing time, even though I am not currently running anything.

    That problem is solved if everything runs in Java, and Java is part of the kernel.

    Heck, playing devil's advocate here, as I think JAVA as such has a very nice API.

    I agree. Of the languages I am allowed to code in nowadays, it is also the most elegant one. One of the problems of Java is that there are gigabytes of example code on the internet of how not to program. Crappy memory and resource management and bad string manipulation are the worst problems. I rarely have performance problems, as long as I don't have to write a GUI or use an application server or XML related library.

  • Re:promise (Score:3, Insightful)

    by southpolesammy ( 150094 ) on Tuesday August 24, 2004 @10:05AM (#10055542) Journal
    Why the hell is this modded up? Java has nothing to do with javascript, jscript, ecmascript, or jboss. That faulty premise is so old and tired that it surprises me that people still are confused by it.

    And as far as Java 1.2 vs. Java 2 goes -- ever heard of versions? You really think that everything in the original specifications were rock solid and that nothing needs to change? That's ignorant.

    -1, Troll
  • Re:Well... (Score:5, Insightful)

    by black mariah ( 654971 ) on Tuesday August 24, 2004 @10:06AM (#10055549)
    If you're doing device drivers in an interpreted language, you're a fucking moron. Conversely, if you program a web-based app in C, you're a fucking moron. Wow, different tools for different jobs... who'd have though?
  • Re:Well... (Score:5, Insightful)

    by AKAImBatman ( 238306 ) <akaimbatman@gmaYEATSil.com minus poet> on Tuesday August 24, 2004 @10:10AM (#10055607) Homepage Journal
    Oh, go jump off a (virtual) cliff [wurmonline.com]. Java can handle "soft" realtime just fine, and extensions are being worked on for "hard" realtime support. And yes, some people actually write device drivers in Java. [sf.net] Java isn't slow because it's actually slow, it slow because:

    1. C programmers write 10 lines of REALLY LOUSY Java code and decide that proves their point about Java being slow.

    2. People like you WANT it to be slow. I'm sorry, comparing Java programming against device driver writing? That's the height of hypocrisy. Just because you're sore that *you* can't write high performance Java code while maintaining the beauty of an OO design, doesn't mean you have to take it out on everyone else.

    BTW:

    4k games [dnsalias.com]
    Amazing OpenGL game [puppygames.net]
    More Java games [grexengine.com]
    JDiskReport [jgoodies.com]
    Best BitTorrent client ever [sf.net]

    etc, etc, etc.
  • 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.
  • Java has no function pointers. If you want to include callbacks in your data structures, you need to do hideous things with interfaces and virtual functions. You probably need to waste lots of space instatiating them, too, because you can't put a class in a data structure. Granted, you could auto-generate this code (I would if I had to), but using code generation for something which is trivial in a lower level language like C is a very bad sign.

    If this is too abstract for you, consider the following C code for a simple command-line interface:

    struct command_t{

    void (*)callback(char *data);
    char *name;
    char *help;
    };
    struct command_t commands[]={
    {exit, "exit", "exit this program"},

    {help_callback,"help","get help on a given command"},
    {save_callback,"save","save you work to a file"},
    (NULL,NULL,NULL}
    };

    void run_command(char *comm){

    int i;

    char *c;
    c=strchr(comm," ");
    *c=0;
    for(i=0;commands[i].callback;i++){
    if (!strcmp(comm,commands[i].name)){ commands[i].callback(c+1);

    return;
    }
    }
    printf("Unknown command: %s\n",comm); }
    Implementing help is left as an excercise for the reader. So is handling bogus input. The point is that this way I can add a command without touching the command parser -- just write the callback and insert it into the list. If there's some more sophisticate processing needed on some commands, I just add a flag to the structure and do the work once in the parser. Short of code generation, how would I do this in Java? A switch statement is not acceptable, because it means that everwhere I deal with commands, the data will be duplicated (embedded in the code).

    That's just getting started, of course. Then there's the type system, which uses hideous wrapper classes around the most useful types (this can and should be done transparently without involving the user -- lisp, python and ruby do it fine). There's the complete lack of introspection. There's the absolute need to put every helper function into a class whether it logically belongs there or not, bloating classes beyond the problem-space items they represent. There's the misdesigned basic library so complex I need documentation every time I read from a pipe....

    It just takes far too much work to make Java do anything I want.

  • by animaal ( 183055 ) on Tuesday August 24, 2004 @10:12AM (#10055632)
    Synchronization is not a problem for C because the average C programmer writes single-threaded code, and it tends not to be server-side (and if it is, it tends to be CGI, which doesn't scale well. It's possible to run Java in from a CGI script too). Of course it is possible to write multithreaded apps in C, but then synchronization becomes a big issue too.

    Server-side scalability means pooling, caches, lots of things that imply resource sharing. This means some form of synchronisation, whatever the implementation language.

  • by das_cookie ( 619577 ) on Tuesday August 24, 2004 @10:13AM (#10055641)
    CLASSPATH for sure, but how about the lack of upward compatibility of the various runtimes? Who hasn't had to install yet another jre because this app doesn't quite work right with the latest runtime. Take a look at Oracle for an example. Long after java 1.4 was out, Oracle 8i STILL required 1.2. I think the latest Oracle (10g) runs 1.4.

    Hey, I *like* java, but this kind of crap is definitely shooting yourself in the foot [noncorporeal.com] material.

  • by LnxAddct ( 679316 ) <sgk25@drexel.edu> on Tuesday August 24, 2004 @10:13AM (#10055643)
    Thats a programmer error. A bad programmer can make anything happen.
  • by FatSean ( 18753 ) on Tuesday August 24, 2004 @10:13AM (#10055645) Homepage Journal
    Mine aren't. They run for weeks and months at a time. Startup time is irrelevant in the enterprise.
  • Re:Uncool to me (Score:3, Insightful)

    by JavaLord ( 680960 ) on Tuesday August 24, 2004 @10:17AM (#10055709) Journal
    They go where the work is. Plently of Indian workers programming in .NET and other languages. Your just not tendering for them.

    or maybe it's because one of Sun's co-founders is an Indian, and favors Indian workers. This isn't speculation on my part, see Sun's co-founder says Sun favors Indian workers [sfgate.com]

    The quote was:

    "At Sun, people from India are favored over almost anybody else."

    If Bill Gates said something like this about American workers, he would be called racist. God, I love the American media.
  • Re:Java pays!!! (Score:2, Insightful)

    by mschaef ( 31494 ) on Tuesday August 24, 2004 @10:18AM (#10055714) Homepage
    To cut a short story shorter, he got selected after a technical and HR interviews which were cakewalks compared to other guys' interviews.

    To be frank, it really concerns me when the interview process is a "cakewalk". It generally means that the interviewer is too lazy, thoughtless, or inexperienced to come up with challenging questions. If a company takes that attitude towards their most important fundamental activity (bringing in talent), it doesn't bode well for anything else they do. (Plus, I like working with people that can teach me things...) ObJava: I've seen some _tough_ Java interviews, so Java doesn't necessarily mean anything about the difficulty of the interview process.
  • Re:Well... (Score:2, Insightful)

    by struppi ( 576767 ) <struppi&guglhupf,net> on Tuesday August 24, 2004 @10:18AM (#10055718) Homepage
    Exactly what has to be said about java. At the moment I'm working for a company where I have to write C++ code (since the data we handle is simply too large... our C++ apps use up to 2GB of ram), and it's a lot harder to write clean, secure OO code than with java.

    So: if you can efford 256 MB of RAM and a recent CPU Java will run most of the applications fast enough. I know java has a long startup time compared to C or C++ applications (long as in 4 seconds compared to 1 sec), but this is a time I can wait.

  • by Anonymous Coward on Tuesday August 24, 2004 @10:20AM (#10055742)
    Since when is an unsubstantiated flame with absolutely no substance considered "Insightful"? I guess it was moderated by overly sensitive Java developers.

    By the way, don't take Paul Graham's comments out of context. His main argument wasn't about what language is better but about what tools are available that hackers like using. He also points out that with Java being touted as the language everything must be written in by PHBs because it's the trendy thing to do (rather than the right language to use) means everyone and their brother wants to learn to be a Java "developer" in order to get hired and make a decent salary. He points out that this makes it more likely to get someone not so good at coding if searching for Java programmers. By contrast, if you put in an ad for Java AND Python programmers (for example) you're more likely to get a good hacker in that position. Not necessarily due to Python being a better language but because someone knowing the language probably wanted to learn it for themselves, not because it was a trendy "I can make lots of money" sort of thing to do.

    I equate it to the same problem we have with a mass of "point and click" admins (you know, folks that go through and get their MCSE's to admin Windows networks that don't actually know squat about networks, couldn't write a shell script to save their lives and generally don't know more than the basics and are unable to figure much out on their own apart from what they were trained to do). The problem here isn't that Unix/Linux/BSD is in itself better, but that you don't just have a bunch of geek-wannabes sitting down and thinking, "Damn, I need to learn FreeBSD or get Linux certified because it'll be easy and I can make loads of money and find a job easy!". Does this mean that all Windows admins are idiots? Of course not, it just means that if you advertise a position for a Windows admin and another for a Unix admin, your going to (percentage wise) get more capable folks
    applying for the Unix admin position. You may get a few good folks for the Windows admin position but mixed in there will be a horde of point-and-click admins to go through and the problem is, those HR folks probably won't know the difference.
  • One word. (Score:2, Insightful)

    by Atzanteol ( 99067 ) on Tuesday August 24, 2004 @10:21AM (#10055770) Homepage
    CLASSPATH. This thing sucks. Worst design decision ever, I swear. Spend forever setting the frigging thing up, and hope to $DIETY things don't change. Oh, and make it so you need to reference individual .jar files too! What a great idea? What to add a library to your project? Be prepared to do battle with classpaths.

    Anybody know why they decided to make it so you can't just put all .jar's in a *direcotry* referenced by CLASSPATH? I'd love my CLASSPATH to just be "/usr/local/java/lib:${HOME}/java/lib" or something rather than specifying a million .jar files...
  • by nessus42 ( 230320 ) <doug@alum.mit.UMLAUTedu minus punct> on Tuesday August 24, 2004 @10:22AM (#10055772) Homepage Journal
    Of course there are full-featured IDE's for Lisp. In fact, the very first IDE's were made for Smalltalk and Lisp.

    The fact that you can't understand Lisp speaks more to your intelligence than to the merits of Lisp. As Paul Graham says, he is talking about the tools preferred by the best and the brightest programmers, not by average programmers.

    |>oug
  • I don't want cool (Score:1, Insightful)

    by JavaPriest ( 467425 ) on Tuesday August 24, 2004 @10:23AM (#10055796)
    Who cares if a language is cool?

    My customers (and me) want an application that works, is maintanable and runs on platforms on which they haven't decided yet.

    I use Java to program those applications. And they live up to their expectations.

    I once attended a .Net convention. There Java was considered "uncool" because you had to think before writing a program. That did put some things in perspective...
  • by bay43270 ( 267213 ) on Tuesday August 24, 2004 @10:23AM (#10055798) Homepage
    I'm reading his book (Hackers and Painters), which is a collection of these essays you talk about. He has an entire chapter in his book called "What you can't say" in which he talks about how often extremely controversial subjects turn out to be correct. He explains his method of guessing which shocking thoughts are wrong and which are just unfashionable. This outcry against Java is just an attempt to put his name in history as being the guy who said it first (as are most of his essays). It does him no harm for several reasons:

    1. Because of his personal programming style, he would never like java anyway
    2. Eventually Java (like anything else subject to technological change) will become unpopular and he will be proven correct
    3. He prides himself on his nerdyness and doesn't care what management types think of him. He is looking for acceptance from the slashdot geek, who will more often than not agree with his language preferences
  • by Anonymous Coward on Tuesday August 24, 2004 @10:23AM (#10055800)
    Brainfuck is by far the best language ever concieved :)
  • by Fnkmaster ( 89084 ) on Tuesday August 24, 2004 @10:26AM (#10055832)
    Well, you hit on an interesting point, but I think your expectations are unrealistic. Humans just don't do a good job thinking in that way. There are a very few people who do, and they are mathematicians - and it even takes them a long time to write successful, logically complete proofs.


    You could take the approach that every piece of software you write has to have that level of detail and accuracy, proof-like precision if you will. I think you'd find that your productivity would be far lower in terms of logical constructs completed per unit time. This is probably an acceptable trade-off if you write control systems for nuclear power plants or if you work for NASA where budget and time-frame are vastly greater than for your average business programming problem.


    But for most applications, there is not only a set of requirements, things it needs to do, but a very short period of time to make it do them in. And if you go to the boss and tell him it's going to take 14 months and cost 1.3 million dollars because everything has to be written as a logical proof, he's just going to fire your ass and get a team of third-world guys to puke it out in Java in 3 months.


    I'd love to be proven wrong here - if you can show me a study that indicates that use of ML or some other language type results in substantially more bug-free code _without_ sacrificing development speed, then by all means, I'll admit that I'm wrong. My own personal experience is limited to small apps I've written in OCaml, which were cool and everything, but OCaml isn't purely functional, and I found several aspects of its use quite painful, despite feeling very "elite" as I hacked away in a semi-functional language.


    Most particularly, the idea of not specifying an explicit contract between chunks of a system with the types of information passed between them really irks me - to me this makes a development language unusable by more than one person, or even by one person in a sizeable programming project. I constantly refer back to other chunks of my code to see what type of data I need to feed to some function or method - and when using somebody else's code I'm far more likely to be interested in the interface than the implementation. Without that kind of separation, I don't see how this stuff is usable (I can't "keep the whole proof" in my mind at one time when I'm doing mathematics either, that's why you have lemmas and theorems and other mini-proofs that you call out to).


    Maybe somebody can point me to a more usable version of a functional language that doesn't "feature" static typing, or that was designed with real programming tasks in mind and thus would be worthy of more study re: the development speed and team usability characteristics I mentioned above?

  • 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 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 gwynevans ( 751695 ) on Tuesday August 24, 2004 @10:27AM (#10055853)
    And how much of the 3GB did you actually allocate to the JVM on startup? From memory, the default settings just allocate 64MB's memory...

    Sounds like an ID:10-T error to me...

  • by TeknoHog ( 164938 ) on Tuesday August 24, 2004 @10:29AM (#10055879) Homepage Journal
    You can write PERL that is completely illegible, or you can write PERL that looks just like C++ with extra $, @, and % strewn about. It's all up to who is writing it and what coding standards they have to live up to (if any).

    That's exactly the problem of Perl, having more than one way to do one thing. It's fine when you're the only one who reads your code. People tend to learn a subset of Perl that does everything. But what if you're collaborating with other people who know a different subset, and generally a different coding style?

    Of course style can be enforced, like the Linux or GNU guidelines for writing C. But at that point you could just as well make the language itself clear and consistent, which is just what Python does.

  • 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.
  • by brunes69 ( 86786 ) <[slashdot] [at] [keirstead.org]> on Tuesday August 24, 2004 @10:32AM (#10055927)

    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.

  • During the last 20 years that I've been a professional programmer I've developed a theory that says, the more practical an application will be to the larger masses, the less cool it is to programmers. A corollary being that the tools to create uncool applications will also be uncool.

    Consider the coolest programming jobs: game developer, theoretical research and embedded missile guidance systems, etc...

    Now consider: accounting applications, banking applications and word processors - arguably the most used, most common, most practical of applications - and low down on the programming pole.

    And then there are the tools used to build those applications: at the top of the pole assembly, C, Perl; at the bottom: Java, Basic, C#. Again the uncool languages are associated with building uncool apps.

    It's a simple as that.

    Finally, the exception that proves the rule is operating systems. Linux being a perfect example of a cool thing to work on and eminently practical. I would argue however, that the OS is unseen by the masses. The translucent background against which applications are run, thereby exempting them from the theory.
  • Re:Well... (Score:5, Insightful)

    by AKAImBatman ( 238306 ) <akaimbatman@gmaYEATSil.com minus poet> on Tuesday August 24, 2004 @10:41AM (#10056034) Homepage Journal
    It's interesting that people are working on this. But you wouldn't use that in production systems, would you?

    20 years ago, you wouldn't have used a C based Unix machine in place of a Mainframe, now would you? Back then, OSes were written in "safe" languages like ALGOL, FORTRAN, and LISP.

    Because you can't do the low level stuff in Java.

    You can, and you can't. Generally, you can't do it in Java because the API has been designed to prevent it. This is INTENTIONAL for security reasons. You wouldn't want an ActiveX control to install itself as a device driver, would you? But it *can* be done in Java as long as you have an appropriate API toolkit. JNode has one, and Sun actually provides such a kit [javapos.com] for all the embedded Java development going on.

    I never wrote about the slowness thing, I just didn't like the "you can do anything in Java" statement made by the parent poster.

    I apologize if I misinterpreted, but your post did make it sound like you were referring to Java having too poor of performance to act as a platform for things like Device Drivers.
  • Re:COBOL (Score:4, Insightful)

    by dinog ( 582015 ) on Tuesday August 24, 2004 @10:42AM (#10056046)
    Assembly language is considered "cool", and yet talk about baby steps ! Indeed, CS as a whole is mostly finding the simplicity in a seemingly complex task. For large tasks, there is nothing wrong with stepping through a task in a simple, logical, and above all maintainable manner.

    We need to require new academic standards for programmers. First, CS majors need to have at least one class where they are required to debug, maintain, update, and add new features to someone else's uncommented 10000 line perl program. The second part of the course would be writing a new program. Students have the choice of commenting or not. If the student turns in a well organized and commented program, they will be given a well organized an commented program to debug and modify on the final. If they turn in an uncommented and/or poorly organized program, they will be given such a program (but not their own) to debug and modify on the final. (Yes, I do maintain code for a living, why do you ask ?)

    That said, why don't you like Java ? It has the obtuseness of C, the verbosity of COBOL, and even more compiler restrictions than Pascal. What else could you ask for ?

    Dean G.

  • 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."
  • by BeBoxer ( 14448 ) on Tuesday August 24, 2004 @10:43AM (#10056059)
    Bingo. That's why I hate it. The whole "platform independence" is pretty much a load of crap in Java. Yes, in theory, it's there. In practice, all of the real Java apps I end up having to deal with require some specific runtime. Then I fight with CLASSPATH stuff.

    I understand that truly cross-platform programs are a difficult problem. But that doesn't change the fact that Java is pretty bad at it. And don't even get me started on the fact it has multiple GUI API's.
  • Re:Well... (Score:3, Insightful)

    by Kiryat Malachi ( 177258 ) on Tuesday August 24, 2004 @10:44AM (#10056063) Journal
    Java is being worked on to deliver stable guaranteed time to interrupt? That being the chief characteristic making a "hard" realtime system useful.

    I'll believe that when I see it.
  • Re:COBOL (Score:2, Insightful)

    by animaal ( 183055 ) on Tuesday August 24, 2004 @10:46AM (#10056091)
    Everything is broken into "baby steps" because at each of those steps, there are a number of ways to accomplish the next step, achieving a different level of efficiency, error handling, thread synchronisation, etc.

    Think of reading from a file. A less verbose language (like C) would just say something like int h = fopen("myfile", "r")

    Java might say something like :

    BufferedReader r = new BufferedReader(new FileInputStream("myfile"));

    Definitely longer. But probably less than the equivalent code in C if the C programmer had to do the same buffering of input from the file.

    Java code in general is easier to maintain, since it's easier to read. Not a big issue for leet programmers, but a big issue for their employers who have to find somebody to maintain the code after they've jumped to another employer.

    The java code also won't puke up a GPF if there's a runtime problem.
  • by bruce_the_moose ( 621423 ) on Tuesday August 24, 2004 @10:48AM (#10056120)

    One word: Eclipse

    IBM took a different tack than Microsoft, yes. They wrote an app that didn't suck and made it open source to boot.

  • 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.

  • Re:Java pays!!! (Score:2, Insightful)

    by DevolvingSpud ( 774770 ) on Tuesday August 24, 2004 @10:50AM (#10056150)
    Agreed. I work in the government contracting space in the Maryland/DC/Virginia area. Every contractor up here wants Java/J2EE right off because that's what the government is into. It gives them maintainable, cross-platform code that pretty much anyone can understand. Given the wide range in skill levels of personnel working on these projects and/or future versions of them, this is essential. Not necessarily *cool*, but certainly good use of taxpayer $$ over the long term, especially given the wildly heterogeneous server environment in the government (NT, XP, Linux, all 32 flavors of Un*x, AIX, Cray Solaris anyone?).

    And in our area, it's much easier to say "what economic downturn?" especially if you know Java and have some kind of security clearance. Email me if you do, we're hiring :) The point is, here and now Java's popularity yields significant gains for those who can program in it.

    Whether this is cool or not depends on the observer.
  • by number6x ( 626555 ) on Tuesday August 24, 2004 @10:52AM (#10056166)

    Java is quickly becoming a de facto standard among management.

    Some of the managers are technically savvy enough to realise that there is not much difference in choosing one language implementation over another. They choose Java because there are many programmers being taught Java at school. They are betting that should keep the labor pool large and the labor cost down in the long run.

    These tech savvy managers know that python or curl is easier to write and maintain. They also know that other OO languages perform better, but they are adding the cost of staffing and outside support into their equations. They are projecting Java to become the next COBOL or C. None of them were 'perfect' coding languages, but they each dominated all other languages. What is technically 'best' is not always the 'winner' in the marketplace.It only needs to be good enough.

    That said, most of the rest of the management (about the other 90%) likes the cool Java swag they got at the last convention. They think it makes them superior to wear it in first class while sipping cocktails and talking loudly on their cell phones about 'their' latest Java project implementation, and its overall downward effect on the cost ratios of delivering customer facing services, thus maximizing the returns for each level without jeopardizing the long term blah blah blah blah blah...

  • 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?"

  • Re:Also Speed (Score:3, Insightful)

    by Gr8Apes ( 679165 ) on Tuesday August 24, 2004 @10:54AM (#10056191)

    I think it really depends on what you're programming for. For user applications, especially small ones, it doesn't really make sense to program in java unless portability is your overriding concern. For business applications, especially server applications, java makes much more sense precisely because of the security features inherent to the language, not to mention the maintainability of the code, provided that programmers with half an ounce of knowledge are working on it.

    If Paul thinks lots of "great" programmers work for MS (they code in C, hence they must be "better" than java coders) I'd like to know how he explains the never ending list of bugs, many of them security bugs/buffer overflows that seem to permeate the entire set of MS code?

    That aside, yes, a great programmer will be able to code something fast in the terse language of choice. That same code will most likely be unmaintainable when the poor maintenance guy comes along to attempt to track down the buffer overflow or whatever other error has cropped up in said code.

    And just because you use a language like Java doesn't mean your code has to be verbose. You can approach C's terseness with Java, although you cannot utilize some of the pointer variable morphing attainable by C. But you certainly can approach C or Perl's unmaintainability with ease with Java, all it takes is 1 or 2 people that don't understand the language, architecture, nor OO. (Think 14K line "classes" here with 20 or so methods, 5 "inner" classes, and lots of circular dependencies)

  • Re:One word. (Score:3, Insightful)

    by dajak ( 662256 ) on Tuesday August 24, 2004 @10:55AM (#10056202)
    CLASSPATH. This thing sucks. Worst design decision ever, I swear. [..] I'd love my CLASSPATH to just be "/usr/local/java/lib:${HOME}/java/lib" or something rather than specifying a million .jar files...

    You want to dump all your libraries in one directory? Now that's a good design decision. Don't forget to check whether Micro$oft patented that practice.

  • Re:COBOL (Score:1, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @10:57AM (#10056224)
    On the other hand, lower level languages like C and Assembly break everything into even smaller steps... but Java haters don't dislike them with the same vigour. Why is this? My theory is that the simple steps in Java are too easy. In C or assembly, in every single step there is the danger of making a subtle mistake that crashes the program. In Java, the abstraction works well enough that you need to write a lot more code before reaching the same level of bugginess.

    Thus, a C programmer can look at each step and find his brain occupied by arcane minutiae, while in Java he would get bored by the slow advancing of the program logic where every single step is logical and predictable. Even though this means that you can accomplish a lot more in Java in less effort, the C programmer cannot be comfortable with it.

    This same theory explains why people find Perl interesting -- there are so many interesting details in every character that it is easy to maintain fascination with code. Now, I wonder if this theory could be tested somehow...
  • by flibuste ( 523578 ) on Tuesday August 24, 2004 @11:00AM (#10056245)
    One has to admit that a statement such as
    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.
    can only come from someone who doesn't really have a global picture and is a bit narrow minded. Otherwise, he'd think more, open his eyes and will find some happy Java developers around. Obviously, this argument is flawed on purpose and all he wanted to do is revive a closed debate that has been around since Java is out, which is a bit pointless IMHO.
    I think Paul Graham should have been modded "flamebait" or "troll" at best.
  • 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]

  • Re:One word. (Score:2, Insightful)

    by anomalous cohort ( 704239 ) on Tuesday August 24, 2004 @11:01AM (#10056272) Homepage Journal

    Would you rather have to depend on the system registry [microsoft.com]?

    Ultimately, the CLASSPATH is good for you. I don't really understand what the problem is with adding another jar file to this environment variable. If you insist on being lazy, then rejar everything into one big jar. Ant [apache.org] can help you do that.

  • 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?

  • sponsored links.. (Score:3, Insightful)

    by Suppafly ( 179830 ) <slashdot@sup p a f l y .net> on Tuesday August 24, 2004 @11:03AM (#10056291)
    Is it just me, or are there more sponsored links on that page than there is information.

    I'm ok with people using ads to substidize content, but there are like 30 sponsored links surrounding the article.
  • by mmusson ( 753678 ) on Tuesday August 24, 2004 @11:03AM (#10056295)
    I could not agree more with your post. There was another quote that went something along the lines of: a cool language is one that teaches you something by learning it. I thought learning and using Haskell and Lisp were very useful for a different and complementary mindset that they help create. I think my C++ programs are higher quality because of my functional programming experience.

    Languages like Java or Basic are not cool for me personally because they did not teach me anything. These languages are primarily designed to protect the computer from the programmer. I think the proliferation of buggy programs is due to languages like Java or Basic that make it easy for a person without the proper training to program. Engineers need to go through very rigerous tests to certify their expertise before they are allow to design and build a bridge. Why should programming be different?
  • Re:Uncool to me (Score:1, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @11:06AM (#10056347)
    Yeah, but how do you know when you're answering a job ad? Most of us aren't Paul Graham and don't work for k-rad startups all the time.

    The key point is that Microsoft themselves uses the "smart guys in a room" setup, and has long promoted "1 Good Programmer is worth 10 bad ones" etc. Thus MS Technology projects tend to follow that model.

    Sun Micro outsources tons of their own stuff, and Java projects tend to follow the Command-n-Control model.
  • Re:Swing (Score:4, Insightful)

    by Malc ( 1751 ) on Tuesday August 24, 2004 @11:06AM (#10056354)
    I'd also like to know why it's considered hard to learn. When I tried writing some Java stuff (a few years ago) I found Swing extremely straight-forward and obvious. Perhaps that's because I had previous experience with GUI toolkits in Smalltalk, C++ (including MFC!!! ;)) and Modula-2. Perhaps it's not easy to learn if you're a newbie to programming, but then any large class library is going to be challenging.
  • by eddison_carter ( 165441 ) on Tuesday August 24, 2004 @11:07AM (#10056361)
    Only multi-million dollar projects? Bah :)
    Look to C, Assembly, and (but deceasingly) Ada for the multi-billion dollar projects ....
  • by Aardpig ( 622459 ) on Tuesday August 24, 2004 @11:10AM (#10056395)

    You talk like pointer aliasing is something common within an application.

    That's missing the point. If I have a C/C++ routine taking two pointer dummy arguments of the same type, then there is no way of guaranteeing that the pointers won't be aliased (i.e., point at the same object). Therefore, notwithstanding whether they are aliased in a given program which uses the routine, the optimizations that can be performed when compiling the routine are severely limited, in order to allow for the possibility that the arguments might be aliased.

  • Let's see, here I am at a command line, I want to run a Java application. Any other compiled language compiles to a native executable that you run by typing its name. Java is just this random archive full of "stuff", and you have to use a "run" command like we were back in 1968 before Bell Labs invented the executable bit.

    Here I am running a Java application. I type the command line to start it, and wait. And wait. And wait. And wait.

    Here I am with some code written in Java, and I want to call it from Tcl. Write a quick C wrapper, link the .o in, and package require... no...? How do I do that, then?

    Here I am with a library written in C, or Fortran, and I want to call it from Java... well, how badly do I want it?

    Java is like Mac OS used to be, its own little world and the only way to play is to leave everything else you've ever worked on behind.
  • by StillNeedMoreCoffee ( 123989 ) on Tuesday August 24, 2004 @11:12AM (#10056423)
    Well Java as I understand moves much of the optimization process down into the JVM whereas a compiled language like C++ does that optimization during compile time. Comparing the time I have spent waiting for C++ during the code, compile, run, code, compile run, I find I have wasted much more of my time. With the Caching of classes and dynamic inlining of code the JVM tunes up as you you go along.

    You are correct that this model has a start up delay which can be seen as a problem if you do a lot of startups, but like many applicatons say a web server that starts a JVM and keeps it running while the server is up it is a one time charge. I find that given the saftey of the language especially around automatic garbage collection compared with C++ my envirionment is rock stable and the online Web apps we have only come down with the hardware needs maintenance.

    The folks compainign about MS Java have a good complaint as that was an old buggy version of Java that has not been in general use for years by people using Java from the Sun source. The new versions of Java 1.4 ... current and 1.5 (Tiger) coming in a few months are light years ahead of that old MS version and should be looked at seriously.

    I write my code on NT and W2k platforms (java 1.4.2) and field the same code on WNT W2k Sun Solaris with out modification and no changes for envirionments. With C++ or C# and the java clone this is impossible at this time. I have in the past had to field C++ code on different platforms and that was not a very nice time.

    How do you want to spend your time. Collecting your own Garbage, writting very very carefully so you can use your code in different environments, or do you want to just get the job done right and once and get on with it?

  • by Kjella ( 173770 ) on Tuesday August 24, 2004 @11:14AM (#10056440) Homepage
    ...is that if you don't program in Java, you've probably tried it. I know I've dabbled in everything from assembler, basic, visual basic, c, c++, java and various libraries/toolkits.

    Java, by an order of magnitude, has the worst first impression of them all. Try writing "Hello world!" in a Swing window as your #1 tutorial. The start-up time, memory use and whatnot makes it seem like a dog.

    Yes, I KNOW Java scales well to a large app, where it's not that relevant. That doesn't change the fact that if you dabbled in Java, and decided on something else as your language, your impression of it will be far less than stellar.

    And you know how it is with every programmer telling you that "[MyLanguage] is the best", you'll think "Riiiiiiight. I tried it, not so buddy."

    Kjella
  • 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 Euphonious Coward ( 189818 ) on Tuesday August 24, 2004 @11:15AM (#10056467)
    It's not just because it's slow, but the reason it's slow (and Python, nominally 100x slower, isn't) is because of cache footprint. Java's garbage collector scatters storage all over as much address space as it can, so you get no effective locality. If your system ever swaps, it scatters its data all over the disk, too. That's why fake benchmarks always show it as "comparable to C++" (i.e. less than 3x slower) but experience shows you just sit and wait for a Java program.

    But the reason it is uncool is because, outside of stuff written just for Java monkeys, there is no Free software to speak of written in it. Free software is written in C (65%), C++ (25%), and Python and Perl (all but the last 1%). Free Software coders have avoided Java for lots of reasons, including its not-really-portability, its bad performance, its hasty and stupid language and library design, its corporate 0wnedness, and their own resistance to hype and idiotic jargon.

    Java killed Freenet in the crib.

  • Re:One word. (Score:5, Insightful)

    by Atzanteol ( 99067 ) on Tuesday August 24, 2004 @11:15AM (#10056471) Homepage
    Oh, god no! I just want it to behave more like 'libraries' under Linux/Unix. Let me edit /etc/java.conf to set which directories hold "libraries" (jar files). Java wants too much on the command line. One needs to be a good shell script writer (and/or batch script writer) as well as a Java developer as it is. Ever seen the weblogic startup scripts? *huge* shell script infrastructure just to setup all the correct params to java.
  • by Anonymous Coward on Tuesday August 24, 2004 @11:17AM (#10056501)
    Do they have any other choice? ;)
  • by markbthomas ( 123470 ) on Tuesday August 24, 2004 @11:19AM (#10056520)
    It can, in theory, be faster. Sometimes you discover data that turns out to be constant in the end, but you don't know this until your program is running. A JITter can use this additional information to compile to machine code that is a lot simpler and therefore faster. If you then execute this piece of code lots of times, you can earn back the time spent compiling and then start to profit from it. I remember some work being done into some research which did this in C: it generated some C based on a template, fork()-exec()ed gcc to compile it to a shared library, dlopen()ed the shared library and then ran the code. Of course, you had to do this explicitly, but I think since the chances of actually having an algorithm that benefits from this is pretty rare, that's not going to be a problem.

    That being said, Java has no way of hinting to the compiler "this is going to be constant for a long while now", or "I'm going to run this loop a couple of million times in a bit, you might want to JIT it real good". Without those, the compiler doesn't really have a hope.

    Also, it's not a case of interpreted languages not being cool. Perl, Python and a myriad of other languages are all interpreted (or run as some kind of byte-code), and no-one complains. Then again, I've seen Java out-paced by many of these languages (most of which compile the program to byte-code at start-up faster than Java loads), which suggests to me that Java is just a poor interpreted language. If you've seen how JVMs work internally, I think you'll agree with me.
  • Re:Also Speed (Score:4, Insightful)

    by Tassach ( 137772 ) on Tuesday August 24, 2004 @11:21AM (#10056550)
    I agree. Java is not a language for systems programming. The question is, what percentage of programming tasks entail low-level systems programming versus high-level applications programming?

    The VAST majority of software being written is high-level business applications; hence there are at least an order of magnitude more JOBS available for application programmers than systems programmers. For virtually all business apps, programmer productivity, code maintainability, and predictable scalability are FAR more important than raw execution speed. This is where Java puts C++ to shame.

  • by ArbitraryConstant ( 763964 ) on Tuesday August 24, 2004 @11:26AM (#10056643) Homepage
    meh

    The Java API is so large that wheels often get reinvented because no one can bloody find the 19" wheel with a particular bolt pattern an the type of treads they want.
  • by daBass ( 56811 ) on Tuesday August 24, 2004 @11:26AM (#10056653)
    Real java apps are packaged in a Jar file with a manifest file that takes care of everything...
  • by brianjcain ( 622084 ) on Tuesday August 24, 2004 @11:28AM (#10056674) Journal
    The stupid $CLASSPATH. Since I don't do a lot of Java work, I don't actually set this stuff up in .profile or .cshrc or anything, but any time I want to try to compile
    How is this any different from LD_LIBRARY_PATH or gcc -I/some/src/path?
    No pointers. Real programmers know how to use memory properly. That is all.
    That's total BS. Real programmers make mistakes. Real programmers benefit from the abstractions that C provides over assembly. When you write Java, do you find yourself wishing that you could address members by adding pointer offsets? Or do you long for the days when you could conditionally branch to a label instead of writing a for() loop? Pointers are a necessity for many computing environments, but I don't think that PC application software is one of them. You gain nothing, IMO, and risk everything.
  • by Decaff ( 42676 ) on Tuesday August 24, 2004 @11:30AM (#10056717)
    Java bytecode is not easy to optimize, having been originally intended for interpretation

    Hotspot does not optimize the java bytecode. It optimises the Java source (with techniques such as inlining and variable re-arrangement) and produces high-performance native code.

    _look_ at Java memory footprints, _look_ at your options for reducing them (ie adjust the GC. Great.)

    Java memory footprints can be very small - which is why it is favoured for use in many embedded systems. There are many options for reducing footprints, including run-time GC, stack and heap options and re-coding as a results of profiling, just as with any other language.

    because everyone relevant has made the same simple observations I have.

    Not true - there is a lot of work being put into Java numerics.

    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.

    Because in the experience of many of us, Java on Hotspot is not just theoretically faster, its actually faster, and we have benchmarked this with real examples. (IBMs VMs are particularly high performance).

    Remember when C++ was 'slow'? I do. Almost anything written in it was declared to be memory hungry and sluggish. I remember the big fuss when major companies moved from assembler to C/C++ in the 80s. It was often stated that C++ could never be fast because of object orientation and because it could not be 'fine tuned' like assembler.

    Seeing all the same old arguments with Java is just like Deja Vu all over again.
  • Why I Dislike Java (Score:5, Insightful)

    by Prien715 ( 251944 ) <agnosticpope@nOSPaM.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 Tim C ( 15259 ) on Tuesday August 24, 2004 @11:37AM (#10056798)
    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.

    So, use a decent IDE, one that features code completion - type the first few characters of the name, hit ctrl-space (or whatever, as appropriate) and it completes the symbol for you. Meanwhile, having more descriptive names improves code readability (and thus maintainability).

    Next argument agaisnt Java, please.
  • by kisrael ( 134664 ) * on Tuesday August 24, 2004 @11:37AM (#10056804) Homepage
    First, there's nothing wrong with a language being easy to learn and easy to use. Power and ease of use are not mutally exclusive.

    True. But sometimes "ease of use" runs into "quick and dirty", and all the difficulty in maintaining and extending that that implies. VB and Perl lend themselves to quick and dirty and require more self-discipline to stay well-engineered. Java usually pushes you to more forethought, and while crap code is certainly possible, it's somewhat less likely.

    Second, what's with this stuff about languages "for the masses"? VB programmers are programmers. No one's running down to the local curb store for a loaf a bread and a $400 box of VB.net. MS hasn't included Basic, Visual or otherwise, with its operating systems since,I dunno, DOS 3.3?

    Yes, currently VB is just another language.

    But I grew up with built-in BASICS, and when I got introduced to it, VB3 seemed to be positioned in a similar role. I got a student edition for cheap and had a lot of fun.

    As for the "for the masses", that could also be "for the non-techie, business-knowledge people in your company". I don't know if VB (especially the Office-centric versions) still do that well or not.

    I do think that we who grew up with computers that booted into BASIC have an edge over people who get the start button. Making goofy, kiddie programs had a much lower barrier to entry back then...now it's almost certain you'll have to install something, or go nuts with the Javascript [kisrael.com].
  • the real reason (Score:5, Insightful)

    by pchan- ( 118053 ) on Tuesday August 24, 2004 @11:38AM (#10056811) Journal
    here is the REAL reason hackers don't like java, and most of them don't even realize it.

    the job of an organization developing a software product (whether it's a company, an open source team, whatever), is to get a product out. nobody outside the project cares about languages or anything else, as long as it all works in the end. but to get a product out, the manager eventually has to pick a strategy. they usually fall somewhere in between the two extremes:
    A) use a few brilliant (possibly well paid) hackers and let them do the work. they're smart, and good enough to rely on to just do it. managing them is like herding cats, but why would you need to?
    B) use an army of keyboard monkeys and manage the hell out of them. these guys can pound out mediocre code, but with enough software engineering from the top down, well defined specs, and massive testing and integration, their work is sieved into a release-quality product.

    real hackers hate being marginalized, having their creativity stifled (yes, for those of us who actually write code, not just implement specs, creativity is involved), having to do the dumb solution just because everyone else is too weak to do their part of the smart solution.

    java is not a bad language. i think many would agree that is it at least decent (i think it's pretty good, actually). but java is the language of the B coders. it is made to be easy and idiot proof, like visual basic. you cannot do "neat hacks" in java, because if you could, the B coders would screw it up and produce worse code. java is a great language for the B coders. but the choice of java for a project is often a leaning toward strategy B. it's the "we can get any code monkey off the street to do this". it's the grunt work software that real hackers don't want to do, and what B coders are hired for.

    perl, a RAD (and rad) programming language, does not suffer this stigma. perl is accepted by hackers, precisely because it is not idiot proof. it's easy to confuse the B coders (and yourself) with some maliciously written ascii barf. you can do some crazy tricks in perl. it does not lend itself well to software engineering and the micromanagement of the B coders. perl is a hacker's language.

    many real hackers i've seen instinctively feel resentment towards java and the like, because they see marginalization of the software industry. java is for the blue collar coders, part of the greater plan of "software factories", where reproducability, meeting deadlines and specs, and easy replacement of people is way more important than doing cool shit. those of us who wish to stay at the top of the game, to do the cool shit, to write the programs that interest us the right way are often drawn to the languages that keep out the idiots, that have a higher barrier of entry, and let us do the cool hacks.

    i don't dislike java, and i don't dislike you B coders out there (you know who you are). i just don't want to be one of you.

    thanks for reading my long-ass post,
    p.
  • by pomakis ( 323200 ) <pomakis@pobox.com> on Tuesday August 24, 2004 @11:38AM (#10056812) Homepage
    This is why I really hate Java - [...]

    Some of the things in your list are valid gripes, but there are a few that I don't agree with. For example:

    • "Int's can't evaluate to boolean" - So what? (a==0), (a!=0), is that so hard? I think good programmers generally do the expicit test like this anyways, even in languages like C.
    • "StackTrace mumbo jumbo" - It's not mumbo jumbo. It tells you where the program fails and how it got there. Stack backtraces are a very powerful source of information for debugging. For programming languages like C you generally need external programs like gdb to provide this information. It comes for free with Java.
    • "Compiler output is sometimes inacurate" - Is this really a problem with the language, or with bugs in the version of the compiler you're referring to?
  • 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.
  • Re:Depends ... (Score:1, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @11:42AM (#10056878)
    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.)


    Ding ding ding! We have a winner! Congratulations, you realized that a terse language is not necessarily a productive one. If that were true, C would be more productive than Java, and APL would be the most productive language on the face of the earth. Neither of those statements is true because the terse languages have primitive standard libraries and therefore usually require more code to accomplish the same thing.
  • by rben ( 542324 ) on Tuesday August 24, 2004 @11:46AM (#10056930) Homepage

    I guess I'll never make anyones list of greatest programmers, but I think Java is plenty cool, especially with some of the recent changes. Java has gone from being a trivial scripting language that was primarily useful for animating pictures on the web to a very powerful language that can occasionally outperform C++, especially on web appliations.

    Java is far easier to learn than C++. While Java does not provide all the flexibility of C++, most of the time I don't need to be able to write code that interacts directly with the hardware.

    The days of managing memory by hand should have become a distant memory for all but a handful of programmers long ago. Memory management bugs are among the most common and difficult bugs to fix.

    When I first started programming Assembler programmers made all the same comments about us "sissy" C programmers that the C++ programmers make about programmers in Java and other memory managed languages. There aren't so many assembly language programmers around these days...

  • by BigGerman ( 541312 ) on Tuesday August 24, 2004 @11:51AM (#10057018)
    God bless you all.
    I am glad that these are the only things the guy who truly hates Java can come up with ;-)

    Eveything you listed is your friend, not enemy. Once you program for a while (and I mean 5,6,10 years), it will start coming to you.

    Object casting
    Often, downright ugly, this "feature" ensures that every object is what you think it is. You delegate all the checking to the compiler so you program, when it is incorrect, fails early, in fact, fails before it runs. Failing early is the sign of great code.

    try and catch
    Exception handling is a marvelous feature once you realize that from every situation there may be more than one (or two, ..) ways out. Using exceptions allows much cleaner separation of the "normal" logic and the "error" logic. Now, whether all the exceptions must be checked, or if C# model is better - is a different question.

    int and boolean
    Well, they are two completely different things, representing completely different animals in the real world. Why would you expect to be able to compare,assign, etc. apples to oranges?

    native and object types
    Tend to agree with you there.

    Precision
    Because IT IS an error when precesion is lost?

    bytes
    bytes are bytes and numbers are numbers.

    stacktrace allows to pinpoint your runtime problems

    classpath can be messy but it is precise: only stuff from classpath will be loaded by your program, nothing less, nothing more.

    etc., got to go, do some uncool programming.

  • by toriver ( 11308 ) on Tuesday August 24, 2004 @11:52AM (#10057033)
    ava has no function pointers. If you want to include callbacks in your data structures, you need to do hideous things with interfaces and virtual functions.

    No, you use the Command or Strategy patterns to solve the problem the function pointer "hack" is used for in C/C++.

    Java doesn't have function pointers because it's not C. I am sorry if anything non-C frightens you, but it's time to move on. If language A doesn't have feature B of language C, it means you need to learn something new instead of just apply the knowledge of C to everything.

    C is just assembly that has put on finer clothes, trying to look like a higher-level programming language.
  • by LWATCDR ( 28044 ) on Tuesday August 24, 2004 @11:53AM (#10057068) Homepage Journal
    That is an interesting idea. Too many choices? Better to spend the time hunting for a 19 wheel with the right bolt pattern than having a chunk of ore, a forge, and an anvil handed to you.
  • Re:Well... (Score:-1, Insightful)

    by shitface ( 121619 ) on Tuesday August 24, 2004 @11:56AM (#10057122) Homepage Journal
    I am not going to get sucked into saying that Java is slow or that it is faster than C and C++ or assembly or whatever else you like to claim or dispute. Java is what it is.

    With all that said I really doubt it is the C hackers and people citing java device drivers as the reason that Java has a reputation for being slow.

    I have always felt that Java is percieved as being slow because of the programmers it attracts. Namely beginners and underskilled programmers because Java is believed to be friendly and forgiving for such. Combine that with the explosion of open source and the pc revolution and you have a lot projects seeing daylight that have no business doing so. Yes there are talented Java programmers out there but there are a lot more mediocre Java programmers out there (this is true of any language community but it seems more relevant when talking about Java, perhaps because Java is(/was?) in demand so a lot of people are claiming to know it when they have no right doing so).

    As for the device driver argument(?), the programmer in me says one should be able to write a (fast) device driver in Java (or just about any language). Java does not make it easy because it is difficult to get to the needed low levelness with Java required for a device driver but that can be worked around. There are two things that are holding back java device drivers the developers and the compilers. It would take a special programmer to write a really decent device driver. As for the compilers you are talking native code generation, the device driver writer most likely having initimate knowledge of the compiler, and possibly dropping garbage collection. Why enable the garbage collector if you know you do not need it? BTW, obviously I am talking about native device drivers and not that JINI stuff.
  • by deischi ( 133747 ) on Tuesday August 24, 2004 @11:58AM (#10057148)

    This is not really about Javas coolness or not (could not even read the article).

    To my experience when Java programmers switch to C++ they tend to produce code that is full of memory leaks (new in Java and C++ are VERY different) and have a tendency to write overdesigned and unnecessary complex code.

    What you will always see from a person done Java in the past and now doing C++ is things like:

    DoSomething() {
    C * c = new C();
    if( ! C->doSomething() )
    return;
    C->doMore();
    delete c;
    }
    Harald
  • by mav[LAG] ( 31387 ) on Tuesday August 24, 2004 @12:02PM (#10057208)
    Paul Graham points out why this happens in another of his essays, Revenge of the Nerds [paulgraham.com].

    The pointy-haired boss miraculously combines two qualities that are common by themselves, but rarely seen together: (a) he knows nothing whatsoever about technology, and (b) he has very strong opinions about it.

    Suppose, for example, you need to write a piece of software. The pointy-haired boss has no idea how this software has to work, and can't tell one programming language from another, and yet he knows what language you should write it in. Exactly. He thinks you should write it in Java.

    Why does he think this? Let's take a look inside the brain of the pointy-haired boss. What he's thinking is something like this. Java is a standard. I know it must be, because I read about it in the press all the time. Since it is a standard, I won't get in trouble for using it. And that also means there will always be lots of Java programmers, so if the programmers working for me now quit, as programmers working for me mysteriously always do, I can easily replace them.

    Well, this doesn't sound that unreasonable. But it's all based on one unspoken assumption, and that assumption turns out to be false. The pointy-haired boss believes that all programming languages are pretty much equivalent. If that were true, he would be right on target. If languages are all equivalent, sure, use whatever language everyone else is using.
  • Re:Its just a tool (Score:2, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @12:04PM (#10057229)
    This is just messed up.

    Are you talking about replacing Java applets with Perl scripts? What? And who does serious web development with Perl CGI!? I'm a full-time perl programmer and won't touch CGI. CGI.pm, sure, but not unless it's under mod_perl.

    And Java not good for web-based applications? Have you not even considered the enormous rise of Java as a popular back-end server language purely for large-scale websites? And hey, in some cases [tbray.org] Java's regexps are faster than Perl's!

    I love perl. I make money writing perl. I teach people perl. But I also know Java (mostly from college) and can tell you don't know what you're talking about.
  • by bharlan ( 49602 ) on Tuesday August 24, 2004 @12:17PM (#10057410) Homepage
    LD_LIBRARY_PATH isn't any better. Yes, you can specify directories, but you must instead name each shared object when you link.

    Yes, you can use /etc/ld.so.conf for common shared objects. You can equivalently use $JAVA_HOME/jre/lib/ext for common jars.

    Using a path is the single most common way to find dynamically loaded code.

  • I've mentioned this before, but the primary difference between a C/UNIX programmer and a C#/Java/Windows programmer is the perception of what constitutes a program.

    In UNIX, a program is usually a tiny little thing which passes its output to other tiny little things, creating a network of programs controlled by a lightweight master program. Because of this, programs HAVE to have a small footprint and have to start up and close down quickly. A good UNIX program does only what it's supposed to, and then it quits.

    In a Java/C#/Windows program, you generally start the program once per day/week/year. The program, once started, calls objects with functions that operate the same as individual programs in the UNIX paradigm. Because the program is doing all of the work and all of the flow control, it doesn't matter if the thing starts or stops quickly, doesn't matter if it uses a lot of memory, because you're not going to be using that memory for a whole lot else. A good Java program does so much, it's almost like its own windowing or operating system.

    The essence of "I don't understand OOP, it's full of bloat" is the perception of what a program is and does. If you think a program should do one small thing and then pass its output or control to another program, you're essentially in the OOP mentality already...substituting processes for objects and programs for functions. On the other hand, if you believe as I do that programs should sit open and ready to use on a whim, even the fast startup time of the average UNIX utility is too much. You need the memory allocated, the commands loaded and ready to handle whatever you've got to do -- which is why OOP makes sense. You don't start your notebook every time you need to jot a note (I don't anyway)...you just pick it up and write.

    Anyway, to get on topic: I always thought Java *WAS* cool. All the under-40 programmers I know LOVE Java, even if they don't use it. It's almost a spiritual thing (I plainly remember wearing a "Java is the Way" back when I was a Java coder) and it's even more mysterious because the older generation of C coders didn't like it. Not disposing of objects and relying on GC is the programmatic equivalent of not cleaning your room. And a good UML diagram reads like a map of a futuristic city.
  • Re:the real reason (Score:5, Insightful)

    by fakeplasticusername ( 701500 ) <dikeman@g[ ]l.com ['mai' in gap]> on Tuesday August 24, 2004 @12:18PM (#10057424)
    I understand your point, but i would have to disagree. Partially.

    I am a java coder. I consider C/C++ a knowledge based coding language. If you take your time to learn all the tricks of the trade in C, you will probably be a better coder than I am. Java isn't as tricky of a language, most everything you need is in the javadocs.

    I can gaurantee you that the C++ master would write cleaner code than the casual java coder, and probably even better than the java master, the difference being the java coder doesn't have to know every nook and cranny of the coding language to write a good program. I would never presume to call the C++ programmer more intelligent than the java programmer, merely more knowledgable and likely more passionate.

    I personally don't use java with the desire to become a java guru or a programming master, i just want to write software that works, and i don't want to spend a great deal of time doing it. I don't program for the joy of programming, i program for the joy of solving a problem. The amazing thing about java is that it gives the ability to write software to just about anyone. Yes there are B coders in java, but many of them are A engineers who see coding as a means to an end, not the end itself. Whether they can write good software or not is a function of their intelligence, in my opinion, not of their language choice.
  • Re:Its just a tool (Score:2, Insightful)

    by Hulfs ( 588819 ) on Tuesday August 24, 2004 @12:25PM (#10057507)
    If I do X with Java and I similarly do X with Perl/CGI or Python/Zope - and the result is faster using the 4GLs - then it seems clear to me that the best approach is to not use Java. A process is a process - regardless of whether it runs on the server or the client. What differentiates them, then, must be performance.

    Actually, your parent poster was precisely correct. You're trying to compare completely seperate entities. Applets were meant to be a way to deploy thick client applications to end-users as opposed to your perl scripts which are completely server/thin client based deployments.

    If you truly want a closer apples to apples comparison you really should check into using jsps. On any decent application server a jsp deployment will outperform cgi based perl script (I can't speak for a mod_perl based deployment). I'm not trying to bash perl here, I love it. I'm just pointing out your error in comparison of applets (which are all but dead -- replaced with java webstart [.jnlp files]) to server side perl scripting.

  • by Anonymous Coward on Tuesday August 24, 2004 @12:29PM (#10057558)
    I'm a Java guy because of the API. When I want to get something done right I don't want to re-invent the wheel, and I don't want to have to mix and match dozens of differently-written APIs. Java features a robust and (generally) consistently named and structured API. On top of this, the API is very well designed and tested, and caveats are well-known. It is not some obscure OSS library that lacks security/features/functionality and may still have unknown holes or bugs.

    Also, all this talk of the "Coolness" of a language really got me upset and made me have to post. When I was in college, people like this pissed me off to no end. I had a compilers class and the assignment was to make a 4-stage compiler in the language of our choice. I picked Java and recommended others do the same. The responses that I got were "I want it to be quick, so I'll use C" or "I don't really understand Java, so I'll use C" or "No thanks, I'll use a real programming language", etc. So fine, I was the only one that used Java. In the end, my program was complete, worked 100% without error, was well-structured (having logical distinction between subcomponents), FASTER than the C programs, readable, and it took me LESS time to write it than the C-lusers that stayed up until Midnight helplessly trying to complete theirs. Some failed.

    In the course of working on the compiler project, the 1337 C coders had memory management issues, segfaults, etc. Some of them could not work the bugs out of their hashtables/linked-lists/etc, and so resorted to bad practices such as bubble-sorts, arrays-of-arrays-of-arrays (instead of dealing with pointers), etc. Wasteful memory practices, inefficient algorithms, sloppy code, etc. -- hallmarks of 50-75% of every C program I've ever had the pleasure to clean up after. The ones that
    DID manage to complete their projects were exquisitely proud of how great of hackers they were. Nevermind the fact that in their desparate drive to complete the project, they had no chase to sit back and think of nevermind implement hash-maps, etc. which would make their program efficient AND ELEGANT. Java allowed me the comfortable leisure to do all that, and I have the elegant code to prove it.

    Now before anyone gets me wrong and says that at least these guys were getting experience with the algorithm knowledge they'd later need, let me correct you. I CAN do algorithms and memory management very well. I understand data-structures perfectly and have written my own in C-based data-structure classes. Java's structures are well-thought-out and allows GOOD programmers to focus on elegance rather than re-implementation.

    And BTW... every "1337 hax0r" I've ever met has been nothing but a sham. The smartest programmers I've ever met favored C/C++. The second-smartest favored Java. Both wore normal clothes and didn't have the long hair, beard, etc. that the rest of the insecure programmers of my school would cultivate instead of actual ability. They enjoyed elegance instead of minutae, and knew that languages were just tools to get a job done right (Where right is sometimes incompatible with fast). That should be the real definition of a hacker.

    Sincerely,

    Enemy of Cool
  • by Paradox ( 13555 ) on Tuesday August 24, 2004 @12:56PM (#10057931) Homepage Journal
    The reason Java is considered 'uncool' in a majority of cases is a lot like the reason certain people are considered uncool in high school. It's mostly prejudice from people who are desperate to be accepted by their peers. Certainly some people have given Java a fair shake and decided they hate it, but the majority are just jumping on the bandwagon.
    BS. Java is eclipsing Cobol now. Everyone has used it. If you've written code, you've probably at least written one small app in Java. Ubiquity is a double-edged sword.

    Now, people hating Haskell might just be jumping ona a bandwagon. People who hate Lisp might be jumping on a bandwagon. People who hate Ruby might be jumping on a bandwagon. These languages are comparitively rare.

    But Java? No.

    Frankly I expect better from geeks. It's come to the point where I don't even listen anymore because every diatribe against Java is based on some small pet peeve or overly specific scenario. Everyone rehashes the same old arguments ad nauseam. Quit yer bitchin' and write some goddamn code and you might be useful for once.
    How about this then? Java's type system sucks. It sucks, sucks, sucks. Java generics are only marginally fixing the problem. You cannot design your program up front. Heck, to refactor Java most programmers say you need tools. If your language is so intractable that it requires a tool to make refactoring reasonable, then you have a crappy language.

    Java's primary GUI API, Swing, is not "brilliant." It's obtuse, lacks many features, and is unnecessarily slow.

    Java's "Native Interface" (or FFI, "Foreign Function Interface") is hideous. It's difficult to get much of anything done at all. Ruby and Python provide much better models.

    Are these complaints general and clear enough? Java is so riddled with flaws that it's amazing it's gotten this far. A living testament to the fact that marketing overcomes all.

  • Re:the real reason (Score:2, Insightful)

    by delete ( 514365 ) on Tuesday August 24, 2004 @12:56PM (#10057936)
    You sound rather bitter. Is it perhaps because you have found that real companies actually like to meet deadlines and produce reliable software in a structured manner, rather than letting "A coders" (based on whatever ad-hoc criteria you use) like you waste time doing some "cool hacks"?

    I would certainly argue that the ability to understand complex problems and implement novel solutions is what separates good coders from those who might be more suited to other jobs. However, surely "doing cool shit" does not depend on your choice of language, but on the individual. If you're unable to do that in Java, is it really the language's fault? Do you believe that no developer is capable of originality or creativity merely because they use Java as their primary language?

    The level of language bigotry in this thread is amazing. Ironically it was Paul Graham, the champion of oft-rediculed language, who started this discussion.
  • by jhunsake ( 81920 ) on Tuesday August 24, 2004 @01:02PM (#10058010) Journal
    ONE used such a device

    You don't use pointer aliasing, it's a concept. Pointer aliasing does occur quite commonly by the way, evidenced merely by the existance of memmove() and memcpy().

    Here's pointer aliasing that most people wouldn't even recognize:
    void swap (int* a, int* b)
    {
    int temp = *a;
    *a = *b;
    *b = temp;
    }

    int v[40];

    swap(&v[20],&v[21]);
    You make me worry

    No, you make me worry. Especially after the HUNDEREDS of applications you've written. You can't even spell "hundreds" correctly for Christ's sake.
  • by MemoryDragon ( 544441 ) on Tuesday August 24, 2004 @01:03PM (#10058033)
    My dear friend, this is easy to answer. The reason why your hello world is as verbose at it is, is that java in the core is OO (not really pure thanks to the hack... core datatypes and operators, but pure enough, that the example is justified as it is)

    Perl on the other hand is in its core procedural, like C++ has a procedural core.

    Perl is not harder to understand, but the main problem of the language simply is, that it has so many shortcuts to problems that you easily end in a mess of shortcuts, ditto for C++

    Java basically sacrifices some of those shortcuts for the sake of readability. What in the end comes out, is probably 10-15% more locs but much more readability and less bugs.

    Well if you go for the fast hack this approach might not be the best, but if you have to design huge software systems, are more readable approach which some security nets builtin is heavens sent.

    Now if we go to Python, python developers always claim less code, but I did a few things with Python, and the less code approach is more or less not justified, the class libs of this language arent too far off the ones java and C# use, and the only code reduction i could see was to use inlining instead of brackets for block signing (which is a matter of taste but saves a few lines per class, not very much) and the non declarative character which removes you of the responsibility of having to declare a variabe.

    The non declarative approach maybe in the long term saves around 1-2% of code, but causes lots if trouble regarding typos in variable names, idiotic assignments and so on, which have to be covered by unit tests, which add another 15% to the code, to reach the same stability.

    So non talkativity in large systems is a question on how fast you can achieve an elegant decent result, and often non talkative languages with shortcuts, prove to be worse solutions for middle sized and large systems, than ones which look on the first sight not that elegant.
  • by Hulfs ( 588819 ) on Tuesday August 24, 2004 @01:06PM (#10058071)
    But the reason it is uncool is because, outside of stuff written just for Java monkeys, there is no Free software to speak of written in it. Free software is written in C (65%), C++ (25%), and Python and Perl (all but the last 1%). Free Software coders have avoided Java for lots of reasons, including its not-really-portability, its bad performance, its hasty and stupid language and library design, its corporate 0wnedness, and their own resistance to hype and idiotic jargon.

    Are you flipping crazy (or trolling)?! Go to freshmeat.net, browse to the projects by programming language, and look at the number of projects writting in java (currently 3257, about what C++ is at). Are you telling me and everyone else that every one of those projects are both non-free and solely written for "Java monkeys"? What a total load (as are your "statisics").

  • by graveyhead ( 210996 ) <fletchNO@SPAMfletchtronics.net> on Tuesday August 24, 2004 @01:07PM (#10058094)
    Man you are so full of shit I can't believe this post is modded +5 and no-one has responded.

    First you say:
    Java makes using functions as arguments, variables, etc. very painful
    Yeah, and your point is? In case you didn't notice, passing functions as arguments does not make the worlds most legible / maintainable code. On the other hand, an explicit interface is both legible and maintainable, plus you have an explicit place for documenting the interface (Javadoc in the interface definition).

    Then you go on to say:
    Then you have the issues with collections (to be fixed, we're told, in 1.5) -- the omnipresent downcasts.
    This is an implicit downcast:
    class foo { ; }

    class bar extends foo { ; }

    foo f = new bar();
    It compiles perfectly and works as expected.

    The last line of this:
    ArrayList l = new ArrayList();
    l.append("A String");
    String s = (String)l.item(0);
    Is an upcast. and I dare you to find a list implementation in any type-strong language that doesn't require an upcast in this situation. You need it to be able to store objects of an anonymous type on a list.

    How such misinformed tripe ends up at +5, I'll never know...
  • Damn straight! (Score:4, Insightful)

    by Tony ( 765 ) on Tuesday August 24, 2004 @01:12PM (#10058138) Journal
    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.

    How true!

    And the same goes for Budweiser, McDonalds, the Ford Escort, and reality TV, as well. Who cares if they are good or anything; they are popular.
  • Re:the real reason (Score:3, Insightful)

    by TheLastUser ( 550621 ) on Tuesday August 24, 2004 @01:15PM (#10058185)
    Typical anti-Java bunk. You forgot the "Java is slow" comment by the way.

    The truth is that there are B coders that write C and perl too. It really doesn't matter what tool you give a B coder, you still don't end up with A material.

    In our shop, we code in both C++ and Java. Nobody upstairs tells us what to use, we even use a bit of perl now and then. Most of our stuff gets written in Java. Simply because its vastly easier than to do it in C. Java has a really fantastic set of libraries that allows very complex applications to be written easily. This lets us concentrate on producing a kick-ass product, instead of fiddling with memory allocation, etc.

    For web applications, C and Perl are less than useless. Java app servers are so far beyond apache/modperl that the comparison is a joke.

    As a C bigot and part time anti-Java stooge, I am sure that your inane construct of the A and B coders serves you well. It must be very satisfying to produce a bunch of C that does next to nothing, in between seg faults, and say to yourself, "This is a masterpiece and I am a god".

    What we do in a month, you couldn't do in a year, and that, my friend, is why your shitty language of choice is headed the way of Ada.
  • Re:How about (Score:2, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @01:18PM (#10058235)
    I absolutely disagree.

    The more languages you know, the better you are at choosing the right tool for the job - and the better you are at programming in any of those languages.

    Sadly, the best (practical) tool for the job is often decided by secondary factors (availability for the required platform, availability of third-party libraries) rather than the nature of the language itself. However, the knowledge of multiple languages (especially fundamentally different languages) is always an advantage.

    As an example - if you need to write your code in C, the knowledge of assembly language can help you figure out what's efficient, and the knowledge of functional and/or OO languages can help you design the right kind of abstractions for the task.

    Seriously, once you know sufficiently many programming languages, writing code well in any language not entirely inappropriate for some task comes naturally. I'm saying this based on experience.

    Sufficiently many means assembly language, at least one of (C, C++, Pascal, Ada, Modula*), at least one of (Lisp, Scheme, Python), at least one of (Standard ML, CAML, Caml Light, OCaml), at least one of (Haskell, Clean, Miranda), at least one of (Oz, Erlang, Concurrent ML), at least one of (Java, C++, Simula), at least one of (Smalltalk, BETA, JavaScript), at least one of (Perl, SNOBOL, Icon), at least one of (APL, K), at least one of (Forth, PostScript), at least one of (Lisp, Dylan, Scheme).

    Each category could be expanded, since I was thinking of a particular paradigm/feature in each case, and admittedly there are a couple of categories that are not that critical (I'd say the string processing - Perl, SNOBOL, Icon - and stack based - Forth, PostScript - are the least relevant).

    The thing is, anyone interested enough in programming to be a Really Good Programmer(tm), will want to learn and understand as many languages and paradigms as possible.
  • by bugbear ( 448726 ) on Tuesday August 24, 2004 @01:23PM (#10058286) Homepage
    It's a bit misleading to say that I called Java uncool. I said in Revenge of the Nerds that hackers think Perl and Python and Ruby are cooler than Java, but I'm not claiming that that's how one should decide what language to use.

    I dislike Java because (a) it lacks abstractions I need, (b) it is horribly verbose and bureaucratic, and (c) it is another Frankenstein in the C++ tradition of languages created by bolting features from dynamic languages onto a C substrate.

    I'm often accused of being a language bigot because I violate the taboo against comparing one language to another. But if you think about it, anyone who works on language design *has* to do that, taboo or no. If you can't compare alternatives, how do you decide what direction to go in?
  • by zipwow ( 1695 ) <zipwow@gmail . c om> on Tuesday August 24, 2004 @01:27PM (#10058330) Homepage Journal
    Col. Sanders keeps saying, "Prepare for..." and Dark Helmet interrupts and says, "Why do you have to prepare for everything?"


    This is an interesting example, because I think in the real navy, there's a straightforward answer: Sometimes your preparation fails.

    In the example you gave, there are *two* points of failure. The first is that you can't find the directory you pointed at, and the second is that you can't get a listing of it. Making those things be separate forces you to consider the failure cases.

    A large part of what Java is about is failsafe enterprise-level applications. When you write to that level of safety, you need to identify the different causes of issues.

    In the same way, your day-sailer on a 12' boat doesn't shout to his crewmate "Prepare to tack!" because there isn't any reason to. If you're sailing an 80' schooner, however, you do shout to your crew of six "prepare to tack!" And then you wait in case someone shouts back, "Port side winch is jammed!".

    -Zipwow
  • by chris_mahan ( 256577 ) <chris.mahan@gmail.com> on Tuesday August 24, 2004 @01:30PM (#10058363) Homepage
    Yeah, but YOU didn't write bittorent. A python programmer did.

    You could write an AI expert system in javascript if you wanted to. I am not saying one language is better than another for this task or that.

    All I am saying is that for people who are "hackers", Java is not as "attractive" as python.

    This attraction is the "coolness" factor.

    I agree that to build an enterprise-wide web-based data-back-end high availability, fast and robust multi-thousand user application, Java is the better tool.

    But "hackers" don't want to develop billing software and reporting engine for banking or healthcare. They want to make things like bittorent, for fun.

    And it's the "fun" that makes it "cool".

  • Re:Well... (Score:2, Insightful)

    by AKAImBatman ( 238306 ) <akaimbatman@gmaYEATSil.com minus poet> on Tuesday August 24, 2004 @01:35PM (#10058425) Homepage Journal
    -1 Troll? It seems that someone around here doesn't like hearing how computers ACTUALLY WORK. *shakes head*
  • by bugbear ( 448726 ) on Tuesday August 24, 2004 @01:36PM (#10058435) Homepage
    if only an expert can write usable code -- not great, but merely usable -- the language is junk

    Is that really true? In many fields there are tools that only experts can use properly. Why should it be different in programming? I think Michael Vanier makes a good point about LFSPs [paulgraham.com].

  • Re:Well... (Score:1, Insightful)

    by Anonymous Coward on Tuesday August 24, 2004 @01:40PM (#10058485)
    Yes different languages have their places. As usual ./ crowd missed the point. Java should be compared to C# not to C. Curioulsy, we haven't seen an article entitled "C# considered UNcool"! (Hmm...) C# is what Java should be compared to, NOT C or C++. The point is that Java is way cooler than C# because it's multiplatform (officialy supported) and has a lot of tools and code (including free). At any rate Java is highly prefferable than C# and if your problem fits the bill for Java or C#, the smart choice is Java. There is nothing more to this discussion.
  • In all my years (Score:3, Insightful)

    by KidSock ( 150684 ) on Tuesday August 24, 2004 @02:00PM (#10058706)
    I have never seen so much utter nonesense that what I'm seeing posted in this forum today and my karma has been 5 since 1999. I code more in C now than I ever did in Java but clearly you people have no clue what makes a good programming language or how to program. Java is a great programming language. Most of these posts are downright incorrect. And why the opinionated ones get modded Insightful is beyond me.
  • by jimfrost ( 58153 ) * <jimf@frostbytes.com> on Tuesday August 24, 2004 @02:06PM (#10058783) Homepage
    The real problem with your post is that nothing in it is specific to Java.

    Certainly not. There's nothing whatsoever new in Java, it inherited every single feature from somewhere else. That in no way makes Java less interesting, since it does a pretty good job of combining a lot of good features in one place -- and being popular enough that you can pretty much count on an implementation being available, too.

    Regarding Paul's article, you might notice that I didn't take issue with any part of it other than the idea that the best hackers avoid Java. His clique presumably does, but it's plenty easy to find high power hacks who either are building or have built significant amounts of code using Java.

    For that matter, it's been my experience that the best are relatively language agnostic -- writing code in e.g. C, C++, C#, Python, and even -- god help 'em -- Perl. Pick J. Random Hacker and ask 'em what languages they've made significant use of over their career and you'll almost always get a laundry list.

    Whatever gets the job done, right? The relative "goodness" of the language has little to do with it, which is easily proven by looking at how much work gets done in C and C++.

  • Re:Well... (Score:3, Insightful)

    by AKAImBatman ( 238306 ) <akaimbatman@gmaYEATSil.com minus poet> on Tuesday August 24, 2004 @02:07PM (#10058810) Homepage Journal
    This was extended in C++ to allow non-scalar comparisons so now one can write equality operators to do what ever one wants for a given pair of objects.

    Which does the EXACT SAME THING as the Java function. The only difference is that C++ allows operator overloading while Java does not. Given the number of bone-headed ways operator overloading has been abused, I'm inclined to agree with Java's way of handling things.

    So in C for instance the equality operator would promote 3 == 3.00 to 3.00 = 3.00. This is a convince.

    Which is different from what you said. The original poster claimed that 3 and 3.00 are not equal. He was correct in his statement. You then called him a liar. Now you're doing an about face. Seems you owe the original poster an apology.

    Dweeb.

    Standing tall and proud. :-)
  • by Anonymous Coward on Tuesday August 24, 2004 @02:11PM (#10058864)
    OK, you lost me when you said that Neither Perl nor C move from platform to platform with the same ease Java allows. I disagree:

    1. If we restrict ourselves to Linux, Windows, Mac, then there are GUI toolkits for both Perl and C which are cross platform (for C it's a recompile for each platform). Unless you program in the Metal/Java Look and Feel, Java programs tend to require a bit of tweaking on each platform (and Metal looks like ass).

    2. If we do not restrict ourselves to "major" platforms, particularly if we are willing to scrap the GUI, then C becomes the most portable language. Ever programmed in Java on a PA RISC system? Probably not, because nobody has made a JVM for it (although this is dated knowledge).

    The only place where Java wins big is in the emerging embedded market, where some companies are making their devices J2ME compatible and not providing a C interface. This market is growing and will likely be more important in the future (it is important to some people now).

    Java's "best" is garbage collection, SWT, and Apache. Garbage collection is cool because, as the grandparent said, B coders can't screw up. SWT almost acheives all of the cross platform look and feel objective, at the expense of manual resource management (which is sort of odd in Java). Apache (and IBM) provides some of the most useful libraries and frameworks for developing enterprise applications.

    Java's "worst" is installation. I used to think that applets and web start applications were kind of cool, until I noticed that everyone had an old JDK installed on their machine and I wanted to use the latest. If I program an application in Flash, I can redirect the user's browser to require a single click to download the latest player. Users seem to be Ok with this when it is required. For Java, the user is presented with three different things they are supposed to read and click through. Updating Java intimidates some users, just because of the way Sun has tailored the whole experience. Thank god apple updates their JDK through the system updater.

    OK, InstallShield almost completely mitigates this problem, but it is still fucked up that Sun hasn't done anything about it.
  • Re:the real reason (Score:3, Insightful)

    by I_Love_Pocky! ( 751171 ) on Tuesday August 24, 2004 @02:11PM (#10058866)
    No one has responded to the real problem with this post. You seem to come at this like programming is some kind of difficult feat. I don't care what programming language you use, you are not special because you can program.

    The only real interesting problems in software are in the design. A programming language is just a means to an end. I don't care what you program in, all programming is grunt work. It can be fun at times, but it isn't an intellectual challenge.

    So, to put it plainly: Get over yourself. If it makes you feel better to produce all your apps in something with a high barrier to entry like assembly, feel free. It doesn't guarantee that they will be better though. If you pick the wrong algorithms/data structures/architecture, even the most bloated high level language could out perform your low level code.

    The bottom line is that Java is an excellent language for certain applications. If you are so intelligent that it bruises your pride to use Java, then what the hell are you doing as a grunt programmer anyway?
  • The Bell Curve (Score:5, Insightful)

    by macrealist ( 673411 ) on Tuesday August 24, 2004 @02:15PM (#10058906) Journal
    thanks for reading my long-ass post
    you're welcome, thanks for posting it

    However, I think you miss a few important concepts in your post.
    1) Not all "A coders" are hackers.
    - I've worked with the elite programmers that do believe that requirements and documentation are good and that a process produces better results. It seems that these are usually the elite and experienced, but not always.

    2) Not all hackers are "A coders".
    - "B coders" are hackers too. Seen it too many times. Just like anything else, there are more "B coders" and "C coders" that are hackers than there are "A coders". It is just a fact of life, that there is always an elite FEW, but and abudance of mediocrity. i.e., just because you are a hacker, doesn't mean you're good.

    3) Managers are people too.
    - There are many "B managers" and an elite few "A managers". And usually, an "A manager" is worth a team of "A coders" to a company.

    4) Teams are usually a cross section of the population.
    - Rarely are there teams full of code monkeys, or full of "A coders". Here is where a great manager is important. An "A manager" will allow enough room for each person to do what they need to, but ensure that each is able to work with the other. I've been lucky enough to have "A managers", and they make a world of difference to individuals and to projects.

    5) Programming languages are just tools.
    - Use the best tool for the job. Saying you choose a language based on your ability to do "neat hacks" is idiocracy. If I see someone putting nails into a wall with a screw driver, I think - "Damn, that guy is good with a screw driver", and "what a friggen' idiot".

    Reading your post it is obvious that you are either an elitist with a lot of bad experiences, or someone with no experience. Either way, I hope your next manager is an "A manager", you really need some help.
  • by Frizzle Fry ( 149026 ) on Tuesday August 24, 2004 @02:41PM (#10059244) Homepage
    There is *no* way that a interpreted or JIT compiled language can be *faster* than native code.

    This is like saying that C can't be fater than the assembly. In theory it's true: whatever assembly is generated by your C compiler could have been written by you by hand. But in practice, you don't write assembly the same way a compiler does and it is much smarted about optimizing it than you are. So we reach a point where good compilers can generate more efficient code than would any actual human would write if they hand-coded in assembly, even though they theoretically could write equivalent code.

    Similarly, a good JIT will in practice be faster than running native C code. We haven't reached that point yet, but we will because the JIT and the runtime are free to do things (like reorganizing memory to reduce paging and to put certain things on the same cache line) that your C compiler can't do since it lets you have access to pointers to arbitrary memory (and lets you pass them around and do whatever you want with them), and because your compiler doesn't have the same information at compile time about how you use the program that the JIT and runtime do, since they get to see what happens at runtime.
  • Re:Well... (Score:3, Insightful)

    by AKAImBatman ( 238306 ) <akaimbatman@gmaYEATSil.com minus poet> on Tuesday August 24, 2004 @02:49PM (#10059347) Homepage Journal
    What the fuck are you talking about?

    Tsk, tsk, tsk. As the old saying goes, "Profanity is the crutch of a small mind."

    3 and 3.00 are not identical at the binary level

    Which you claim to have understood.

    from a logical stand point they are the same.

    Which was fairly obviously not the original poster's point.

    The equality operator works as expected in this case.

    Which was not something the original poster mentioned.

    So why should the equality operator behave differently for other types ?

    Because it behaves differently for EVERY type. You have to tell the compiler how to compare them.

    If I'm comparing objects I am most likely interested in a logical comparison and not in a comparison of their respective addresses.

    Which is why Java has the "equals()" method on objects. Congratulations, you've taken about two hours of time to come to this simplistic conclusion.
  • by Anonymous Coward on Tuesday August 24, 2004 @02:51PM (#10059372)
    Okay, so I'm a Software Engineering PHB, having decided that 1.5X-3X the salary of an architect is nice to make, particularly when the job comes with arbitrary unearned prestige, the occasionally dishy secretary and the time and comfortable surroundings necessary to play Battlefield Vietnam and snack on occasional porn behind closed doors (use my own box and wrap comms out on 22 to home to avoid the sysadmin). So now that you have the appropriate amount of hate, pity or derision going for me, let me tell you what I see when I watch geeks like you argue for the best language, nerding over data structures, pointer math, two lines of this vs. one line of that and the like.

    I see job security.

    Because none of you have got an eye for the business imperative behind most language decisions: Make your software assets, your hardware assets and your people interchangeable.

    Here's how it works. I'm in a mgmt meeting and the SPHB tells me that he thinks it would be reaaaal cool to put the temperature in Cleveland on the "About Us" page so his granddaughter can see how shriveled old gpa's testicles are. So I mention this change to the appropriate product manager and soon enough, resources are queued for that job and it gets passed out to a SNK (snot-nosed kid) for implementation. SNK immediately whines that we need Perl if we're a Java shop, Java if we're a Perl shop or a combination of struts, EJB's, an EJB-.NET bridge and some back-end VisualHappyHappy(TM) if he's had too many Mountain Dews that day.

    Like WTF? "The best tool for the job" means crap to me when our software doesn't have to articulate the friggin Space Shuttle. If SNK goes and builds some monstrosity that only he understands, WhoTF am I gonna get to maintain it? If I let the nerds pick their favorite needle-nose pliers for every job, I'd have a whacko menagerie running on six different platforms in one month flat!

    Thank you, I will retreat to my cave.

  • The big picture (Score:2, Insightful)

    by xoombeeny ( 807973 ) on Tuesday August 24, 2004 @03:06PM (#10059601)
    Interesting discussion.

    Although this is a site / topic aimed at developers, it seems their are some "big picture" things here being glossed over. IMHO.

    For one, someone upstairs said, "different languages for different problems." Hear hear. No one language is great for everything. I can think of three different languages I use for three different problem domains. C for device drivers, perl for system admin functions, (even on Windoze machines), and yes, Java for "big" e-commerce apps.

    Java IS an excellent, strongly typed, OO language. When a problem lends itself to a good OO approach, and I'm not required to measure clock ticks for performance, I prefer Java because it makes it easier to do.

    On the downside. I've been frustrated in the past with lack of JVM support for various devices. (And too dang busy to write my own!!)

    And this brings us to the final "big picture" issue. Have you ever taken a look at Microsoft .NET? The structure and goals of .NET look like the best of Java with other stuff thrown in. The point here? It's the marketing dummy.

    We can argue about syntax, tool support, and performance all day. But in the end, one of the key things about Java is, JAVA'S NOT .NET! And why does that matter? Because without competition the MS machine will assimilate us all!!!

    MS is rapidly advancing to take over everything from the palmtop to the desktop, the set top box, and even your automobile. We need more alternatives that don't wear an MS brand. I would like to see us break out of some of these old, tired issues, and start focusing on what we can do to advance the state-of-the-art in more competitive ways.
  • by random_static ( 604731 ) on Tuesday August 24, 2004 @03:19PM (#10059760) Journal
    java is verbose for pretty much anything interesting precisely because of those fancy-ass libraries of its.

    because everything requires library calls in java, whether or not that makes sense. want to use a list? use this library. want to use a dictionary? import that library. want to add or delete items from your collection-like data type? do tedious method calls on objects created using those tediously imported libraries.

    meanwhile, in sensible languages, i'm trivially iterating over the members returned from the list comprehension i used to eliminate the irrelevant items from my collection. one line, no inherent method calls, perfectly succinct and - in any sensible language - perfectly readable. in java i already gave up long ago, because i had a real problem to solve that didn't involve learning the various APIs of umpteen jillion libraries, no matter how standard. it didn't have to involve butt-ugly syntax using method calls to do what should have been done with operators, either.

    creating basic structured data types and assigning them some initial data should be pretty much a one-liner. decent languages have built-in syntax to make this easy, natural, readable and even good-looking. it's a personal litmus test of languages for me; if creating a dictionary and populating it involves jumping through hoops, the language is too low-level and obtuse to bother with.

    i've used java. i have also, i will shamefully admit, studied COBOL. it's a toss-up which of the two is more verbose, and if java is any more powerful, it certainly doesn't present its power any more succinctly or aesthetically - java code just seems naturally butt ugly for some weird reason, to an extent that even COBOL doesn't necessarily approach. weird, that last, but true.

  • by cbare ( 313467 ) on Tuesday August 24, 2004 @04:42PM (#10060749) Homepage Journal
    Things that do suck about Java:
    • Difficult to do very simple OS specific stuff, like opening an html doc in the default browser.
    • Takes a long time to start up the VM. If your program is trivially simple, the overhead dominates over actaully running the program.
    • The Swing and AWT mess. It's gotten better, but I think Sun made some fundamental mistakes right at the beginning and they are unable to acknowledge these mistakes and unwilling to start over and do it right. They're a server and OS company. What do you expect.
    • It's a lot harder than it should be to call natively compiled code from a Java program. JNI is a pain in the ass compared to other languages.
    • EJBs.
    Things that don't suck about Java:
    • Ability to cleanly express object oriented software designs.
    • Speed. For applications suitable to the language, (for example high througput server-side apps) Java's speed is very good. For tasks not suitable for this kind of language, don't use it. Dont't write the 'ls' command in Java. Most of Java's reputation for slowness is based on people's experience with applets in 1996. Get some updated information.
    • Security. Most C programmers think that only crappy C programmers produce code containing buffer-overflow exploits and similar memory allocation bugs. Most C programs do, in fact, contain plenty of these types of bugs. Go figure.
    • Maintainability and readability. If that's not something you value, fine.
    • Javadoc. Every language should have something like javadoc. A standard something.
    • Garbage collection. Run-time optimization. Java's collection classes. Tomcat, Ant, JBoss, log4j, hibernate, JDO, aspectJ, JavaCC, eclipse, IntelliJ, this list could get really long.

    What really sucks is senseless language flame wars. If you're smart, (I mean really smart, not just self-agrandizing) it's a matter of choosing a good tool for the job. I would say the right tool, but there's often several good choices, as well as not-so-good choices.

    It's interesting to note that Perl and Lisp are a lot alike, not so much in the languages themselves, but in their community. Both feature an intensely loyal following of programmers willing to overlook truely bizarre syntax in exchange for the ability to implement some advanced programming language concepts cleanly and consicely. Both languages are similar in their retention of some very strange artifacts of history: cons, car, and cdr, for example, or the parts of perl adopted from shell scripting languages. Some members of both communities tend to be a little too convinced of their own superiority. But, both languages really do have some cool features.

    And remember: If Java is to Cobol what Python is to APL and if Perl is to Linux what Visual Basic is to Windows and James Gosling is to Larry Wall what Elvis is to Hank Williams Jr., can you doubt that we were made for each other?

  • by Superfluid Blob ( 798525 ) on Wednesday August 25, 2004 @02:47AM (#10065350) Homepage
    Enterprise-grade apps and "coolness" may be inapproriate bedfellows. Besides, does any language offer both?

    That'd be Erlang [erlang.org].

    The FA missed the point rather badly, IMO - what makes Java 'uncool' is its lack of support for abstraction. When a programmer finds himself doing the same thing again and again, his first thought is "can I abstract this pattern?". In Java, the answer is all too frequently "no", and the programmer is forced to type in several lines of code to express one conceptual construct.

    Sun's big mistake was in not separating the ideas of Java and the JVM more cleanly when marketing it - there are some very cool, hacker-friendly JVM languages (most notably Scala [scala.epfl.ch]), all of which share Java's virtue of "compile once, run anywhere", but which have got practically no mindshare.

  • by pjt33 ( 739471 ) on Wednesday August 25, 2004 @06:12AM (#10066086)
    If your solution to avoiding using CLASSPATH is to put everything into the Java extensions folder then you should be claiming that CLASSPATH isn't needed on any platform, because they all have an extensions directory. It is, however, a crap solution. It doesn't allow you to switch between different versions of a library unless you want to keep replacing a symlink. Moreover, unless you do your development in /Library/Java/Extensions (which is _really_ crap) it forces you to cd to the directory into which you compile before running anything.
  • by darkarena ( 808315 ) on Wednesday August 25, 2004 @09:21PM (#10074525) Homepage
    Being in the "OO Mentality" and observing OO Design are two different things. The real features of OO Design depend heavily on Polymorphism and Inheritance - something which modules or procedures do not. This is not to say that the modules themselves to not use objects, but don't mistake the consuming of libraries and functions in a C Program for OO programming.

    The difference between the systems in not so clear cut. It is true that JAVA programs (generally) have a larger startup time. The reason for this is NOT because of the Java language nor the byte code it generates, rather the extra startup time is because Java needs to run on Intel based machines using a Virtual Machine. This is both an advantage AND disadvantage to JAVA, one that a company (or programmer) would need to evaluate before choosing the language and Platform.

    Do NOT, however, mix this up with C# and Windows Programs. Like Linux, Windows is an Operating System. Debates aside, the usage of .NET and COM programs is a lot closer to what you would find in the Linux environments then what you would find in the Java Virtual Machine. Running Java on a NATIVE Java Machine, however, and you'll notice all of those startup delays disappear.

    The real truth here is scale. Bigger programs take longer to start up then smaller programs. In large implementations, the JVM start time becomes negligible. If start time is a consideration, then by all means writing code NATIVE to the machine will always have an advantage. JAVA, however, offers a WIDE variety of advantages over its older counterparts which, in my opinion, makes it a very strong competitor to other platforms.

    As far as calling Java Programs LARGE is not a fair assessment. Many of them are simply because Java makes it easier to implement large system then it's native counterparts. Furthermore, one of JAVA's biggest advantages - it's cross-platform compatibility - is typically needed most in large applications. Your analogy of starting up your laptop is a valid (albeit a bit exaggerated) assessment of JAVA, but it greatly oversimplifies your assessment of the language in general. Good OOPs do ONLY what they need to in a class and then return. Similar concepts exist in C++ and C#. Perhaps the Windows libraries are not as LEAN as they should be, but again the concept behind their ten millions dlls is the same as in Linux, to provide small tools that a master program can piece together.

With your bare hands?!?

Working...