<story><title>Why Clojure?</title><url>http://thecleancoder.blogspot.com/2010/08/why-clojure.html</url><text></text></story><parent_chain></parent_chain><comment><author>Raphael_Amiard</author><text>Î really love clojure, but this article is &lt;i&gt;not&lt;/i&gt; a good plaidoyer, for a lots of reasons, the first and most pregnant  being the ability of the author to vastly traverse subject he is probably not an expert about.&lt;p&gt;&amp;#62; Functional programming, of the kind shown in SICP, is a way to write code that does not manage the state of variables, and could therefore be partitioned to run in parallel on as many processors as you like&lt;p&gt;This is kind of true, but totally misleading, because very few tasks are actually easily paralelizable this way. When you stumble on one, you know it, and replacing map with pmap certainly &lt;i&gt;is&lt;/i&gt; a joyful exercise, but this kind of parallelization are easy to do in &lt;i&gt;&lt;/i&gt;any&lt;i&gt;&lt;/i&gt; languages. The hard parts are those when you need to access shared state across threads. The facilities that clojure provide in this respect, while innovative and enlightening , have benefits that largely remain to be proven.&lt;p&gt;&amp;#62; languages like F# and Scala which have a complexity and &quot;quirkiness&quot; reminiscent of C++&lt;p&gt;Erm, sorry, what, F# reminiscent of C++, did you even try to read some code written in F# ? F# has one of the tersest syntax you&apos;re likely to find in any language. As an ML descendant it does already have a very clean syntax, and the addition of significant whitespace only adds to that.&lt;p&gt;&amp;#62; You can write Clojure code that derives from Java classes and overrides Java methods.  In short, if you can do it in Java, you can do it in Clojure.&lt;p&gt;Yeah sure, but in practice, most people that says that didn&apos;t ever had to &lt;i&gt;really&lt;/i&gt; handle a non trivial project with java interaction in it. I did. And frankly it can get ugly. It&apos;s good to have it, but ideally, all should be encapsulated in idiomatic clojure wrappers. While this is not that hard because java interaction is very well thought, it&apos;s a long and boring process, and when you&apos;re in the middle of a project and just needs some bit of functionnality that isn&apos;t in a clojure lib (and trust me there are still a lot of those), you tend to just use the java interop in place. And then you get back and read your code, and you cry.&lt;p&gt;In short, this is just a rehashing of what you usually hear about clojure, but with no insight of real use. My (uninformed) guess, is that the author probably didn&apos;t use clojure a lot, and frankly, this kind of stereotyped talk gets old.</text></comment>
<story><title>Why Clojure?</title><url>http://thecleancoder.blogspot.com/2010/08/why-clojure.html</url><text></text></story><parent_chain></parent_chain><comment><author>cageface</author><text>You know, I really &lt;i&gt;want&lt;/i&gt; to like Clojure, but so far I&apos;m finding it a bit of a slog, for the following reasons:&lt;p&gt;1. stack traces are very hard to decipher&lt;p&gt;2. ubiquitous laziness can lead to some really subtle bugs&lt;p&gt;3. the syntax can be extremely obtuse, moreso than other lisps&lt;p&gt;4. the basic ADT is just a keyed map, which provides a lot of flexibility but also can make data modeling very opaque, even compared to other dynamic languages&lt;p&gt;5. immutable and recursive as a default takes a lot of getting used to. things I could dash out in minutes in ruby take me hours sometimes&lt;p&gt;6. other languages have caught up enough that Lisp macros are not as game changing as they might have been ten years ago&lt;p&gt;I embarked on a project recently to explore machine learning algorithms, implementing them in both Scala and Clojure at the same time. I expected this to be an easy win for Clojure but, to my surprise, I&apos;m &lt;i&gt;much&lt;/i&gt; more productive in Scala, my code has fewer bugs, and I can refactor it much more aggressively. I realize that this isn&apos;t an either/or thing and it may be entirely my shortcomings at play here, but my instinct is that although Clojure is a superb lisp, it&apos;s still a lisp, and it&apos;s going to be a niche that most programmers won&apos;t choose to occupy.</text></comment>