It's that time of year when I make my annual trip to near Oxford for the ACCU Conference. This time under my own wallet and on my own time. It's the best conference I've been to, so despite being more expensive than Devoxx, well worth it. (My top tip for Oxford: Instead of flying to Heathrow which is technically closer but hopeless unless you are going into the middle of London, fly to Birmingham and take the regular but over-priced train directly from the airport into Oxford.)
I was pleasantly surprised with the amount of Java about. You don't even have to say Java these days because it is the assumed lingua franca. That at a (formerly?) rabid C++ conference. Progress.
As ever, I have a critical mannerism. If I don't have something to say it's probably because the subject is tedious or perfect. Don't you find perfect things tedious? Thanks to every single presenter whose session I went to and those that organised.
So that I don't start off by laying into sessions:
The location is not the dreaming spires of Oxford. The location is the prefabrication of near-Oxford roundabouts. I had booked a room in the conference hotel to be in the action, despite despising the hotel and everything it stands for. Unfortunately it was overbooked. As the hotel staff liked to point out repeatedly it was not the hotel staff's fault. So I had been booked across a roundabout and up a dual carriage way (at least life-threatening situations are good for meeting people) into a hotel that also priced itself twice as much as I usually pay for a four star bed (even for the actually nice hotel in Venice the other week).
I spent much of the conference swearing at the Vodafone 3G software with its software craftsmanship issues. UI like it was written by a mid-90s VB programmer. Massively unreliable. Had to keep rebooting the machine. UX not helped by Vista. I think I shall try out 3, but I'm not convinced the experience will be any better although it will be more expensive.
Mind fade means I didn't take pencil and paper notes. Writing up during the conference takes too much time and detracts from attending (I should be in bed already).
Keynotes:
(Robert Martin) The Birth Of Software Craftsmanship Apparently the theme of the whole conference, or at least the battle of good vs bad craftsmanship. The way I see it, he underestimated where we were and overestimate where we are. Also, his methods are two small to be coherent.
(Linda Rising) The Benefits of Abstraction in Patterns Patterns are about abstracting out a common solution. With abstraction you can go over the top and lose too much information and understandability. The Do the Right Thing pattern is put forward as the abstraction of all [good] patterns. Do the Wrong Thing is probably a more widespread [bad/"anti"] pattern.
(Nicolai Josuttis) Welcome Crappy Code--The Death Of Code Quality A black, distopian look at trends in software craftsmanship. We should resign ourselves to the undeniable fact that most programmers will continue to suck. Instead of getting them to write good code in the first place, teams of elite janitors should tidy up code of the cack-handed masses. Where do you suppose efficiencies will be made straight away in that model?
(Susan Greenfield) Geeks, Nerds and Other Prejudices In which she explains that girls have an image of science as being full of sartorially-challenged, middle-aged, balding men to an audience of sartorially-challenged, balding men.
(Allan Kelly) Considerations for Successful Management Not too much for the morning after the Friday night. Money isn't a primary motivating factor to programmer [craftsmen]. Agreed. Apparently those attending the conference aren't likely to suddenly be out of a job. Those attendees currently out of a job presumably disagreed.
Sessions:
(Roger Orr) 'Refactoring without ropes' - changing programs in the real world The leading apostrophe character in the session title gained the abstract first place in the lexically-challenged conference programme. I don't know quite how the rest of the order was decided (but JDK7s upcoming sort should be able to sort it out quickly!!). Usual stuff about the practicalities of making mostly non-functional changes in the real world from the real world practical presenter. There was a bit of discussion about what constitutes non-functional in different situations, which I guess leads into a more general problem with compatibilities and bothering to specify anything useful.
(Alan Lenton) Holistic Security With the name "holistic" you might guess the lack of the specific. IMO you need to reduce to the specific practices even at a bridging level.
(Hubert Matthews) Modelling archetypes At the start of this session I had some skepticism. The core of the approach is to divide a domain's classes into four colour-coded categories (roughly - no paper remember): descriptive (blue), long-lived entities (green), roles (yellow) and events (red/pink). After Coad & Mayfield's Java Design book (I despised), I haven't looked at the Coad colouring-in book. However, Huber was very persuasive. It does look like it gives a shortcut to jump up to the abstract, grab the known issue and fall back down to the specific. I didn't like some of the discussion about implementing roles though.
(Kirk Pepperdine) Concurrency and Performance Reloaded Including the much anticipated debut of Kirk's striped (mostly) fifo queue. A year ago I though that the standard java.util.concurrent queue was striped, but apparently not. Nice approach to handling resizes. I do wonder if there is much of a market for an uber-contended queue. I guess Kirk knows.
There was a note that many collections methods don't make much sense in a concurrent situation. Indeed, the extra methods in ConcurrentMap make sense in Map, but what does size mean if before you can use it the size changes. Concurrent collections should make sense when use from a single thread. But what's the point. Shouldn't concurrent collections have interfaces all of their own?
Most of the audience appeared to be C++-heads, but perhaps with a more sophisticated "world" view than some other die hards.
(Didier Verna) Revisiting The Visitor: The 'Just Do It' Pattern Investigating Peter Norvig's claim that 16 out of the 23 [if you include the bad/"anti"] GoF patterns are trivial or vanish in Lisp. Most of the session was watching the presenter type code. Gah. Anyway, it seem in the case of Lisp that ditching encapsulation and making unwarranted assumptions does give you plenty of rope. You could presumably come up with something similar with reflection in Java if you were suitably evil.
(Kevlin Henney, Allan Kelly +5) The Pattern Buffet Seven presenters and seven patterns that you might not be familiar with but perhaps you should be. Pick of the bunch was Kevlin(!) and Aggregate Object (a.k.a. Whole Part). A bit on the abstract side, but nice to be able to put a finger on it.
(Bernhard Merkle) Stop the Software Architecture Erosion Got the bum deal from the schedule. Despite having the ar*********e word in the title and doing something that even from a refactoring point of view doesn't make any difference, was strangely compelling. IMO, a class in the wrong package (or collection of packages) is in some sense bad but not a problem worth sweeting over. Nor are packages decomposed along misguided lines the end of the world.
Some of my examples: javax.swing is codependent with javax.print. SerivceUIFactory is confused and should actually be in javax.swing or somewhere else. A common theme is common classes and root classes to fight for the top level class, such as System in java.lang alongside String. Some dependencies are just conveniences waiting for more comprehensive APIs for a single case, for instance java.awt dependence upon javax.swing. Other dependencies appear to be fine from a dependency diagram perspective but are problematic, for instance the Sun JDK Rhino adaption's dependence on sun.*. Even within the JDK some of these dependencies are fixed with copy and paste.
It's the classes that are important. A number of case studies were shown including JDK5 (it looked pretty!) and findbugs. We, of course, know about the modularisation efforts in JDK7 and Harmony, but you aren't going to change the public APIs (even though it is vital to do so). Even changing private APIs is asking to get flamed. FindBugs has more architectural issues than dependence - for instance confusion in the gui over EDT and non-EDT code.
This presentation wins my nomination for best pictures of the conference, although I had seen a couple before.
Workshopy things:
Workshops are not my home environment, but that is a reflection more on me than workshops. Something that I need to work on, preferably with the aid of dried snake pills.
(Mike Hill, Steve Freeman) Programming without getters An instructive "Coding Dojo" that wasn't instructive in the quite way it was intended to be. So despite, on the face of it, being a complete an utter failure, it was for me one of the best sessions of the conference. I hope Mike and Steve aren't put off and that they found it an opportunity to learn, though perhaps not about getters.
I think most of the people there took it as read to use behaving objects in favour of dumb structs. The venue has an odd idea about the optimal idea as to the height of projection screen, that seems to forget that there might be more than one row in the audience. That or most conference have vacuous PowerPoint that is only important to the speaker - I couldn't say which. Kirk Pepperdine and Uncle Bob made a foray into hardware.
It would appear that having Kirk in the audience seems to help make a session more memorable. He had a simple request that the class User become Shopper. Pointless? Perhaps, but something-that-uses is not much better than MyClass. Someone who is performing a role to shop is what we want. Amongst Eclipse's many features is class name refactor. Unfortunately Eclipse scores a big fat zero for usability. I guess a quarter of an hour or so of a five minute pairing was used to sort that cock-up out. More importantly the structure of the session was destroyed, due to the march of Ides.
There appeared to be two philosophies about how to refactor, and I wonder how many noticed the other side. They majority went for a bottom-up approach of incremental obvious changes. Kirk was, under my interpretation, going for a top-down approach. Slightly worryingly he seemed to go for a synthetic approach rather than mutating what was there.
We ended up with as many getter and setters as we started, and a few more lines of code. At least we had a positive kloc/hr! In fact if we had fiddled with the Hibernate mapping to make the sensible we could have cut much of the sourcerer's apprentice mess, but that would be falling into a cheat. Mostly what we learnt was that programming by committee is stressful.
(Peter Sommerlad, Kevlin Henney, Giovanni Asproni) Patterns of Simplicity This was the only session that I attended that was scheduled in the main hall. In fact it took place in one of the small rooms - spaceboxing they called it. Like most people I wasn't near a table. And I stayed pushed against the back wall. It seemed not sufficiently orientated and ignored the simple (or replaced it with trivial).
(Keith Braithwaite) Patterns for Distributed agile Developement Being the only Sun Java SE "developer" as such in the UK, and someone who has to deal with many different teams all over the place, distributed development is something that concerns me. Agile, with or without a capital-A, I am more interested in from a theoretical point of view. Again I think comming to this from a standing start, it wasn't going to tease much out.
(Klaus Marquardt) Patterns for Versions, Releases, Compatibility Every time I saw Allan Kelly this conference he was talking about tactile real things. Very fashionable amongst the sort that like wearable computers I believe. So we had cards with order imposed by a piece of string. A workshop that could easily fall apart but kept together. I still don't like reading handwriting. As ever, I hope something came out of it that could be abstracted.
Enigma Challenge:
I have to say I tried and failed. Got the time wrong getting up on Saturday morning, and had a go at it with pencil and paper (I did have them available). Not many permutations and some very clear data. Must have misunderstood some piece of it or have been stupid. I deliberately left before suffering seeing the solution.