On Thursday, November 14, 2013 2:28:51 AM UTC-8, Sean Johnson wrote:
>
> Framework vs. ecosystem of interoperable libraries. The monolithic 
> framework (see Rails and Django) is not the way web development is done in 
> Clojure. Instead imagine the Clojure world as a set of legos. You get to 
> build whatever you want with your legos, selecting just the blocks you 
> need, in the colors and sizes you want, and they all snap together [1]. The 
> benefit to this approach is simplicity. There is a LOT to know about the 
> Rails and Django frameworks, as they are big, mature things that have grown 
> to solve all the common web development needs, and you start your 
> development with ALL of that framework. Your starting point with Clojure on 
> the other hand is much simpler. It will seem too simple... at first you'll 
> be wondering... where is all the "stuff"? You start with maybe just ring 
> and compojure (web middleware and routing) and a few lines of your code and 
> your first couple of stories are already complete. You add libraries as you 
> find you need them as you build out your app over time, but at all times 
> your app is as simple as it can be, and only has the "stuff" it needs. It's 
> therefore much easier to understand and less a "big ball of mud".
>

I don't believe the legos analogy is very accurate for clojure. Or, rather, 
it's more of a vision than a reality. I'm unaware of any libraries in 
clojure that you can piece together to give you the features of 
django-south, django admin, and the forms/validation/db layers, for 
example.  Today, clojure web libraries are more like an auto parts store: 
your chance of putting together a complete car from the inventory is slim 
indeed, and your chance of doing it in a timely fashion is exactly zero. 
 There are about a dozen migration libraries for clojure, for example, but 
none of them integrate very well with the other libraries because there 
isn't much in the way of a data modeling framework for the different 
components to leverage. Also, I don't think any of them provide the 
simplicity of south, where your data model is declared in one place (rather 
than in a sequence of sql commands that you have to interpret to deduce the 
final data model), and migrations are derived from changes in the data 
model.

The putting of things together is the hard part of software engineering. This 
makes a huge difference in development time.  Clean algorithms are easy in 
comparison. Rich talks about the importance of taking things apart, but you 
can't take things apart that never fit together in the first place. IIRC he 
actually suggested that one take things apart such that they fit together 
again. I agree with this, but I don't think it describes much of clojure 
web tooling today.

Also, the overwhelming majority of db and web work is boilerplate. That's 
what django provides: all the mindless boilerplate that is completely 
uninteresting to your problem domain, but necessary to launch a web site. 
With the current clojure web tools, there is no solution for most of that 
boilerplate, which can easily add an order of magnitude to your development 
time.

And again, I will have to reevaluate all of this in light of caribou, which 
appears to address much of it. Also, I'd be very happy to hear that I'm 
wrong, if anyone has example projects to show, or libraries I've missed.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to