If you read Web Frameworks and Why Most of them Suck, you’ll know how I feel about most of the current offerings in the python web space.
I stand by everything I said there, but in what might seem like a complete contradiction I’ve switched to TurboGears from Twisted/Nevow/Axiom for general use in web apps.
This wasn’t a very easy decision, and I still think that technically Twisted/Nevow/Axiom is head and shoulders above every other web framework I’ve used. The problem I’ve found with it is that it’s just too difficult. I found it so when I started using it, and as much as this is made worse by lack of documentation, I think it is also fundamentally just difficult. This is not a Bad Thing in itself (in fact I think that is is a Good Thing - the difficulties it presents are mostly inherent in the problems it addresses*), but it does present practical issues.
I tried to get people working on one project using Twisted, and people just sidled away and looked at me like I was foaming at the mouth (to be fair I may have been foaming a bit at the time). Most of the design goals of Twisted deal with problems the majority of programmers don’t even understand, let alone appreciate as fundamental issues of architecture.
Ultimately if you abstract all the way up, the poor coder has to go all the way back down to something concrete, and the more you abstract the less obvious it is. I spent months banging my head against Twisted and in the process became a far better programmer, but I can’t reasonably expect everyone else to do that. They ought to, of course, but I can’t make them
So, I’m using TurboGears now, and have recruited two people for the project almost instantly. Progress is now being made, even if it’s in the wrong direction (or at least not quite the right one). We will now deliver a site, but I know we’re going to be bitten by all the normal grief of rotting code, impossible to debug concurrency issues and all the other stuff that comes from an architecture that is only good enough.
* and then there is the horrendous backwards coding you need to do to use deferreds in Python, because of the lack of anonymous blocks. That’s not inherent in the problem. This is being addressed in PEP343, and in a very nice way, but it’s not running code yet unfortunately.
Recent Comments