I changed my opinion about Lisp and Clojure
- watching this presentation about Concurrency, Persistent Data Structures and Managed References (Update: this presentation Erlang - software for a concurrent world is even more interesting and it explains why Transactional Memory has no future).
- reading Paul Graham's Beating the Average article (Update: it also doubtful, write about it later ...).
There are two things I didn't like in Lisp - prefix notation and lots of parenthesis, but, recently I found that prefix notation has some advantages over infix notation, and that the reason for those parenthesis is - Lisp has no syntax (I believe this is very important, it gives you the freedom and power to create any syntax you wish).
Some more advantages of Clojure:
- according to this benchmark Clojure is only 2 times slower than Java and ten times faster than Ruby.
- multi-core processors are the future (UPDATE: yes, but not with the Transactional Memory - the Clojure way of doing it, also see this presentation).
Maybe I'll take some time to learn it in more details.
- Game in Clojure http://briancarper.net/blog/520/making-an-rpg-in-clojure-part-one-of-many
- Game in Clojure HEX Tactics http://mikera.net/ironclad
After 3 days of examining Clojure I decided not to use it, because:
- It's too Java oriented, I mean - it's good to have JVM platform as a foundation, but I mean another thing - there are too many things from Java mindset - usage of bloated XML, proposing to use Java OO as OO and so on. A lots of people working with Clojure still thinking in Java terms, and they develop tools and libraries for Clojure with Java in mind, and carrying Java garbage into Clojure.
- Bloated syntax, Yes it's homoiconic and it's data and you can do whatever with it, but it's still very hard to read, I can't tolerate it.
- No good samples, especially web apps, everyone talks about flexibility of Clojure and its ability to represent any concept including OO. But those samples I've seen was not very impressive, actually I can do the same much better with RoR and CoffeeScript.
So, it's not the language of my choice, maybe later there will be some interesting OpenSource web app with clean and beautiful code and I'll change my mind.
As it turned out the Clojure way of doing concurrency (tightly coupled in one machine) is ok in short-term but wrong in long-term perspective see why, so it's not my choice, I'll probably try Erlang.