Magic sucks, Django Rocks
christopherroach.com
christopherroach.com
That's about how I feel now. I'm a relative newbie to Ruby and really like the language, even while aware of its warts and headaches as recent posts here illustrate.
I'm trying out Rails so that I understand it better from my own experience, rather than relying on other opinions. It is really quick to get from point 0 to point 1, but then after that, I find I have to dig in to the various parts because my intuition does not lead me to how Rails works, so I have to first understand the "Rails way" of a particular aspect, and then start digging into the source code to see how it works.
But one thing I'm really happy about with my experience learning Rails is getting a much better understanding of Representational State Transfer (REST). I ran into some roadblocks in figuring out routes, which led me to realize I didn't understand REST well enough, so I've been reading Roy Fielding's dissertation (focusing on the REST parts, but more I read, the more I'm inclined to consider it essential reading for web developers, or at least for me).
So I still want to get proficient at Rails and use it for my current web project, but I'm now more interested in trying out Django too, even if just for perspective.
In retrospect, it was a wall worth scaling. I have no fear of Rails meta-programming bugs, and I've developed strategies for dealing with the thorny issues that pop up every few months. All in all the FUD from the Java advocates has proven to be unfounded (the FUD from Haskell camp, not so much). The effort saved by eliminating reams of boilerplate and heavy IDEs is well worth a few less-obvious exceptions.
As Rails has matured I think the core team has exercised restraint, and the magic situation, while an integral part of the "Rails Way" is at least not getting too much worse. Plus work on Rails 3.0 is bringing real improvement to plugin-compatibility and modularity issues. That said, I'm glad I got in on Rails early and I'm looking forward to the next big thing already. When Rails came out it refreshingly plucked the best of 10 years of web development. Over time, as with all technologies it is getting bloated and ultimately will gain complexity as the developer base gains experience and needs to solve a greater and greater set of problems. Eventually someone will come along and distill all that experience into a much-simpler new framework (maybe ajax-based? maybe continuations-based ala Seaside?) that dumps the cruft of the current "best practices."
Unfortunately it seems the author has a crazy annoying blog like other Rails people. Oh well, at least he wrote a good book.
I now work with both professionally, and Django still feels a little more straightforward. The other side of this is that I occasionally find myself wishing for some aspect of Rails "magic" in Django projects.
I also think that the way Rails is implemented (and to a lesser degree, the Ruby language) takes a little more experience and learning to understand in a meaningful way.
I think this has a lot to do with the person. Ruby and Python are almost identical technically (relative to other popular languages). I personally found ruby a lot more intuitive, and I used python for a year or two before I tried ruby. I'm sure this is a statement about me, not ruby or python.
Seems to me the article can be summed up as "So, I tried Rails for a while but found I prefer Django's approach". Cool, and totally legitimate, but 39 votes? I mean, he doesn't even mention Twitter in the title! ;)
Nor Apple!
Whilst the languages are similar and fit almost the same problem domain, the philosophies behind them are almost opposite. People end up using the one that fits the way they think, because the language feels more intuitive/natural to you when it works the way your brain does.
If you like order, knowing exactly what's going on and knowing you're doing things the right way, you'll find yourself using Python. I think this is why it's gained such traction in the scientific community.
If you're happy with chaos, like to bend the rules and probably like to draw, you'll fall for Ruby.
It's not a zero sum game people. You can praise the things you like without having to deride the alternatives.
python = order and rightness
ruby = chaos
"It's not a zero sum game people. You can praise the things you like without having to deride the alternatives."
you seem to be contradicting your own argument.
What you are doesn't change the tone of the metaphor you used.
I wonder if this person knows the implementation details of the language he uses? Or the RDBMS he uses? What about the OS he uses? Text editor?
Heck even the transistors and Micro electronics concepts,
oh then Quantum Physics and Solid State Devices...
To understand anything completely, you need to understand, everything completely.
(It does definately have a deficiency of ponies)
Just type f12, after highlighting the content; or insert chart from contextual menu (right click)
This echoes perfectly my feelings about Rails. I have tried, several times, to do something with it, but I always hit some magical wall or mythical creature that demands something from me I really don't know what it is.
If I have to define the main difference between Rails and Django is that Rails is a DSL for building websites on RDBMSs. Django is a web framework for building web sites with RDBMSs. Django stuff is Python. Rails stuff is almost, but not quite, entirely unlike Ruby.
I really like Python and have the exact opposite opinion as you. That is, to me, Rails is very like Ruby and Django is unlike anything else done in Python. Django has hindered me every time I've tried to use it. By comparison, Cherrypy, storm-orm, SQLAlchemey, Mako, etc are all pretty straight forward. Django is out in left field for me.
Interesting. I would consider this an argument in favor of Rails.
Rails is a bad example of a Ruby project. It'll get much much better once Merb core is merged in and replaces the existing Rails 2 internals.
Libraries and frameworks are all about not knowing how they work behind the scenes. That's kind of the point.
I can look at most of the code in a Django project and imagine a basic implementation sitting behind it. And I can work off of those generalizations. I can't do that for Rails.
That's the point about DSLs and Magic -- you have no idea what could be going on behind the scenes, and it's harder to make a guess about why it might be going wrong.
And it's not really bias; I come from a generalist perspective. I worked in Python for about two years, and it's the same way as Ruby. Any library or language is going to require a lot of learning to really master. I floundered in Python until I broke down and basically read through the API reference front to back. And with regards to what's going on behind the scenes, I found Django no different than Rails. Perhaps a little more obfuscated with the way templates and the auto-admin work, but I didn't have as much interest in investigating it at the time.
But, whatever. YMMV, obviously. :)
Maybe if you're just a casual driver that's fine. What if you happen to be a race driver? What if you need to drive in snow, on ice, on sand, at high altitude? It's suddenly a good idea if you have some idea how the car actually works. What if your boss says to you, "We need you to drive 15% faster with 10% less gas", and you open the hood and there's just a big box there labelled "magic" that can't be opened?
People would almost think it is the Lisp of frameworks (which it is).
Pylons comes with “batteries included”. Its default setup with Mako, SqlAlchemy, Routes is quite good and I would say a Ruby-on-Rails for Pythoners.
And like RoR, you can fire up “paster shell” to get a nice console. But my best part - how you can set “import pdb;pdb.set_trace()” to start a debug session in a console.
I can wrap my fingers around pylons very nicely - and I like the fact that I can “hack” it if I ever wanted to.
For example, in order to support a large number of template engines, Pylons uses Buffet, another library which provides a common interface for these engines. Typically, however, you will only use a single template engine in your project and it only needs a few lines of code to set an engine up.
Although I do most of my web development in Django, when I do need more control or something a bit simpler I go with a Werkzeug + SQLAlchemy + Jinja stack (plus WTForms, similar to Django forms but in a standalone package). The code needed to get up and running isn't that much more than Pylons (and paster generates a whole lot of code anyway) and I can count the dependencies on one hand. That makes deployment a lot faster and easier, and it's just as easy to swap out these dependencies as with Pylons.
However, after working on a medium-sized Pylons project for a few months, I found that there was quite a bit of "glue" that I had to implement myself, the type of thing that's typically handled under the hood by other frameworks like Django.
Perhaps it was my own ignorance or drive for simplicity/elegance, but I wound up getting nervous about the lack of these standards, and I got pretty frustrated about constantly rolling my own architectural solutions with little more guidance than comments in bug reports and scattered blog posts.
That's not to bash on Pylons - I think it's incredibly powerful, and in comparison Django (or Rails) feels a little like moving from power tools to a Fisher Price toy. Regardless I think it's the established standards that make these more mainstream frameworks better choices (in a business sense) for banging out working products.
This was over a year ago, and I'm sure some things have improved, but looking back into that Pylons Cookbook still gives me the willies.