# Joy of Coding experience report

Joy of Coding has totally exceeded my expectations and proved to be one of the best conferences I have attended this year (and there has been a few already ).  Rotterdam is also a city I’d like to visit again – it’s quiet, clean, packed full of beautiful architectures and the people are so friendly and helpful!

“happy speakers, happy attendees”

– Felienne Hermans

The event organisers have certainly gone the extra mile to look after the speakers – from picking us up from the airport/train stations (thanks Martin!) to those gift bags waiting for us in the hotel room, and not to mention the gorgeous nhow hotel they checked us into. Check out the view of Rotterdam from my hotel room

I met up with some old friends and made some new ones too.

## Venue & Food

The venue is a little out of the way, at the former Van Nelle Factory which is now a world heritage site. We had some sandwiches for lunch, which is pretty standard and nothing special. But for dinner, they served shawarma, chips and freshly-baked pizza, plus plenty of alcoholic drinks. They even gave us these tasty stroopwafel as part of the goodie bag everyone got.

## The Talks

At the end of the day, it’s the talks that made me want to come to Joy of Coding in the first place and they duly delivered. There were some great keynotes, and all the sessions I attended were of high quality too. It was also a great pleasure to meet Chris Granger and Laurent Bossavit and hear their thoughts on programming.

### Keynote: Programming as Distributed Cognition (Chris Granger)

Chris started the day by talking about his recent post, coding is not the new literacy and how there are so many systems are not built simply because the people that could have built them don’t know how to program. Programming as a skill is not accessible enough to non-programmers and we as professionals have too often forgotten how difficult it was to learn to program.

In short, we need to do better at teaching people and get back to thinking about computers as a medium for us to think through. I see many parallels in Chris’s keynote to Bret Victor’s message (watch this and this talk, you will enjoy them). For non-programmers, Excel is a great platform for you to interactively model a data-centric system made out of tabular data, and immediately visualise the results and get feedbacks. But Excel has clear limitations, and doesn’t scale to the scale that many financial organisations are using it for.

The fact that the world’s finance runs on Excel is a scary thought, and one of the reasons why the Tsunami folks started the FCell project to inject some discipline and safety to the otherwise chaotic, anything-goes world of Excel. Chris then gave a live demo of the interactive programming/modelling environment he has been working on, called Eve. Eve is built on top of datalog, presumably with a proprietary implementation in Clojure. I had a chat with Chris after his keynote and he mentioned that they have made great progress with Eve and he expects an early alpha/beta version to be publicly available by end of the year. Exciting times!

For the rest of the morning, there was a single-track of talks + three parallel workshops on:

### The Joy of Testing (John Hughes)

This is actually the third time I’ve seen John give this talk (or a variation of it) and it’s still fun to hear him tell the story of how he discovered bugs in the Erlang dets module that was driving the folks at Klarna nuts .

The steps to produce those bugs were so bizarre (e.g. open-close-open file then perform exactly 3 parallel ops against it to cause file to be corrupt) that no human would ever think to write a test case for that!

It’s futile to try to cover all failure cases by hand, even a *reasonable degree of confidence requires way more test than you’d ever want to write and maintain.

So the take home from the session is simple:

* sidebar (how many tests do you need) : if you have a function that takes an int as input then an exhaustive test suit would need 2147483647 tests – $O(n)$. Then consider the quadratic effect of taking two integers, now you’re dealing with $O(n^2)$. Then there’s $O(n^3)$, $O(n^4)$, and so on, plus race conditions!

### The Joy of Debugging Ourselves (Laurent Bossavit)

In this talk Laurent asked the questions “why is programming so hard?” and “why do we keep writing buggy software?” and explored the possibility that maybe, it’s because of the way we are wired.

Being aware of the pitfalls in the way we behave and the many forms of bias we suffer from (e.g. confirmation bias) helps us be more critical of our decision making. The willingness to question oneself and one’s beliefs is a common trait I have observed in some of the most knowledgeable and open minded people I have met.

Speaking of questioning one’s beliefs, it reminds me of this scene from Agora.

Laurent also mentioned a couple of books:

in addition, if you’re curious about/interested in behavioural economics, you might also be interested in these two books by Dan Ariely:

sidebar : towards the end of the session Laurent also touched on depression, which is something many programmers suffer from to different degrees. Again, this reminded me of a good talk I saw at LambdaDays this year by Kinga Panasiewicz on the effects of continued computer use on our brain, including the potential for causing mental illnesses.

### Keynote : Exercises in Programming Style (Crista Lopes)

The second keynote of the day focused on exploring different programming styles. We’re not talking about formatting styles, but approaches to solving problems.

She demonstrated how a simple program to calculate term frequency, can be written in a plethora of ways, including:

The point of these exercises is to allow you to see that there are many solutions to the same problem, and that each comes with a set of constraints that needs to be communicated.

One thing we always say in our team is to “not be precious about what we have done”, and it’s an approach that has allowed us to have an open-mind to alternative ideas.

I really enjoyed Crista’s keynote, and when I have some time I plan to go through the exercises in her book in some of my favourite languages.

In the mean time, you can check out the repo for her book here, or even better, get the book!

sidebar : the need to make one’s constraints explicit and communicate them to others reminds me of something Greg Young also said during his BuildStuff keynote last year. Greg’s message was for you to be sceptical of the advices and so called “best practices” others offer. Because whilst they’re well-intended, these advices and best practices are applicable only under a set of implicit contexts (i.e. constraints) that the speaker is operating under, which might not be applicable to you. Whilst Greg was coming from a different angle, I think it lends itself well to support the points that both Laurent and Crista has made:

• be critical of your beliefs, as well as the advice offered by others; don’t accept them blindly
• be explicit about your constraints (or contexts, which seems to be synonymous here) so that it makes it easier for others to
• understand your argument/advice and;
• decide if it’s applicable to them (either partially or wholesome)

### Keynote : Cool Code (Kevlin Henney)

I’m a big fan of Kevlin, and thoroughly enjoyed his previous talks at BuildStuff, NDC, QCon and CodeMotion.

In this talk, Kevlin showed off some great examples of cool code, such as the Qlobe and bootchess. And one thing you can always expect from a Kevlin Henney talk is plenty of memorable, insightful quotes:

All and all, I had an amazing time at Joy of Coding this year, and looking forward to going back again in the future!