Tuesday, March 24, 2015

What is my favourite Clojure IDE?

Choosing the right IDE is not easy :) This is an evergreen step you always meet when you start learning a new programming language.



I'm not a novice programmer, I have my favourite IDE and I would like very much to continue with that, but at the same time I completely ignore what I need, in terms of capabilities, features that are useful for Clojure.

After several years of experience in Java, I can say I know what I want from a (Java) IDE. I'm a big fan of Eclipse, I love the way it helps and assists me in writing code. In the past, I tried a lot of IDEs: Allaire Kawa (I know, I'm old), VisualCafè, JBuilder, Fortè, IBM Visual Age for Java, NetBeans, IntelliJ and finally Eclipse.

Although there was a time I was impressed by the power of the "refactoring"  capabilities of Intellij, I can say I always have been a faithful follower of Eclipse.

So, coming back to our topic, after a quick look at clojure.org, I decided to start trying these IDEs:
Nothing special motivated my choice: simply, they are the two IDEs I already know among all those provided in the "Getting started" page of the Clojure website. Later I will try also the other suggestions.

For Eclipse, things have been very easy because the Counterclockwise plugin  can be directly found in the Eclipse Marketplace...just a matter of a couple of clicks.

IntelliJ requires just a little additional step because Cursive is available in a software repository that is not included in the default list. I won't write here the instructions because the Cursive website has a good step-by-step guide.

Both of them seem good, but again, it's just a perception, so I will write code using both of them and in the meantime I will put a first entry in my sticky note:

  • TODO

    What is my favourite IDE for Clojure?

Friday, March 20, 2015

Why I started learning Clojure

I have (at least I think) a decent background in Object Oriented Programming and specifically in Java: I started in 2000, IBM Websphere ran with a damned JVM 1.1.8 and it had a slooow admin console written with Java Foundation Classes.

Now, after 15 years I don't feel myself an "expert" but just a passionate developer. This because everything changes too much frequently and in my opinion it's quite hard to become an "expert", especially if you changed, like me, several companies, growing your working experience in several and different fields.

I always thought the key factor that drove my developer path and my passion has been the curiosity. I was, I am and hopefully I will be curious, always.

In the last few years I started hearing about the functional paradigm and, in my free time, I started reading something about that....just reading, without trying to touch things with my hands, without doing something concrete.    

Having grown up (only) with Java I always had the regret of ignoring the outside world, other programming languages, other paradigms. So when I heard for the first time about Scala (I know, damnably late) I tried to take the plunge: the result was horrible...I'm not actually sure If that was a wrong time for doing that or if the excessive Object Oriented and Functional mix confused me...

I was not able to move away from "thinking in Java"... I felt Scala like a Java dialect and I could not reason in different terms. So after trying a bit, I realized I was still programming in Java, even if my source files had a different  suffix (from .java to .scala). Do you know the Chapman Stick?


It's a 10 (or 12) strings instrument that theoretically can be seen as the union of a bass and a guitar. But if you're a bassist (or a guitarist) and you try to play it with that perspective in mind, you won't never be able to actually understand its power, because it's not a guitar, it's not a bass, it's not a guitar and a bass: it is simply a new instrument, that has to be played with its own rules.

Now, coming back to our technicalities, I decided to stop (at the moment) with Scala, and I started looking for something effectively different from Java, but also something that, at the same time, could reuse libraries, utilities, framework and practical things I know about Java...and then I met Clojure: perfect, it runs on top of the JVM, it forces you to think in functional terms, it can use Java classes and libraries, it's popular and  there is a lot of documentation, tutorials, online resources, books...what else?

After reading a bit about it, I thought it was exactly what I was looking for...so, nothing, I decided to start this new path, with my usual curious approach.

Differently from the past, I also decided to annotate my progresses here in this blog, in order to track my activity, my doubts, my faults.