Clojure 1.0 Released
groups.google.com
groups.google.com
What do the more seasoned Java-ers (Javites? Java-ists?) think will remain most relevant from Java-the-language and the existing environment?
Practically speaking, I think you'll need to be at least a competent Java programmer for the next few years if you don't plan on reimplementing a lot of bits that are in the extended Java stack.
If you can package your code up in a jar file, in a way that the "API" you want to export is easily callable from Java, then you can deploy to pretty much any platform and every other language on the JVM will be able to interact with your library. Beyond that, learn to read Javadoc well enough so that you can download an arbitrary jar file and call the classes and methods that you need from the language of your choice.
That should take you a pretty far.
"Java-ers (Javites? Java-ists?)"
We prefer "cubicle dwelling code monkeys." Or just "Blubbers."
However, if you need to interop with existing libraries or between languages (not specifically java language) then it is probably worthwhile at least understanding how interfaces work in java (and most languages would allow you to define them in their own language) - as that is often used at the edges of systems (and its also pretty simple).
Though rhickey said he worked on Clojure for a year+ before the first public release, and before Clojure he worked on two projects trying to integrate Common Lisp and Java (call Java from CL and vice versa). He said the difficulty of those projects lead him to write clojure.
For one, if the libraries are what's important, then just keep on with java. For another, so what if we get to use all these features, like coherent concurrency and stm? It seems to me that the use of one shitball java library could negate any value that Clojure brings to the table. So is it really the case that while java library interop is fully realized with Clojure, and this is a major selling point, for mission critical software we should not use java libraries that haven't been thoroughly scrutinized? I believe it is the case that there are libraries that are acceptable for use with more java, but their use will be discouraged if Clojure is thrown into the mix. Clojure just hasn't been around long enough to have to deal with these issues yet.
In a similar vein, this is something that has always bothered me about Ada. Why even have a version of Spark Ada that runs on windows, or any other OS that itself is not written in Spark Ada?
I wonder if Wirth was at all driven by this issue, because he always seemed to include a machine as part of the language he was developing at the time.
So is it the case that any advances to Lisp like Clojure require that we just accept these less coherent systems just to get some work done, even though it really would be preferable to have all the libraries you need on something like a Genera with concurrency and stm realized, even though we don't want to admit it? I'd like somebody to set me right on this point.
Java has a very restrictive and inflexible syntax. I'd rather have macros, first class functions, and all the other benefits of a Lisp, as well as being able to access Java libraries.
"It seems to me that the use of one shitball java library could negate any value that Clojure brings to the table."
You mean you could use a Java library that uses threads and has locking bugs?
Sure, that's a possibility, but I can't think of a language that doesn't have this problem. Even if the language itself is safe, there's usually a FFI.
"I believe it is the case that there are libraries that are acceptable for use with more java, but their use will be discouraged if Clojure is thrown into the mix."
Why do you believe this is the case? If a Java library suffers from race conditions in Clojure, it'll suffer from race conditions in Java as well.
A better question to ask would be "what language motivated Rich Hickey to create Clojure"; pick a more stable Lisp, learn the ropes, and come back to kickass on the JVM in a few months.
Learning Scheme just to read SICP (for instance) isn't necessary either. Since Clojure is a Lisp-1, it works well for the exercises in a Scheme-based book.
Scheme, along with Mozart/OZ are the perfect candidates for delivering programming skills without platform obstruction. Admittedly, it would take an specific implementation Scheme, a large and feature-rich one, to properly introduce someone to the real powers of Lisp.
Go thorough a series of complete Lisp systems, say MIT Scheme and CMUCL, and see what a complete Lisp system looks like.
Lisp is a language best "learned" furiously, through different dialects, implementations, extensions and library packages, and of course, thorough own implementation.
Clojure hasn't undergone the same vetting other dialects have gone thorough. Reading Common Lisp the Language (2nd Ed.) you will truly see what it takes to add a feature to a language and what it takes to remove it. 20+ people had to convince each other why something was worth keeping :-) And from there read the specs for ISLisp, EuLisp and and LeLisp. Schemes implementations have been a treasure trove of pure human genius: one implementation, T, has been responsible for so much it merits a year of your life just to read the associated literature and follow the heritage of this beautiful language.
Clojure has Rich Hickey's video, but none of it is, yet, time tested. A fine Lisp, no doubt, just not one for active learning.
I've been meaning to- and will, read PG's On Lisp. I saw the benefit in starting with Clojure being: the setup (basically nothing if you have a JVM installed) and the fact that applications created can be deployed in a JVM container- making it possible you any projects you'd like to host.
Your comment has inspired me to look into some of the schemes at least at the same time. Thanks.
www.dreamsongs.com/Files/HOPL2-Uncut.pdf
Once you know your Lisp, that paper will immerse you into the culture and history you need to become a bona fide Smug Lisp Weenie.
Lisp is not just a language, it's an ongoing and animated debate. Get your feet wet, get emacs and Slime, play around with all the dialects and implementations it supports, hack the good hack, send patches, ask for help, start a company, and welcome to the community! :-)
Now thats the first time I have heard a lisper say that.
I can see evidence that Clojure contributors have read it too, just the other day there was an example of an anaphoric macro posted on the mailing list. Very cool.
Is this just speculation, or are you basing it on observations?
I for once understood lisp with clojure and scheme 1 year ago. Now i can do Common lisp, but playing with clojure was much more enlightening. If you ask me why, i'd say that it's a mix between good timing (i had been reading about lisp since a lot of time) and the fact that it's motivating to learn on a new platform with access to a ton of libraries.
My advice though : Don't start with common lisp. Most of the ressources for learning it are really unclear (PCL included) Start with Scheme (lots of good newbie-oriented ressources), and then switch to clojure once you grasped the basics.
Would be interesting to see how a version in Clojure compares.