Six Years of Professional Clojure
One thing I don&#x27;t like about all articles on clojure is that basically all of them say: ah, it&#x27;s just like lisp with lists `(an (example of) (a list))` with vectors `[1 2 3]` thrown in. So easy!<p>But then you get to Clojure proper, and you run into additional syntax that either convention or functions&#x2F;macros that look like additional syntax.<p>Ok, granted, -&gt; and -&gt;&gt; are easy to reason about (though they look like additional syntax).<p>But then there&#x27;s entirely ungooglable ^ that I see in code from time to time. Or the convention (?) that call methods on Java code (?) with a `.-`<p>Or atoms defined with @ and dereferenced with *<p>Or the { :key value } structure<p>There&#x27;s way more syntax (or things that can be perceived as syntax, especially to beginners) in Clojure than the articles pretend there is.<p><pre><code>    (defn ^:export db_with [db entities]
      (d&#x2F;db-with db (entities-&gt;clj entities)))

    (defn entity-db
      &quot;Returns a db that entity was created from.&quot;
      [^Entity entity]
      {:pre [(de&#x2F;entity? entity)]}
      (.-db entity))

    (defn ^:after-load ^:export refresh []
      (let [mount (js&#x2F;document.querySelector &quot;.mount&quot;)
            comp  (if (editor.debug&#x2F;debug?)
                    (editor.debug&#x2F;ui editor)
                    (do
                      (when (nil? @*post)
                        (reset! *post (-&gt; (.getAttribute mount &quot;data&quot;) (edn&#x2F;read-string))))
                      (editor *post)))]
        (rum&#x2F;mount comp mount)))</code></pre>