There’s a thread kicking around today on the Django-user’s mailing list entitled Why I’m giving up on Django. It’s a good thread, with the expected sort of comments on it. I particularly liked Adrian’s immediate response – “Thanks, sorry it didn’t work for you.” Very professional.
The reason I mention the post is that the whole concept seemed to boil down to really just one point: “I wanted to use an opinionated framework, but it didn’t have the same opinions I did”. The author didn’t call suck, flames, or anything – just that it didn’t match him.
To a great extent, I think that when you decide to move into a Framework, YOU had better be willing to bend to it. That is, in fact, the whole reason for the framework – especially the ones that favor convention over configuration (Django, Rails, etc). But really, it’s any framework. I’ve seen the same thing with the Cocoa Objective-C API’s in Apple’s AppKit. You move with the waves, and you get some awesome surfing down. You move against them – and you’ll be swimming pretty darn hard.
I personally like the Django framework, even though there’s some places where I’d like to see things done differently. For the most part (the 95th percentile) it does or easily enables everything I need it to do. I also made a very specific effort when I learned the system to transform my habits into “their way of doing things”. It actually reminds me of learning math in elementary school – sure, there’s lots of ways to do the long division, but if you don’t do it the teacher’s way, you’re probably not going to get credit for it…
Making the framework easy to learn is really the key in my mind. Django does a decent job, Rails does (now) a wonderful job (mostly courtesy of the Pragmatic author’s) – other frameworks have better and worse ways of learning (I recommend Hillegass’ book for learning Cocoa, for example). But regardless of how easy or hard it is to learn, you should expect to learn, to bend, and to work with the framework.