Clojure reminds me of Tcl, I know its LISP and it should remind more of emacs. It reminds me of Tcl as I done a lot of Tcl programming using aolserver and OpenACS before. Unlike the first few times I used Ruby or Scala, where the first wow factor is the language. Tcl and Clojure the wow factor is getting to do something really quick. They both have quirky syntax, but simple and uniform.
Here is why I am learning Clojure:
- Learning a new languages makes me better at the languages I already know. Getting the nice feeling of being new, and learning a lot on the way... mistakes and aha moments.
- Still on my journey to be a better Functional Oriented hipster. Not that I am leaving Object Oriented or even procedural away, just learning a another way of thinking and solving computing issues.
- Getting my son to learn something. Clojure seems to have nice abstraction for sql, web and js. Start with 1 language will be less intimidating, instead of learning a lot in 1 bang.
As a newbie, I started with a framework first. I like get to know other people's opinion first before making my own. I picked Luminus as it seem to be using some of things that the clojure community is using. Here are some code snippets from bottom layer to top. Its simple and lacks any real world complications yet, learn the ropes on the basic things first.
Data using Korma
It starts with a macro for defining an entity and I would guess the convention to tie with the backing rdbms tables. Then you define some functions using Korma's sql dsl. You deal with primarily 2 data structure "id" which is a string and "product" which is a map.
Web using Ring and Compojure
The above is defining the routes, which you tie to the application handler. Real nice bits are the ability to define a context. Which would mean enclosing routes will start with that path first. Easy way to extract the request body from a key ":body-params", and to respond with body by setting the key ":body".
Finally the front end using Clojurescript, Gyr and Angular.js
Clojure is nice and simple (still on first impression). Gets you up and running quick. If its good for long big projects, I don't know yet. However I will be happy if I can meet 2 out of my 3 objectives in learning Clojure. Complete source code here for the curious.