3 ms·
The part of Java that I hate is having to read a whole lot of documentation about features and libraries that I do not want to use, and will strive not to use,
by mechanical_fish 16y ago
The part of Java that I hate is having to read a whole lot of documentation about features and libraries that I do not want to use, and will strive not to use, and that I may not even have to use, and that the best critics agree are ugly as sin and overdesigned and counterproductive, but which I still need to understand because they're the standards.
I don't want "alternatives" to Ant and Maven and Swing. I do not want to have to know what Ant, Maven, or Swing are. If they are so terrible why are they still around? Can't we throw them away?
Well, no. We can't. Java is mature. You cannot throw anything away because existing libraries and codebases have dependencies on the old stuff. And you cannot throw away the existing libraries and codebases because they are why you are using Java in the first place; the language's maturity is its strength, perhaps its only remaining strength now that other languages are targeting the JVM. So you can only bolt more stuff on. Which just makes the whole edifice even larger.
If Clojure is forever tied to Java then I don't think it will ever be friendly for newbs, because I don't think Java is very friendly for newbs. ;) And if Clojure is nearly independent of Java -- and some of the comments here give me renewed hope that this is the case -- my advice would be to forget about advertising it to newbs for the time being. Get the Java out. Get it all out. Until you can write a book, akin to the Pickaxe book for Ruby, which teaches a newbie programmer all about Clojure and never mentions Java at all. Then sell me that book.
- fauigerzigerk 16y agoI share your sentiment to a degree, but you could say something similar about Python and its C/Unix roots. Not everything in the Python API is pretty or consistent and throwing everything out once in a while definately has advantages. But it also means you're losing a huge potential constituency. More importantly, the constituency loses a potential language. Some people must be compatible with the enterprise to do their work but don't want to use Java the language. In any event, there are things that could and should simply be scrapped. I dont' see why maven is an integral part of the Java platform for instance. Maven is actually a very depressing example because it shows that the complexity culture of Java isn't limited to the bureaucratic enterprise types who gave us J2EE.
- edu 16y agoJust that the philosophy behind Java and Posix (or as you say C/Unix roots) are completely different.
- mechanical_fish 16y agoAfter venting my spleen, above, I tried to figure out why I don't have the same reaction to POSIX that I have to Java. Part of it is that Unix has a rather different philosophy. Part of it is that Unix seems to be better designed. But I think the deeper answer is: I'm ready and waiting to develop an allergy to POSIX, if and when a pragmatic alternative appears. There is plenty of fuel for its funeral pyre: Where do you think I honed my own platform-griping skills? By reading The Unix Haters Handbook, which is really old by now. But the difference between Java and Unix is that there are alternatives to Java. I'm sufficiently pragmatic that, if compelled to solve a problem with nothing but a roll of barbed wire, I'll learn all about barbed wire. And if I didn't have alternative means to solve my problems I'd probably try to love Java as well.
- jurjenh 16y agoClojure-in-clojure will get rid of a lot of the java stuff. However, in the end you'll be tied to some platform if you want to use non-clojure-native libraries like swing or jetty. There is of course Clojure CLR http://wiki.github.com/richhickey/clojure-clr/ http://wiki.github.com/richhickey/clojure-clr/ which is clojure but on the CLR. And there are fundamental differences due to the underlying types (but this should change with clojure-in-clojure) and you're dealing with .net interop instead of java. But the fundamental issue you bring up is that you can't do a production-ready tour based purely on clojure, and some of that is most likely due to the pragmatic nature of clojure - why write a complete web server when you can just provide a wrapper for jetty? I do think these will come in time, but they haven't had the chance to be as battle-tested as the java equivalents...
- brown9-2 16y agoThe part of Java that I hate is having to read a whole lot of documentation about features and libraries that I do not want to use, and will strive not to use, and that I may not even have to use, and that the best critics agree are ugly as sin and overdesigned and counterproductive, but which I still need to understand because they're the standards. Which Java features and libraries do you need to learn how to use (even if you never need to use them) to get started in Clojure? I ask this as someone who is completely unfamiliar with Clojure, not to be snarky. But from everything I've read, it has always sounded to me like you could get started in Clojure without knowing anything more about the Java environment other than the fact that your code is running of a JVM.
- dedward 16y agoThat's a great question, and one that it's hard to find a clear answer to - and it's exactly the kind of thing that deters n00b programmers from jumping on the language. I want to learn clojure, I don't really grok Java, and I'm not sure where to start - I don't have a clear explanation of how my clojure project fits into the JVM and how to build everything. I wish examples would start without the repl, and instead write a simple "Hello world", turn it into a jar, and then expand on that, and then introduce the concept of the repl for iterative programming. A clear explanation of where Clojure libraries sit in relation to Java libraries would help too.....
- devonrt 16y agoTo get started with Clojure you need to know much about the Java platform. The first parts of Java that you will brush up against are classpaths and dot-separated namespaces and I don't think these are overly difficult to understand. clojure.core and clojure.contrib expose most of the Java standard libraries in a Clojure-esque way.