Combining a Rails like framework that makes things easy with a language who's idioms prioritize simplicity seems like a great combination.
The best of both worlds, in my opinion, is a loosely coupled set of opinionated tools and libraries, but that also has a tool that provides a unifying interface into the "golden path" for using those together to provide some functionality.
I think that's what makes Phoenix and Elixir so nice to use. The primitives Phoenix uses aren't too far from the surface, and the default setup is fairly batteries included without ruling out future growth.
You're paying the tax at some point, but if that's at the start of the project it might be high enough to stop it in its tracks. A mature Rails or Django project require abstracting configuration later on in development which is a different sort of tax.
Convention over configuration absolutely has it's perils. I've unfortunately (fortunately?) hit this enough times with Clojure, I know the ecosystem well-enough I'd personally pick composition for a personal project. In a team project where composition makes collaboration difficult (generally a communication and experience problem) I'd probably choose another language with an opinionated framework.
Any good HTTP/JSON/Crawler examples or libraries ?
I haven’t worked on this one much lately, but I’m happy to answer any questions!
We have several production grade libraries and frameworks for serving webpages. Reitit(router), yada(http standards), bidi(router), aleph (netty wrapper), ring (jetty wrapper), pedestal (bundle of libraries), luminus (self described micro-framework), the list goes on, yet Clojure's biggest pain point is the lack of other production grade libraries for other/mundane things.
If the libraries do exist, they can barely cut a stable release (like 2.0.0-alpha24) or keep up with changes to prevent software rot.
For example, things like clj-stripe, Matchbox(firebase lib) Onyx(MapReduce lib), and Cortex(ML lib) are all out of date.
One thing I see a lot from companies using Clojure(script) is they fork open source projects, extend them for their needs, and never contribute back.
Clojurescript libraries in particular are extremely bad for this. For example, re-frame-firebase has suffered some serious bit rot lately, the core repo uses firebase sdk 5.7, and hasn't ever really been used in a production setting!
Anyways, not trying to call out these library maintainers because I do understand maintaining libraries is time consuming. I'm trying to call out companies taking from the community and not giving back.
That said, I don't really have any good use case for it right now, whether at work, or among my side projects.
That said, you do need to actually use the repl and be repling all the time because the startup times suck and the stack traces are gigantic all the time. That's pretty much it for complaints. You would expect things that aren't apparent in 30 minutes looking at the language to come up after an entire year, but nothing so far.
Does it still do that? I remember "better error messages" being a supposedly-coming-soon thing for the couple years I was using it. I eventually got used to it but damn what a hostile experience. In retrospect I'm pretty surprised I stuck with it. For better or worse I don't have that same tolerance & resilience now.
[1] https://reagent-project.github.io/
If you care to share, i'd love to learn what you are building with it.
I have a bit of time now and I am diving in again and am more determined this time!
I got clojurescript going with react native, and having fun so far. If you need inspiration check out Rich Hickleys talks. He keeps me going through the hard times!
The first project we built together with it was called magehash, and it was an app to monitor websites for Magecart attacks (code injection stealing credit card data).
That project ended up not working out, but I’m using a lot of the lessons I learned with Sean at my new project (https://www.june.so) which is ironically a Rails app and we keep in touch on Twitter regularly
Turns out it's really hard to beat the productivity of rails
Any reason why this should be used instead of cooking up ring / hickup / whatever ?
I would say if you’re not new to clojure, roll your own.