I've been taking a look at Clojure lately and I stumbled upon this post on Stackoverflow that indicates some projects following best practices, and overall good Clojure code. I wanted to get my head around the language after reading some basic tutorials so I took a look at some "real-world" projects.

After looking at ClojureScript and Compojure (two the the aforementioned "good" projects), I just feel like Clojure is a joke. I don't understand why someone would pick Clojure over say, Ruby or Python, two languages that I love and have such a clean syntax and are very easy to pick up whereas Clojure uses so much parenthesis and symbols everywhere that it ruins the readability for me.

I think that Ruby and Python are beautiful, readable and elegant. They are easy to read even for someone who does not know the language inside out. However, Clojure is opaque to me and I feel like I must know every tiny detail about the language implementation in order to be able to understand any code.

So please, enlighten me! 


What is so good about Clojure?
What is the absolute minimum that I should know about the language in order to appreciate it?


For the background you gave, if I may paraphrase:


You're familiar with Ruby/Python.
You don't see the advantages of Clojure yet.
You don't find either Lisp or Clojure syntax clear.


...I think the best answer is to read the book Clojure Programming by Emerick, Carper and Grand.  The book has numerous explicit code comparisons with Python, Ruby, and Java, and has text explanations addressing coders from those languages.  Personally, I came to Clojure after building good-sized projects w/ Python, and having some Lisp experience; reading that book helped convince me to start using Clojure not just in side-projects but for professional ends.

To address your two questions directly:


What's so good about Clojure? Plenty of answers on this site and elsewhere, e.g. see https://www.quora.com/Why-would-someone-learn-Clojure
What is the absolute minimum that I should know about the language in order to appreciate it?  I'd suggest knowing the big ideas behind Clojure's design, as articulated in both Clojure Programming and The Joy of Clojure books-wise, and in Rich Hickey's talks, esp. the talk Simple Made Easy.  Once you know the what/why you can then start understanding the how when reading Clojure code, esp. how to change your thinking from classes, objects, state/mutation to "just functions and data" (higher-order functions, maps/sets/sequences, types).  


Additional suggestions: Lisp's elegance and power is partly from its minimalist and utterly consistent syntax.  It's much easier to appreciate that with a good editor, e.g. Emacs with clojure-mode and ParEdit.  As you get more familiar with it, the syntax fades away and you'll "see" semantics, intentions, and concise abstractions.  Secondly, don't start by reading the source for ClojureScript or Compojure, those are too-much-at-once; try some 4clojure.org problems, and compare solutions with the top coders there.  If you see 4-6 other solutions, invariably someone will have written a truly idiomatic, succinct FP-style solution which you can compare with a clumsy, verbose, and needlessly complicated imperative-style solution.
