Amsterdam is most  definitely one of those cities that everyone should visit at least once in their life and I can highly recommend the Dutch PHP Conference (DPC) as a reason to make that visit. This is also the second year that DPC has been joined by the Dutch Mobile Conference, a ticket to one gives you access to the other. DPC logoThis leads to a great mix of developers from different disciplines and generally means that regardless of your particular skill-set, there will be a talk running whose subject is completely new to you.

This review starts with the first day of the actual conference rather than the initial tutorial day as my colleague, Ben and I took the rare opportunity to be tourists for the day instead of our usual attempt to cram a whole week of sightseeing into the few hours between leaving the venue and catching a flight. Still, this isn’t a “what I did on my holidays” blog so the only thing I’ll say is if, like me, you get most of your UV exposure from fluorescent lights then bring sunscreen otherwise your hour-long, open-top boat tour at high noon will create a different sort of lasting impression.

The conference opened with our Ibuildings’ organisers Ross and Martin charting their journey from Vlissingen over to Amsterdam. This provided a nice reminder, that actually the sunshine was a bit of a freak event over there as well. Things then kicked off with an opening keynote from Google’s Ade Oshineye on “A Web of Identity”. This had some nice messages for a mixed PHP and mobile conference that pushed forward the idea that focusing on the X vs Y mentality (e.g. mobile vs native) is generally wrong, instead it’s about the end to end experience a user has when they try to achieve something – which can span multiple services, devices, and locations. This tied nicely back to the principles on which “the web” was founded – its accessibility to authors, the ability to link so easily to other services, and the ability to do all this without needing permission. It left me wanting to get into more detail on the technical challenges of being able to persist your own identity throughout different systems.

Next up I went to see Mathias Verraes talk about “Unbreakable Domain Models”. Having talked to him over dinner the previous night, I was already intrigued – this was an architecture talk from a guy whose business is working with legacy code. If you’ve had to do this before, you probably know the enormous pressure to simply hack it so it works (“I need this feature live tomorrow! I’ve paid for expensive tv commercials so we can’t change the date and there’s no budget for coding!”) versus putting in a quality solution that you know is right. Admittedly, this wasn’t a legacy code talk but the message I got from it was that you need all of that knowledge of good software engineering to be like second nature, so that when faced with a big ball o’ mud codebase, you have the ability to add the real architecture to it appropriately rather than building yet more fragile structures on weak foundations. The talk itself followed an easy to follow build-up that showed how to build expressive code that uses the language of the domain. Several times, Mathias advocated showing the client the code so that they agree on the functionality but was backing that up by showing code that would be readable to non-developers.

So, after a nice dose of software engineering I decided to follow it up with something that was firmly in the realm of pure Computer Science by joining Igor Wiedler’s “Introduction to Lisp”. I still have no idea how Igor managed to get this topic accepted, but I am glad that he did. Lisp and the model of development that it follows are incredibly helpful in taking a more rigorous and scientific approach towards programming. From an immediately practically applicable standpoint key concepts in Lisp are “map” and “reduce”, two words that should immediately make you think of parallel processing on large (even infinite) datasets, a problem that comes up more and more now. I also enjoyed how Igor structured the talk: introduce a more complex concept, then show how it could be built from the components provided by the previous concept – a very Lisp-like way to introduce Lisp.

Afterwards, I stuck to the “math track” and went to see Ivo Jansch deliver “Cheater’s Math”. Honestly, I’ll admit I didn’t even read the abstract, I just turned up because of the title. Ivo gave a rapid fire overview of the tooling they’d built for developing cheat apps for word games. This ended up being an excellent story covering (as Ivo put it) a little bit of everything that he had ever learned. The binary tree approach to pattern matching when you’ve got a known set of input was an excellent example of how really understanding your problem space lets you understand why you can make certain algorithm choices. While this talk would stand on its own, the fact that Ivo clearly had a massive amount of fun while getting this coded made it an entertaining story to follow.

For the final stretch of the day, I started by heading over to see Ben Longden deliver his session on “The Hypermedia API”. Ben’s a colleague, so I’ve seen how his understanding and approach to REST have evolved over the years. In a way, this talk was almost saying that REST is a bit of a dirty word now, too many connotations from the way REST-ful APIs, frameworks, etc. have presented it. So, this talk really focused on the aspects of presenting your API via a hypermedia format with a pretty pragmatic approach: understand the architectural approach you’re using and apply it in places where it fixes a problem, not just a cargo cult mentality where you remove verbs from your URLs and you’re done.

A nice follow on talk was Travis Swicegood’s “Modern HTTP Architecture” or, as he admitted after a few slides, alternatively “Service Oriented Architecture”. Where Ben had focused on the content, Travis was looking more at infrastructure and how services interacted with each other. What was particularly enjoyable here was that Travis was building on experience and problems that he had encountered with his own systems and how they tailored their architecture to the traffic and usage they received. Personally, when it’s to do with infrastructure I always find the “war stories” more useful than the pure theoretical stuff.

After this it was time for the evening social. There’s enough Belgian beer (amongst other things) in Amsterdam that this has the potential to be spectacularly dangerous. Luckily (or perhaps unluckily) for me, I had a talk to deliver in the morning so ducked out of the partying early. There may be some stories to relate, but what happens in ‘dam stays in ‘dam.

DPC13 opening keynote

That said, maybe I have no excuse here, as Eamon Leonard was around bright and early to deliver the second day’s keynote “Growth Hacking for Humans”. He basically charted the stages of the journey he’d gone through from first discovering computers through the depressing grind day-jobs, the incredibly hard work of starting your own company, and now reaching the point where he can help build communities bootstrap companies to go on their own journeys. Inspiring stuff, and a recurring message that the main thing stopping you from pursuing happiness is you.

Finally it was time for me to deliver my talk on sorting and searching algorithms. I’ll be frank about this, this was mostly a talk that I wanted to deliver so that I got to write visualisations of the algorithms, it’s just pure luck that an enjoyable talk came out the other end. I’ve delivered a similar talk before and the fun part of this is that there are generally people in the audience who have a really solid grasp on the algorithms already, this tends to mean that I get some more in-depth discussion after the talks – which in this case meant I spent my flight back hacking on an in-place mergesort which (as I soon discovered) is actually kind of a pig to get working at all, let alone getting a meaningful visualisation out of it.

After gaining my breath and a few coffees, I went back to see Travis again – this time with his “Introduction to Django”. This was a proper whistlestop tour of the functionality provided by Django along with a nice live demo. While it’s unlikely that I’m going to be using Django at any point in the near future, it’s always useful to get an idea of the features offered by other frameworks and the infrastructure used by other languages.

Next up was another colleague, Marcello Duarte taking us through “Emergent design with phpspec”. I don’t really want to sound like I’m just pushing propaganda about some of the awesome people I work with, but sometimes I suspect Marcello may be a genuine wizard who teaches me some new piece of magic every time I meet him. This time, it was a run-through of the phpspec tool and how it helps enable design and development rather than just validating it. An excellent message out of this was that while the tool helps, it is not a magic bullet and neither is TDD. A developer still needs to put in the hard work to have that intrinsic grasp of software engineering design principles and how to apply them.

The penultimate talk of the conference was from Juozas Kaziukėnas on “Growing spiders to crawl the web”. I’m reasonably sure that Juozas’ job title is “International Man of Mystery” as his talk took us through the occasionally slightly black-hat world of spidering content from other sites. Juozas pulled it together well though with plenty of technical snippets that would be useful in a variety of projects and some good tips on how to be a well-behaved client when interacting with other services.

Closing keynotes can be tricky – the speaker tends to be the last thing between you and the free beer in the bar. Kevlin Henney stepped up to this with the somewhat opaquely named “Worse is Better, for Better or for Worse” and ended up making me forget about the bar entirely. These few lines don’t really do it justice, but one of the core messages about doing rapid development was that “it is far better to have an underfeatured product that is rock solid, fast, and small than one that an expert would consider the complete requirements”. A difficult message to sell to your client, but one that a professional software engineer really has a duty to enforce. The highpoint of this whole thing though was citing Inception while loading up a browser, hitting a JavaScript virtual machine, booting Linux, opening Vim, writing C, and compiling a “Hello, World” example.

In the end, I was blown away by the sheer amount of high quality content that the Ibuildings organisers managed to fit into this edition of DPC, and I didn’t even end up hitting any of the sessions on the mobile side. Did I mention there was free ice cream in the break as well? You’d be a fool to miss it next year.