Just wanted to communicate how amazing it was to have two of the authors of The Reasoned Schemer (Dan Friedman, William Byrd) there this year. At the first Clojure/conj I was opening up its pages for the very first time. To find out that such a powerful computational model can be described in about ~200 lines of Scheme was a shocker. To find out that it is also efficient was just unbelievable. I'd been doing Clojure for two years already I don't think it really hit me what Lisp had to offer until I spent nearly 6 months understanding those mere 200 lines and reimplementing them in Clojure.
Having Dan and Will around to bounce ideas off at the Clojure/conj was simply incredible. One thing I've disliked about the miniKanren system is that many finite programs do not terminate depending on where the recursion occurs. Dan & Will have been working on that problem for 8 years.
Being the unprincipled fool that I am I decided to tackle this problem head on. Over the past weekend I implemented a version of miniKanren that not only terminates now for an incredible number of programs (it implements fair conjunction), but it does so without sacrificing miniKanren's excellent sequential performance when you so desire it.
So for me, yes modern programs should be written in Lisp. We don't even know what modern programs should look like yet :)
Yes core.logic is an implementation of miniKanren. Soon as Dan Friedman and William Byrd confirm my approach to fair conjunction is solid, I plan on integrating fairKanren to be followed by cKanren which will bring powerful constraint solving facilities into Clojure.
Super amused to see my work on clojure-refactoring mentioned there. I don't work on that anymore (nor do I think clojure is the right language for me these days).
I think clojure is close in some regards, but running on the JVM really hurts me these days (startup time really hurts TDD as I do it). I also think clojure has too much syntax (for a lisp), and am not convinced modern programs should be written in lisp any more (though that's hazy).
At the moment I use Ruby, which is much less frustrating than clojure ever was. (I seriously love the shit out of rspec).
Last but not least: stacktraces.
This isn't to say I think Ruby is better for all tasks etc, just that it fits where I am right now. Clojure is probably better for people with differing tastes to me.
Did you do Ruby prior to Clojure? It's interesting to see you making the jump to Ruby right as I'm heading down the opposite direction on the Polyglot Interstate.
I jumped on the Ruby ride in mid-2007 and the libraries lacked polish; Rails had performance issues, RSpec its hiccups, and Cucumber was quite a frustrating experience, yet there seemed to be so much potential there that I staid on.
Now Clojure seems to be going through similar evolution. Libraries and frameworks like Enlive, Pinot, and core.logic display immense promise but the full stack feels still a bit wobbly.
But it is as you say; different situations and people need different tools. I still do most of my web dev client work with Ruby but I'm itching to try out Clojure for more complex data processing and, when the libraries mature, full-stack web development.
EDIT: Oh, and I'm with you on the stack traces... Good thing there's an update due in Clojure 1.4.
I picked up Ruby just after I picked up Clojure (and well after I picked up lisp in general). I still dislike the ruby community's lack of maturity, but seem to be coping better with it these days. #lolbundler & rvm are still terrible compared to lein though, which often frustrates me a lot.
I use Ruby a lot and love it! But one should be fair and take into account that it has had much more time maturing. From what I can tell, it is plateauing right now. On a high level admittedly.
Instead of concluding that Clojure is not the right language, I'd rather say it is a niche language right now. With great potential to become an awesome mainstream, general purpose technology long-term. After all, it has some features and applications that Ruby will never get.
But is it fair at all to compare two languages with a different paradigm?
Having Dan and Will around to bounce ideas off at the Clojure/conj was simply incredible. One thing I've disliked about the miniKanren system is that many finite programs do not terminate depending on where the recursion occurs. Dan & Will have been working on that problem for 8 years.
Being the unprincipled fool that I am I decided to tackle this problem head on. Over the past weekend I implemented a version of miniKanren that not only terminates now for an incredible number of programs (it implements fair conjunction), but it does so without sacrificing miniKanren's excellent sequential performance when you so desire it.
So for me, yes modern programs should be written in Lisp. We don't even know what modern programs should look like yet :)