I've been attending OOPSLA for over a decade. It's become the place where I catch up with lots of friends and find out what they've been doing lately, and try to get a sense of where the OO community is going.

Before the beginning of the conference proper I attended a workshop on reappraising the GoF book, ten years after it came out. While the book is still essential reading for anyone in the OO space, there's much that could be done to modernize it (although sadly it appears that probably won't happen - at least by the GoF themselves).

We did a number of discussions around the what next theme, perhaps the most interesting one to report was an exercise in considering some to 'vote off the island'. People voted on the patterns to indicate which ones they felt needed deletion in the current form.

Four patterns were voted off. Factory Method (due to the confusion over what it means - the pattern is different to the more common usage of the term), Bridge, Flyweight, and Interpreter. Two patterns, Singleton and Chain of Responsibility, were split decisions.

I found the votes and discussions interesting. Of course it's hard to really consider this without looking at alternatives. I was surprised that Singleton got away with a split decision, considering how unpopular it's become amongst my friends. Most of the others were voted off because people felt they were sufficiently uncommon and that other patterns would probably take their place, sadly we didn't have time to consider new members.

Eclipse had a party (continuing the tradition of OTI and IBM) on Sunday night. However the room was far too small and so the only way you could enjoy it was to have roll under a steam roller first.

The opening keynote was by Rick Rashid of Microsoft Research. It was widely criticized because after a period of mildly interesting stuff from the labs, it launched into a product announcement that rapidly became a typical vapid product demo. I left after being treated to boxes being resized and put into groups - only to be told off by some friends for not walking out earlier. Among the most annoyed were the people from Microsoft who were very embarrassed at what they agreed was an inappropriate product pitch. I guess it's hard enough being the butt of everyone's jokes without this adding to it.

Being the supporting executive that I would like to be, I planned to attend my colleagues session on mock objects. But that plan was abandoned when I realized it clashed with NoNoPoMo - Notes on Notes on Postmodern Programming, the latest of the PoMo talks from Robert Biddle and James Noble. I caught their original Notes on PostModern Programming talk two years ago and usually describe it as academic speculation masquerading as performance art. This version continued the entertaining performance art thread but continued with drawing the links to how we think about building software. I'd seen James do his talk on the lego hypothesis at JAOO and this talk helped develop much of this theme.

My summary of the PoMo position is that programming has grown up the modern age, which has an underlying assumption of a grand narrative of progress and a liking for composing large structures out of smaller but similar structures to provide a unifying and coherent picture. But the notions of the modern age are being questioned in many places (particularly architecture and literature) by the idea of a new phase in human development which they call post-modernism. This introduces new themes, in particular a lack of any grand narrative and an acceptance of messy structures. The PoMo programming view is that this underlying current affects our view of programming - even if we don't consciously realize it. An aspect of this is how we are beginning to accept messy but useful systems - for example Perl, or the way that software parts integrate in any real software systems. A modernist viewpoint hates the messiness of these systems, but a PoMo considers them to be necessary feature of our world.

Alan Kay's Turing Lecture was a well-attended high note of the conference. The particular buzz was that this was to be a new talk - the wags joked it was Kay's first new talk in twenty years. The theme of the talk was the loss of the joy of discovery in the way we teach programming. In the sixties students were taught that nobody understood what you could and couldn't do with computers, which led to an explosion of creative ideas that were well summarized by showing a video demo of sketchpad. Now programming is more about learning rules about what we've done rather than encouraging people to push boundaries - and as a pattern author I'm more guilty of this than most.

Much of Kay's talk was about Squeak and Croquet. I heard a couple of Microsofties say that this was ironic after the criticism of Microsoft's demo that morning. I think the difference (other than that Squeak and Croquet are free) is that Kay used the tool to illustrate the ideas he was talking about. The tools were examples of the kinds of things you could do, rather than a statement of the art. They encouraged you to go further, either with them or in competition of them. As Brian Marick put it "in the Microsoft Research world, we're observers, consumers, secondary participants in an experience someone else has constructed for us. In Alan Kay's vision, we're actors in a world that's actively out there asking us to change it." My only nitpick here is that using Microsoft as the target here is only because they are the biggest - the whole industry reflects this problem - which is why Kay (the Orson Welles of software) has such an important point.

Steve McConnell opened up day two. His talk focused on the ten year gap between the first and second edition of his excellent book Code Complete. Brian Foote summed it up as a "litany of things I agreed with". My sum up would be that the industry has made real progress in this area during the last decade, despite the usual views of skies falling in around us.

Steve was on the same panel as me later on "Software Development: Math & Science or Arts & Crafts?". It was yet another examination of metaphors of software development, which is getting to be an annual theme at OOPSLA. These days I seem to be forming the view that the only good metaphor of software development is a dead one. I did my usual harangue about the problems of the software engineering metaphor and a particular shot at the manufacturing metaphor.

Attacking software-as-manufacturing was particularly timely since every OOPSLA attendee got a copy of Software Factories in their goody bag. I've been aware of this work for a while, and my instinctive allergy to this metaphor was only reinforced by the "we need industrialization" motivations. Dig deeper, however, and there are good ideas in here - particularly the approach of integrated DomainSpecificLanguage capabilities.

I missed half of Thursday's keynote of Amazon's web services - a talk which was much better than I expected. There were a lot of interesting things that people were doing based on Amazon's stuff and you have to take your hat off to Amazon for happily encouraging this by making the data easily and freely available. Doing so, of course, is not pure altruism - it also helps build Amazon's brand. For ages articles like this link to Amazon because it's become the de-facto point to link book references to. I do it because it's easy - even though I don't participate in their referrers scheme.

My second OOPSLA panel was on offshore development - I was invited based on ThoughtWorks's experience with our Bangalore lab. However none of the questions were on the mechanics of making offshore development work, but instead they concentrated on the motivations and consequences of offshore development. What was clear is that there is still a palpable fear of what offshore development might lead to in the USA - but I still think much of this is based on the faulty manufacturing metaphor.

My last panel was the .NET vs Java shootout - but as I said the Canadians confiscated the guns at the border. I used the QuestionTimePanel format, which I've found useful to get panels more focused on reasonable discussion. I was concentrating too hard on chairing the panel to remember too much, so I'm glad there's an eweek report.

Two things that certainly struck me were a couple of Anders Hejlsberg's indicators of where he is currently thinking about C#. One is to deal with the infamous impedance mismatch between objects and relational databases. The other was moving towards type inference to combine the advantages of static and dynamic typing.