Sunday, 8 January 2017

What Clojure is missing...

Ok, now I have played with Clojure for a lot of time.
I know how to write clojure programs, how to write in a functional style (on a base-medium level).
What is my main work, what kind of applications I build for my company... Web Applications, batch programs for some heavy computations. Our main application is built with Grails, and I can't say that I'm am so found on Grails..... buuut ....
Lately I built a web app to handle the deployment through Docker of our Web Application and I was thinking about using Clojure.
This is how the discussion went (more or less):
Marco: "I would like to use Clojure, is great, it gives immediate feedback and I would like to try because I feel I can do a good job"
Other People (in this company before starting we discuss pro and contro of every decision):
"Mmm I heard of it.. yes it can be an idea, but what are you going to use, what is the standard. Let's say that you start the application and then you have to move on another project, what should we start learning to be able to take over"
Marco: "Well I was thinking of using Luminus, it's quite well documented and it has already been used in production from what I know"
Others: "Ok, how are you going to divide the project? There are conventions like in Grails or Play Framework? You know is easier for new guys to join in a project if there are some standard rules"
Marco: "Mmm no there are some standard rules, I will organize the namespaces in the best way to be readable and easy for people to join in"
etc...

Unfortunately after this sentence I was not able to convince anymore my co-workers... and that's the reason for my post.
Grails, Spring Framework, Play Framework (Scala ..... one of the hardest language I ever studied) are standards that can be used in big companies. People that join the company and start work on the projects feels at home if they have already used them, for example in Grails they know that there will be a Controller, and then a Business Logic or a Model, but more or less they know how things will go, and will have the ability to join in the effort quite fast and without tutoring (or very less tutoring) because the documentation is really huge, and the approach Convention Over Configuration really help in this situation.
Clojure is missing a good framework with Convention Over Configuration, that explain also how to organize namespaces and that "force" developers that use it in a direction that is well documented and that can be easily grasp by new developers that join the project.
I have seen a lot of Clojure applications, and all of them have a very different approach in solving the problem that they face. If I have to start working on any of them, I fear I will need a lot of help to be productive.
It's true, I'm a Clojure and functional programmer Noob. But also when I will be a Pro Clojure programmer, my main concern will be, Clojure Noobs will soon join me, I want to easy their life, I want them to be productive.
I will continue my travel to become a Pro Clojure programmer, with this in mind, I have to create something that will give me the ability to reply to my co-workers:
"Yes this is the standard way to do things and can be easily learn from new people, this is the "Spring" framework of Clojure"
With something that set the standards on how to do Web Applications in Clojure, I'm sure this fantastic language will take more hype and attention in the future.

What is your idea? Have I missed a "De Facto" Standard guideline that explain how to write Web Apps in Clojure using a design model that is universally approved? I hope that the Arachne Framework will fix this issue but until documentation will be available I will not have a clue...

No comments:

Post a Comment