It just doesn't click with me and the whole leinengen\ring\compojure just seems weird and backhanded.
It just doesn't click with me and the whole leinengen\ring\compojure just seems weird and backhanded.
But if you want to see how to build a larger webapp, the Luminus project [1] is an excellent source of documentation for how to build web applications with Clojure. I would also recommend the r/clojure subreddit where many of the library authors hang out and help new users of Clojure. We often have a "New Users: Ask Us Anything" thread.
Mine was a backup purge scheduling tool that read a user's (admin user) CSV file for dictating backup retention rules and then did analysis on the Bacula system, ultimately generating a shell script that would delete the appropriate backups.
In some worlds that would be considered insignificant, but it was a real world problem with great risks (deleting the wrong backups can be really bad).
When it was done, I did a code review with different Ruby and Python colleagues. That's where the benefits really began to show - I could illustrate the simple rules, the facts and behaviors, and we were able to build upon those solid rules. People who didn't know Clojure and who had no exposure to Lisp could confidently agree that the behavior of the program was to spec.
That, for me, is the beauty of Clojure (or perhaps Lisp).
I found the concepts in Clojure attractive and elegant but the implementation to be lacking.
The toolchain is extremely heavyweight and any promised performance, scalability and development improvements just don't materialise.
Like you, I've only tried toy projects, but Clojures weight and lack of real (as opposed to promised) improvement never occurred for me.
Also, there seems to be constant discussions on the Clojure forums about the lack of performance.... and they all get resolved by admitting that you need to fallback to non-idiomatic Clojure (i.e. just doing it the Java way).
I once heard C described as learning programming in the constraint of time (e.g A happens first then B) where lisp executes in distance or space (e.g A happens over here and B happens over there). It's probably the best way to describe it but it does not click to somebody that is still thinking in time. It just seems weird and painful. Because you can't do things the way your brain thinks they should do them in the constrain of time.
It finally clicked for me when I build a simple file parser and I think that is a great project to use to understand a lisp.
Not sure this is the right way... I mean, everything will "click" if you do the same, e.g. VB6, but do you want this?
I think a lot more people would take on learning the language if the day 1 experience was more friendly. Simple tooling, simple install, simple error messages. Something more like Racket offers. Then the initial learning could be more focused on functional programming, and the syntax, which is more rewarding.
To be beginner friendly, it would be good to have a packaged installer that pre configures and installs everything, or a single Clojure/ProtoREPL package that could be installed in Atom that includes all the dependent packages, and config changes.
As others have pointed out, there are more 'beginner friendly' options it seems. But, these seem overlooked, and I can see beginners not even being aware they exist.
If Clojure wants to see more mainstream success, the community is going to have to provide people with the things they want. Emacs is fantastic (I use it everyday) and I believe it is the best way to write Clojure, but the learning curve of Emacs + Clojure + Java is too great. Cleaning up the Java Stack Traces (I believe there are several projects that try to do this) in Clojure Core would also help with this.
When one needs to look under the hood to solve performance or FFI issues, it is a requirement to know the "systems" language of the host platform, regardless how much we might love/hate it.
compojure-api will get you going, and you can sort of back in to a fuller understanding of compojure and ring, which I agree is a bit confusing -- hard to know which of the zillion ring plugins to use, and where.