Thanks Sean, wonderful input! On Nov 14, 2013, at 2:28 AM, Sean Johnson <belu...@acm.org> wrote:
> I'm a "Rails guy" who now uses Clojure for all new web development, so don't > take what I'm about to say as disagreeing with Justin. > > As someone with a foot firmly in both worlds, a couple of Justin's points > aren't really marks in Clojure's favor, at least compared to Ruby/Rails (I > can't say as much about Python/Django). I also have a few other benefits to > bring up that Justin didn't: > > Clojure provides execution efficiency that Ruby or Python cannot match. This > translates to lowered hosting costs. > > Agreed. This is a huge point. And not just in lowered hosting costs, but also > potentially a better user experience (lower latency). > > The lein tool provides very clean and isolated dependency management, that > makes setting up dev environments and deployment very straightforward. > > The pair of Bundler/rake does this very effectively for Ruby. > > Targeting the JVM means that each deploy can be a single jar or war file that > you upload to the server. > > True. Clojure offers potentially much simpler deployment schemes, but if this > is important to you, there's JRuby. > > The ring middleware system is a very clean way of including functionality in > an app. > > Rack is every bit as clean in the Ruby world. > > Working with immutable data structures and threadsafe bindings as a pervasive > default does a lot for stability, and rules out many of the round about ways > one of heisenbugs end up in the system. > > True, but this comes up less frequently than you might expect with the > typical web app. With the stateless nature of HTTP, and the MVC (of a sort) > convention of Rail/Django, typical web app code in these frameworks ends up > being more short lived, imperative, and object based in nature rather than > long running, object-oriented, and stateful. > > Here are several additional points to consider: > > Conciseness. Terseness. Or to put a more positive spin on it, expressiveness. > Idiomatic Clojure is more concise than idiomatic Ruby or Python. I find that > having 2x or less code to implement the same functionality to be very > refreshing and empowering. Big Rails/Django apps suffer entropy much faster > than comparable Clojure apps. > > Full-stack with ClojureScript. The ability to code all in one language, and > to share code between client and server, is quite nice compared to > Ruby/JavaScript, Ruby/CoffeeScript. It's one small reason node.js has gained > momentum so quickly. > > Neither Rails nor Django has a robust, mature threading story. Both achieve > concurrency primarily through many processes. This can eat through memory on > your hosts quickly as the footprint for Rails and Django themselves is not > small and is replicated in each process. This comes up as you end up serving > web requests to multiple processes to concurrently, and end up with a many > processes model for working background requests. This has gotten a bit better > in the Ruby/Rails world as Rails is now thread safe and so can be run > multithreaded in alternative Ruby implementations (other than MRI), and > Sidekiq has come on the scene for background work, and it leverages > Celluloid's actor implementation, borrowed from Erlang, to provide > multi-threaded Rails workers. Django has celery but I think that's still > process based like resque is in the Ruby world. Not positive, but I don't > think Django is threadsafe though. > > 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". > > The magic of meta-programming (Ruby) vs. magic of macros (Clojure) vs. no > magic (Python). This probably comes down to personal preference, and so is a > potential benefit of any of them, depending on your preference, but it's a > significant difference, so it's worth pointing out. By "magic" I just mean > when the system seems to be more doing something much more powerful than you > can readily see just by looking at the code. A simple few lines of code are > doing all these wondrous things that aren't spelled out completely in the > code (unless you peek under the covers and can understand the black arts that > lie there). In Ruby/Rails this is the result of a lot of metaprogramming > happening, based on conventions (that must be learned). In Clojure this > happens through macros that implement powerful DSLs. In Python, it doesn't > happen nearly as much. Code tends to be more transparent. > > I hope that was helpful. Good luck convincing your team Marcus! > > Cheers, > Sean > > [1] a robust set of immutable data structures, sequences and maps, and > conventions about how they are used in libraries are the uniformity of the > lego blocks that makes them snap together easily. With Ruby and Python you've > always had some of this with hashes and dicts and arrays, but they aren't > used as consistently in libraries, and you have a lot of custom objects in > libraries too, so you end up with a lot more library glue code. > > > On Wednesday, November 13, 2013 2:38:49 PM UTC-8, Marcus Blankenship wrote: > Hi Folks, > > We’re a Python / Django shop, and some folks are getting excited about using > Clojure for building web apps. Certainly there are numerous open-source > options to assist us (Pedastal, Ring, Compojure, Caribou, etc), but I think > it begs a larger question: as a rule, do web applications need the power that > Clojure brings to the table? > > Other folks on my team are telling me that solutions built with Python / > Django (or even RubyOnRails) fully satisfy the needs of 99% of the web apps > we have built, and that Clojure offers nothing new to this problem space. > > So, here’s the question: How are you are actually using Clojure, and why did > you choose to use it, particularly in the “web application” space? > > Thanks, > Marcus > > > > marcus blankenship > \\\ Partner, Problem Solver, Linear Thinker > \\\ 541.805.2736 \ @justzeros \ skype:marcuscreo > > > -- > -- > 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. marcus blankenship \\\ Partner, Problem Solver, Linear Thinker \\\ 541.805.2736 \ @justzeros \ skype:marcuscreo -- -- 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.