I have been working on a project based on repoze.bfg. BFG is a system for building web software and it has deep Zope roots.
(Incidentally, the BFG 9000 weapon in Doom and Quake is quite fun. For stress relief, it’s better to play against the computer rather than people on the Internet because the computer has no lag.)
With BFG, I feel like I’m reliving the Zope glory days. It’s the same kind of feeling I got at my last high school reunion. Getting to know those people again, digging up old memories, enjoying a nice banquet… but all the while something nagging me that I’ve moved on and it doesn’t make much sense to relive the past. What a shame–I like those people so much.
Now I’m more mature and I should not return to childish ways. Zope 2 was immature. Sure it was great to hack on, but we made a mess. I have grown up and moved on to Zope 3. The numerous abstractions in Zope 3 help me write software without making a mess to clean up later. That’s mature. That’s progress.
Abstract is better and more mature, so now I think I should write everything in a passive voice. Using a passive voice, I will increase the abstraction level of my communication, thereby making my communication more applicable to every possible situation.
It would be good to start a practice of passive speech now! To put off such an important aspect of maturity would be an unfortunate choice. It is believed that one can disavow nearly all responsibility for her or his ideas using communication with few verbs other than to be and its conjugations. Furthermore, a qualification of every statement tends to reduce the possibility of error. It is good to understand that abstraction is an improvement of the utility of words.
Now I need to go wash my fingers out with soap! I think I just wrote an ideal paragraph for a bad textbook.
I remember struggling with a textbook on logic years ago. In a communication class I took about the same time, I learned the difference between active and passive voices. One day, I noticed the author of the logic textbook had written virtually every sentence in a passive voice! Using the passive voice, he managed to present all of the material as indisputable concepts, never giving room for doubt. The passive voice allowed him to abdicate all responsibility for his words! Once that understanding dawned on me, I chose to simply distrust the entire book and treat it all as pure opinion. That choice cleared my mental block and I did very well in that class. Of course, I did not tell the teacher how I did it.
Soon after that experience, I came to realize why I had hated most of my high school history textbooks: they had also been written in a passive voice. I sensed the authors’ subtle deception, but could not explain my feelings well enough to complain. I tried hard to study those history books, but my head consistently nagged me to not trust them. I later found better textbooks and discovered that I really liked to learn history. The authors of the well-written books used an active voice that exposed refreshing uncertainty.
Something similar to my textbook experience happens in my head when I work with highly abstract software. When the software presents its abstractions to me as cold facts and concepts, that nagging feeling comes back and tells me to distrust all of it. I can work much better with software explained by authors who reveal their varying confidence levels.
That nagging feeling is frequently wrong, though. I fought the feeling of distrust as I learned the depths of ZODB, and now I’m very glad I did. I no longer distrust ZODB, because I now know its strengths and weaknesses. I think I could explain ZODB fairly well now. (I wonder if there are enough concepts in ZODB to fill a book.)
Now that I’ve written all that, I finally know what I want to say about BFG and Zope 3.
While Zope 3 is an industrial strength framework that has learned from a lot of experience, there are nonetheless parts of Zope 3 that bother me. Some of the abstractions make me cringe, but as I have tried to explain, my initial reactions to abstractions often turn out wrong. Once I work through the abstractions, I am often happy with them.
By contrast, I have found it very easy to trust BFG. I don’t know why exactly. I suspect the authors present it with humility and an active voice that reveals what they are uncertain about. BFG is built from pieces of Zope 3, but does not aspire to replace Zope 3. I feel an inkling of guilt for liking BFG because in some ways it’s a step back to Zope 2, but maybe we did some things better in Zope 2 after all. In particular, I am much happier with the BFG concept of object traversal than the multi-layered traversal abstractions in Zope 3.
By the way, now that we have a web framework named BFG, we should build something on it called “iddqd”. That would be awesome. Google it.