good fences and the frankenweb
Ian Bicking has some interesting notes about competing web development technologiesâmainly in response to some posts from Ivan Krystic. The discussion is definitely recommended, especially if you find yourself looking at web application frameworks for Python and Ruby. I found the pivot point of the discussion to be around a new term (for me) â the âfrankenwebâ.
My understanding is that like Frankenstein (a being created by stitching together random body parts from dead humans) the frankenweb is an unholy mixture of MVC components pulled from different projects, when put together result in an ugly partially functional whole. I think this characterization of Ianâs work is really unpleasant, but strangely compelling. I think that this is mainly because of Ianâs response:
The âFrankenwebâ is a feature, and it describes the web we have, the software we have, and the future that is inevitable. The world was never all J2EE, or ASP(.NET), or PHP, and it wonât be all Rails either.
I think Ian is right on about this: âfrankenwebâ does describe the web we have, and hopefully the web we will continue to haveâand the degree to which we can all interoperate is the degree to which the web will succeed. Perhaps Iâm seeing the frankenweb through Weinberger-Colored-Glasses, having just finished Small Pieces Loosely Joined (which I thoroughly enjoyed and plan to write about later if there is time). Weinberger does an excellent job of distilling the essence of the web, and how its architecture enabled it to pull itself up from itâs own bootstraps, grow and adapt:
In the real world, I canât just put in a door from my apartment to my neighborâs so that anyone can go through. But thatâs exactly how the web was built. Tim Berners-Lee orginally created the web so that scientists could link to the work of other scientists without having to ask their permission. If I put a page into the public Web, you can link to it without having to ask to do anything special, without asking me if itâs alright with me, and without even letting me know that youâve done itâŚThe web couldnât have been built if everyone had to ask permission first.
Of course Iâm conflating links between pages, and API links between software componentsâŚbut what Ian says about embracing the frankenweb seems to resonate with this somehow.
Itâs also quite disorienting to hear Ivan and others lauding tight coupling:
You donât see the Ruby on Rails guys modularizing Rails to the point of pain. You see them delivering a single, high-polish, tightly coupled product that does its job well.
Given the various pluggable modules that make up Rails I think âtightly coupledâ is largely an overstatement. Granted they are available in the same code base, and I havenât tried to use one of them in isolationâbut I imagine it could be done if someone wanted to say, use a activerecord model in a script or something. The Pragmatic Programmer has a really nice chapter on decoupling, and the authors are actually heavily involved in the Ruby/Rails community. The chapter starts out with a nice quote from Robert Frostâs poem The Mending Wall:
Good fences make good neighbors.
It seems to me that Ian is doing the hard work of patching some of these fences, and building a few and deserves a lot of credit for the effort and cat herding.