The 2010 ACCU Conference

 

My third visit to the annual ACCU Conference at the Oxford Barceló Hotel started in pretty much the same way as the previous two with a late night in the bar catching up with old friends. I also got to associate a few new faces to some of those email addresses that pop up on accu-general. The one person I didn’t expect to keep bumping into at the bar on the first night though was Pete Goodliffe because he was presenting the following day – in the morning…

 

The conference opened with a keynote by Jeff Sutherland who had also been running a Certified Scrum Master course during the previous two Tutorial days. Fortunately I had seen him speak at JP Morgan in May last year for the ACCU London branch so I took the opportunity to nurse my hangover instead. His argument for Scrum and Hyper-Productivity seemed just as compelling though second time around.

 

After the much needed morning coffee break I headed off to see Anthony Williams talk about Concurrency in the Real World. Given his pedigree this was a popular session and focused on the new threading features in the upcoming C++ standard. Having followed his blog I was largely familiar with the topic, but it was still useful to get all this straight from the horses mouth in one session. Plus there were a few interesting questions about how all this gels with CPU & I/O bound tasks.

 

The gremlins that marred lunchtimes last year seemed to have been laid to rest so I had plenty of time before an early afternoon session with Guy Bolton King on CouchDB. He started with a little background about the whole NOSQL movement (Not Only SQL) before moving onto one of the players – CouchDB. This is a reliable and scalable document style database written in Erlang. He went into a reasonable amount of depth of the internal architecture which helped you understand how it achieves its reliability and at what cost. He then used some simple JSON format documents and JavaScript Map/Reduce functions to give you a feel for how easily you can build and query views. There was also enough time to cover replication and partitioning to give a pretty good overview of how this could slot into the existing Enterprise.

 

A spot of afternoon coffee was followed by a session from Roy Osherove on what makes good teams and team leaders. Once again, as a follower of his blog it was good to hear him in person. It started with plenty of personal experience from both the developer and team leader perspectives to give some useful advice about managing software developers. There were definitely plenty of nodding heads and agreeable murmurs from the audience. The second half looked at the tools and techniques used by teams to produce quality software such as Continuous Integration. Consequently, as a developer, I found this half of far more interest and a verification that I’m heading in the right direction. Personally I found the team leading advice somewhat idealistic, but that probably says far more about the teams I work in than Roy’s abilities as a leader. Somewhat unusually he finished with song about one of his earlier tales that added some novel light relief.

 

Thursday morning started with a keynote from James Bach about testing. It’s been an incredibly long time since I’ve worked with dedicated testers and his talk reminded me why they are valuable in their own right. He was at pains to point out that testing is not a stepping stone to development, but a first class activity that requires a different mindset. One memorable quote is that “testers don’t break code – developers do”. He’s a charismatic and energetic speaker which made him a real pleasure to listen to. His opening video was a brilliant segment of “The Towering Inferno” with subtitles for the Steve McQueen/Paul Newman roles to relate to the world of software development. In his blurb he suggested that he’d like to have converted a few programmers to testers by the end of his talk. I’m sure the ACCU audience is a little too hardcore for that, but I certainly felt far more invigorated about testing as a result.

 

My first session of the day was from Steve Love and I’m not even going to try and repeat the title here. This was another one of Steve’s insightful presentations about good design. He reminds you of all the balls you need to keep juggling such as modularisation, extensibility, generality, flexibility, high cohesion, low coupling etc. to ensure that the software you produce is of a suitably high quality. It’s no mean feat that he managed to cover so much ground within 90 minutes, and with sufficient detail to make the talk coherent. This is one of those bread-and-butter talks that you need to see regularly to remind you what your day job is all about. Oh, and the subliminal elephant images were pretty amusing too.

 

Some much needed sleep meant that I skipped lunch and went straight into James Coplien’s talk about Lean Architecture and Agile Software Development. I first saw ‘Cope’ speak at the conference a couple of years ago and you’re guaranteed entertainment – most likely through controversy. This time it seems as though the hecklers stayed away as it was somewhat uneventful although still thoroughly enjoyable. A large part of his talk was about representing the user’s mental model in the OO paradigm which still often seems like an enigma when dealing with algorithms and workflows. Also the words Agile and Lean seem to be used interchangeably in some circles so it was very useful to get clearer distinctions of how these terms apply to Architecture.

 

I finished the day in the comfort of Steve Freeman and Nat Pryce who I had only just seen talking about TDD during a recent ACCU London meet. This session looked at TDD from the opposite end of the spectrum by showing how you can grow a complex product though TDD of system-level tests in a manner similar to designing classes. The premise is to take a slice of key functionality (instead of a bottom-up or top-down approach) and allow the system to grow organically from around that point. This was the most relevant session for me as I’m working on a system incredibly similar to the one used in their example. I was also somewhat chuffed that I managed to collar Steve Freeman afterwards so I could pick his brains further on the subject.

 

Last year the conference introduced Lightning Talks (short presentations of 5 minutes of whatever topic takes your fancy) on the Thursday and Friday evenings. They reappeared again this year with even more speakers so I guess they were pretty popular. The set of 7 talks on the Thursday contained the usual variety such as “Message Passing Concurrency in C++” from Dominic Robinson to “What Motivates Programmers” by Kevlin Henney. There was even time to squeeze in a couple of last minute entries; of which the most notable was from Tom Gilb to prove that Love can indeed be quantified.

 

Iceland once again hit the news and due to unexpected volcanic activity Dan North’s keynote was switched with Russel Winder’s on The Multi-core Revolution. The crux of Russel’s talk was that we need to switch our mental model from one where processor and memory are equal partners, and infinitely scalable on the CPU side, to a more realistic model whereby there are many processors each with dedicated memory connected by an “interconnect” (think bus, network and anything else in between). This paradigm shift currently requires non-standard tooling and Russel spent time showing the status quo, such as language extensions like OpenMP to more purpose built languages like Fortress. Naturally he got a plug in for Groovy and also managed an interesting tangent about the Higgs boson. Although Herb Sutter raised awareness about how much we’re going to need concurrency in the future, Russel’s talk made it clear that multi-threading and NUMA style architectures are merely another stop gap on the way to true parallelism.

 

I just about managed to squeeze a coffee in before sitting down to hear Richard Harris talk about floating-point numbers. This is a topic with so much Lore behind it that I felt if anyone could bring order to this chaos it was Baron Muncharris. The session started much as any classroom would with the Teacher laying down the ground rules (no whispering, no chewing gum etc) before embarking on a journey into the various sorts of numbers from simple Integers to Rational and Transcendental etc. Recent graduates probably know all this stuff but for old timers it was an excellent refresher and just what was needed to ensure that you then understood the trade-off’s between the various proposed solutions, such as IEEE 754, Fixed Point, and Arbitrary Precision etc. I certainly feel better equipped to handle this kind of arithmetic in the future.

 

Michael Stal provided my post-lunch interest with a talk on Architecture Refactoring. After modifying Martin Fowler’s original definition of refactoring so that it could apply to the architecture as well as the code level, he started to introduce some patterns. Perhaps not unsurprisingly many of these had direct influence from the core Gang of Four patterns – but at a higher level – such as introducing a Façade over multiple external services. He also illustrated how the age old pair of Coupling & Cohesion can be applied equally at the package level in larger systems. The rest of the talk covered the differences between refactoring, reengineering, and rewriting; and even though he provided useful examples and a nice comparison chart for the three categories, I still felt the distinction was somewhat academic.

 

After the break and another cuppa I really wanted to go to the talks about Hadoop and Database Testing. However Kevlin Henney was talking about the Value Object pattern at the same time and this area puzzles me more now that I have switched from C++ to C#. Foolishly I thought I could start in Kevlin’s and then switch to Sven’s Database Testing session at half time. After ten minutes I was so engrossed in the philosophy of what Values are and how the implementation of them differs across languages that I realised I was never going to walk out half way through. Writing code to compare for equivalence seems far harder in C# and Java than in C++ and Kevlin nicely demonstrated all the gnarly bits – including some issues that have been missed by the C# guidelines.

 

The second set of 9 Lightning Talks were held in the early evening, and once again there was a good turnout, both from speakers and audience alike. I even threw my hat into the ring this time with a homage to the BBC 2 comedy show “Room 101” by berating the continued existence of Visual SourceSafe, Visual C++ 6 and Internet Explorer 6. I was accompanied by far more straight laced affairs such as Rachel Davies short piece on Retrospectives and Dietmar Kuehl with a revised look at the “Law of The Big Three”. Phil Nash, who was originally due to speak with Pete Goodliffe on iPhone Development, also made a last minute appearance to plug the iPad.

 

Friday evening plays host to the Speaker’s Dinner, where each dinner table has a number of speakers and after each course the guests are forced (would you argue with Giovanni?) to swap tables. This gives us the chance to converse with the speakers on a more personal level, and more importantly to make new friendships with fellow delegates. Naturally there was much discussion surrounding the volcanic activity, not least because so many of the speakers and delegates had flown in from around the world. The dinner naturally spills over into the bar and continues on into the early hours, but sadly there was no Boat Race this year.

 

The ongoing disruption to flights meant that Dan North never made it to the conference and so Saturday’s keynote became a Mash-Up as four previous speakers each contributed 15 minutes. I snuck in just as Walter Bright was describing C’s worse mistake – namely the whole array debacle. Arrays without knowledge of their size, the use of the nul terminator for strings and the way arrays decay to pointers gave him plenty of ammunition. James Bach was next up with a quick session on Testing Models. Finally Jim Hague repurposed his previous evening’s lightning talk as he now had the extra time needed to fill us in with a little more history on the Devils DP Dictionary and Stan Kelly-Bootle.

 

I chose to listen to Tony Barrett-Powell in the morning about Coupling – not the TV show – but the dependencies that exist within our code. I was well aware of the concept of coupling but didn’t realise that it had been categorised in so much detail. Tony listed 8 different forms such as Data Coupling, Stamp Coupling, and Control Coupling etc. This was second time this conference that I discovered that there is still much goodness in those old books about Structured Programming. Tony also displayed a chart that showed which forms of coupling ring the biggest alarm bells and those which are less insidious. He then went on to do the same with Cohesion and package-level coupling (Afferent and Efferent Coupling). The second half looked at various problems and techniques that can used to reduce the damaging effects such as the Law of Demeter, Open-Closed Principle and DRY etc. This, like Steve Love’s talk, was one that you could never tire of hearing because it influences you day-to-day.

 

My final session of the conference was to be with Roger Orr. His talk was about configuration – from the reasons why you might want to, to the mechanisms themselves and the obvious pitfalls. I thought he started with a rather novel approach by taking the C++ one-liner for outputting “Hello World” and discussing why and how you might choose to configure such a simple program. One of the techniques was to pass a #define on the compiler command line which I had never really thought of as a form of configuration before. He then went on to cover the usual suspects like the process’ command line, environment variables, Windows registry, database etc with a short list of pro’s and con’s about each. Roger is always happy to let the audience contribute which makes a talk like this so incredibly useful; it often feels more like a workshop.

 

So this is my third year, has it lost any of the magic yet? Nope – not at all. As I get older I find the late nights in the bar are getting a little more difficult to cope with, but I still daren’t go to bed as I’m afraid I’ll miss out on something important. Even though the number of people I know personally in the ACCU is growing with each conference I still keep finding new people to whittle away the night with – there seems so much to chat about and yet so little time. It’s great that all the presenters are so approachable and many also stay up late in the bar which gives you more time with them. There are always a few special moments and this year, for me, it was being privy to a conversation between Walter Bright, Russel Winder a few others about parallelising compilation in the impending multi-core world. That kind of thing just doesn’t happen in the sort of places where I work…

 

Chris Oldwood

01 June 2010

 

Bio

Chris started out as a bedroom coder in the 80s, writing assembler on 8-bit micros. These days it’s C++ and C# on Windows in big plush corporate offices. He is also the commentator for the Godmanchester Gala Day Duck Race. He can be contacted via gort@cix.co.uk.