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?"
How about (Score:5, Insightful)
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)
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)
This is news?
COBOL (Score:5, Insightful)
Too verbose (Score:4, Insightful)
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.
Why, Python, of course. (Score:1, Insightful)
-russ
Re:Maybe because it's slow ? (Score:1, Insightful)
Who cares? (Score:5, Insightful)
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)
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)
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
Or try Bison...
who gives a shit about paul graham? (Score:2, Insightful)
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.
Why is Java UnCool? (Score:5, Insightful)
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.
Re:Maybe because it's slow ? (Score:1, Insightful)
Oh come on (Score:5, Insightful)
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)
I think the guy needs to learn something about modern programming languages before sitting down to write...
Classloading, not VM startup is slow (Score:2, Insightful)
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.
Why Java is popular (Score:3, Insightful)
Java is used a lot these days. There are three main reasons, in my view, why it became so popular:
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"?
Re:Making an interface (Score:2, Insightful)
(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)
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)
Re:Also Speed (Score:4, Insightful)
Java is optimized
string handling (Score:3, Insightful)
Strongly typed... (Score:3, Insightful)
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'.
Maybe it's because... (Score:5, Insightful)
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].
Re:who cares what he says? (Score:5, Insightful)
That's right, he used LISP.
First Impressions, then second (Score:4, Insightful)
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)
Go write me an OS in Java (Score:2, Insightful)
Java's problem is Sun's mismanagement (Score:5, Insightful)
Sun has let the technology stagnate while Microsoft has caught up (and IMHO surpassed) Java with their
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.
Re:Paul Graham isn't Cool, Duh. (Score:2, Insightful)
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)
Re:Well... (Score:4, Insightful)
you never did device drivers or realtime systems, did you?
Re:resentment (Score:2, Insightful)
Re:Maybe because it's slow ? (Score:4, Insightful)
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)
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)
Re:Maybe because it's slow ? (Score:2, Insightful)
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)
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)
Re:Well... (Score:5, Insightful)
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.
Re:What is this responding to.. exactly? (Score:5, Insightful)
Lack of Flexibility (Why *I* don't like java) (Score:3, Insightful)
If this is too abstract for you, consider the following C code for a simple command-line interface:
struct command_t{
};struct command_t commands[]={ };
void run_command(char *comm){
}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.
Re:Maybe because it's slow ? (Score:2, Insightful)
Server-side scalability means pooling, caches, lots of things that imply resource sharing. This means some form of synchronisation, whatever the implementation language.
Re:Why is Java Considered Un-Cool? (Score:5, Insightful)
Hey, I *like* java, but this kind of crap is definitely shooting yourself in the foot [noncorporeal.com] material.
Re:Maybe because it's slow ? (Score:3, Insightful)
Are your apps constantly restarting? (Score:3, Insightful)
Re:Uncool to me (Score:3, Insightful)
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)
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)
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.
Parent iInsightful? WTF? (Score:1, Insightful)
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)
Anybody know why they decided to make it so you can't just put all
Re:who cares what he says? (Score:2, Insightful)
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)
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
Re:who gives a shit about paul graham? (Score:4, Insightful)
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
You've all got it wrong... (Score:1, Insightful)
Re:Paul Graham isn't Cool, Duh. (Score:4, Insightful)
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?
Re:Totally mis-informed (Score:4, Insightful)
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?)
Re:Why is Java UnCool? (Score:5, Insightful)
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.
Re:Java is unpractical!!! (Score:2, Insightful)
Sounds like an ID:10-T error to me...
Re:Why, Python, of course. (Score:5, Insightful)
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)
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.
Re:Debunking Pro-Java Myths (Score:5, Insightful)
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.
The Pragmatic Program Inverse Theory (Score:2, Insightful)
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)
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)
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.
Re:What is this responding to.. exactly? (Score:5, Insightful)
Hey, waitaminute, who let the *managers* choose?
"Fred, here's a saw. Go pound some nails in."
Re:Why is Java Considered Un-Cool? (Score:5, Insightful)
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)
I'll believe that when I see it.
Re:COBOL (Score:2, Insightful)
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.
Re:Maybe because it's slow ? (Score:2, Insightful)
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.
Why am I still hearing this? (Score:5, Insightful)
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
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
Re:Java pays!!! (Score:2, Insightful)
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
Whether this is cool or not depends on the observer.
because your boss likes it. (Score:3, Insightful)
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)
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)
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)
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)
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...
That was just a thoughtless statement (Score:1, Insightful)
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.
Java still playing catch up with Smalltalk (Score:5, Insightful)
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:
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)
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)
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)
I'm ok with people using ads to substidize content, but there are like 30 sponsored links surrounding the article.
Re:Paul Graham isn't Cool, Duh. (Score:5, Insightful)
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)
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)
Re:Maybe it's because... (Score:2, Insightful)
Look to C, Assembly, and (but deceasingly) Ada for the multi-billion dollar projects
Re:Why is Java Considered Un-Cool? (Score:3, Insightful)
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.
Java doesn't play nice with other children (Score:2, Insightful)
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
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.
Re:Maybe because it's slow ? (Score:5, Insightful)
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
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?
#1 reason java is uncool.... (Score:3, Insightful)
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
Re:What is this responding to.. exactly? (Score:5, Insightful)
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.
Re:Maybe because it's slow ? (Score:3, Insightful)
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)
Re:What is a 'real progamer'? (Score:1, Insightful)
Re:Maybe because it's slow ? (Score:5, Insightful)
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)
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.
Re:What is this responding to.. exactly? (Score:3, Insightful)
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.
Re:Why is Java Considered Un-Cool? (Score:5, Insightful)
Re:Why is Java Considered Un-Cool? (Score:4, Insightful)
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.
Re:Why am I still hearing this? (Score:3, Insightful)
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
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)
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.
Re:What is this responding to.. exactly? (Score:3, Insightful)
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.
Re:Masses? hat Masses? (Score:3, Insightful)
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)
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.
Re:Words from a programmer rather than a end user (Score:3, Insightful)
Some of the things in your list are valid gripes, but there are a few that I don't agree with. For example:
Re:Why I Dislike Java (Score:5, Insightful)
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)
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.
Uncool! I must not have gotten that memo. (Score:3, Insightful)
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...
Re:Words from a programmer rather than a end user (Score:4, Insightful)
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 ..) 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.
Exception handling is a marvelous feature once you realize that from every situation there may be more than one (or two,
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.
Re:Lack of Flexibility (Why *I* don't like java) (Score:5, Insightful)
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.
Re:What is this responding to.. exactly? (Score:3, Insightful)
Re:Well... (Score:-1, Insightful)
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.
Because Java Programms are lousy C++ Programmers (Score:2, Insightful)
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:
HaraldRe:What is this responding to.. exactly? (Score:3, Insightful)
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)
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.
Ever encounter LD_LIBRARY_PATH? (Score:3, Insightful)
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.
Re:Are your apps constantly restarting? (Score:5, Insightful)
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)
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)
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.
"Real Hackers" usually aren't (Score:1, Insightful)
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
Re:What is this responding to.. exactly? (Score:2, Insightful)
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.
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)
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.
Re:Why is Java Considered Un-Cool? (Score:3, Insightful)
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: 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.
Re:Why I Dislike Java (Score:3, Insightful)
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.
Re:Maybe because it's slow ? (Score:3, Insightful)
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").
Re:Because it is a limiting language (Score:5, Insightful)
First you say: 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: This is an implicit downcast: It compiles perfectly and works as expected.
The last line of this: 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)
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)
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)
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.
Re:Paul Graham isn't Cool, Duh. (Score:3, Insightful)
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?
Re:What is this responding to.. exactly? (Score:5, Insightful)
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
Re:Maybe because it's slow ? (Score:3, Insightful)
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)
Re:This is mostly babble. (Score:3, Insightful)
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)
In all my years (Score:3, Insightful)
Re:What is this responding to.. exactly? (Score:4, Insightful)
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)
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.
Java is not more portable (Score:1, Insightful)
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)
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)
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.
Re:Maybe because it's slow ? (Score:3, Insightful)
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)
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.
I AM A POINTY HAIRED BOSS, AND.... (Score:2, Insightful)
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)
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
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
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.
Re:What is this responding to.. exactly? (Score:1, Insightful)
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.
Things that suck about Java and things that don't (Score:3, Insightful)
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?
Coolness == Abstraction (Score:2, Insightful)
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.
Re:Why is Java Considered Un-Cool? (Score:3, Insightful)
Re:Are your apps constantly restarting? (Score:2, Insightful)
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.