Sunday, 14 March 2010

The QCon London 2010 Experience

QCon London 2010 - what a conference!

Awesome...with a capital AWE

So many inspiring speakers, a packed schedule of talks over 3 days on a number of tracks and a great bunch of people. This was my first QCon, and cannot recommend the experience enough. The only thing I didn't enjoy, was having to decide between which talks to attend. But that's the true sign of a good conference. I'm finding it difficult to write a blog post as my mind is still buzzing and there was a lot to soak up. In all honesty, I won't do justice to the talks if I try to paraphrase them too much, so I'm just going to summarise my experience and some key points I've left with.

Getting the ball rolling

The opening keynote by "Uncle Bob" Martin (twitter) drew some mixed comments on twitter from what I saw, but the main things I took from the talk were about pride of workmanship. After all, if you're not proud of the code you've written and you hope noone finds out it was you who wrote it, then you should probably think about improving it so you can take pride in what you've done. He's definitely a seasoned, engaging speaker, regardless of what your own personal opinions are on the topics at hand, and I enjoyed the talk.

Day 1 - Architectures you've always wondered about

The sessions that particularly grabbed me were the ones by Facebook's director of engineering (Aditya Agarwal) and Skype's architecture team lead (Andres Kütt). The level of scale talked about was mind-blowing. To give some example of this, here's some of the points mentioned during Facebook's talk:
  • people spend 8 billion minutes per day on the site
  • 5 billion pieces of shared content per month
  • 3 billion photos uploaded per month
  • 10's of TB of RAM in use, across thousands of servers containing cached data
  • tweaked memcached to make it even more high performance
  • developed HipHop for PHP which is a source code transformer, transforming PHP into highly optimised C++
Pretty jaw-dropping stuff. You can check out the facebook engineering blog here.

I would have liked to have heard more technical detail in some of the architecture talks, but I guess they have their competitive advantages to keep so they're hardly going to give away all their secrets!

The conference party finished off the first day, in a nearby pub. A chance to grab a beer, take in the wealth of information from day 1, and mingle with other attendees. Cosy, is probably the best way to describe it - the ratio of attendees to pub space was slightly uneven! But a good time nonetheless.

Day 2 - AlphaGeeks on .NET

Being a C# developer, this track was a natural decision for me and I wasn't disappointed. Kicked off by Ben Hall (twitter), who gave a great talk on BDD (Behaviour Driven Development) as opposed to TDD (Test Driven Development) and added IronRuby on to the list of technologies I should look at.

This was followed on by a great talk by Ayende Rahien (Oren Eini) (twitter) who talked about how to scale an application by a "divide and conquer" approach. What I particularly liked about his session, was that he worked through a real-world example and gave some live metrics on performance improvements. The talk was one of a number to mention the CAP theorem, whereby a distributed can only satisfy 2 out of 3 of the following, but not all 3:
  • Consistency
  • Availability
  • Partition tolerance
It also added so many technologies to my list to look at: RhinoPHT/RhinoDHT, Rhino Mocks, RhinoESB and RavenDB.

Jon Skeet's (twitter) style of presentation was familiar to me from the StackOverflow DevDay last year and didn't disappoint in his talk on NodaTime, a .NET port of the JodaTime date/time library in Java. And yes Tony the Pony did make an appearance on the stand.

The most entertaining talk of the whole conference has to go to Roy Osherove (twitter). A cracking talk on "Beautiful teams and leaders" was topped off with a sublime solo guitar song performance. Brilliant.

The day ended with a talk by Josh Graham and Amanda Laucher on "12 months of things to learn" in .NET. I found my TODO list rapidly growing. F#, M, Guerilla SOA, MEF....... Another really good talk, with some good banter.

Day 2 ended with a number of usergroup events, and I went along to the NNUG (Norwegian .NET User Group) / alt.net beers event at a pub in Soho. It was somewhat surreal for me, having drinks and chatting with the type of experts I can only strive to be (to be very geek, heroes): Ayende Rahien (Oren Eini), Jon Skeet, Roy Osherove, Udi Dahan to name but a few. It was fantastic to see a number of other .NET developers show up that hadn't attended QCon, and was good chatting to them. This was my first usergroup event - lesson being, I really should have attended one before now. Take that as another TODO on my list.

Day 3 - Pick and mix

On the final day I mixed it up a bit, jumping between the "SOA 2010", "The Concurrency Challenge" and "Browser as a platform" tracks. Udi Dahan (twitter) kicked it off with a talk on how to avoid a failed SOA, talking about using EDA & SOA (Event Driven & Service Oriented Architecture) and how to only use a Request/Response model if you cannot get an event driven approach working to meet your requirements. Great speaker, very informative and enlightening.

Justin Sheehy (twitter) followed this, on the concurrency track with a talk on "embracing concurrency at scale" - eventual consistency was a term becoming more and more at the forefront of my mind, as was the point that ACID does not work with a distributed, scaled system. Instead you have a trade-off with BASE:
  • Basically
  • Available
  • Soft state
  • Eventually consistent
which leads to Availablity and Partition tolerance (from the CAP theorem).

Summary

Some of the key points I'm walking from the conference with:
  • keep things simple - complicated doesn't work. If you find your design is complicated, then the chances are you're probably doing something wrong!
  • focus on optimising for an individual task, rather than one-size-fits-all approach
  • ACID doesn't go well with scaling
  • eventual consistency - does it matter if your data is persisted throughout immediately? Probably not. As long as the system is eventually consistent, that's usually all that is required and allows you to scale better
  • asynchronous messaging
  • rules of thumb do not apply - use existing patterns as a starting point for discussion - just because you've done something one way before, doesn't mean you should automatically do it the same way in future

Check out the QCon slides.

I would love to go back to QCon next year, if I'm fortunate enough to have the opportunity again. Once I get the chance to fully absorb the whole experience and put things into practice, I will be a better developer because of it.

No comments:

Post a Comment