# Joy of Coding experience report

Joy of Cod­ing has total­ly exceed­ed my expec­ta­tions and proved to be one of the best con­fer­ences I have attend­ed this year (and there has been a few already ).  Rot­ter­dam is also a city I’d like to vis­it again — it’s qui­et, clean, packed full of beau­ti­ful archi­tec­tures and the peo­ple are so friend­ly and help­ful!

hap­py speak­ers, hap­py atten­dees”

- Feli­enne Her­mans

The event organ­is­ers have cer­tain­ly gone the extra mile to look after the speak­ers — from pick­ing us up from the airport/train sta­tions (thanks Mar­tin!) to those gift bags wait­ing for us in the hotel room, and not to men­tion the gor­geous nhow hotel they checked us into. Check out the view of Rot­ter­dam from my hotel room

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

## Venue & Food

The venue is a lit­tle out of the way, at the for­mer Van Nelle Fac­to­ry which is now a world her­itage site. We had some sand­wich­es for lunch, which is pret­ty stan­dard and noth­ing spe­cial. But for din­ner, they served shawar­ma, chips and fresh­ly-baked piz­za, plus plen­ty of alco­holic drinks. They even gave us these tasty stroop­wafel as part of the good­ie bag every­one got.

## The Talks

At the end of the day, it’s the talks that made me want to come to Joy of Cod­ing in the first place and they duly deliv­ered. There were some great keynotes, and all the ses­sions I attend­ed were of high qual­i­ty too. It was also a great plea­sure to meet Chris Granger and Lau­rent Bossav­it and hear their thoughts on pro­gram­ming.

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

Chris start­ed the day by talk­ing about his recent post, cod­ing is not the new lit­er­a­cy and how there are so many sys­tems are not built sim­ply because the peo­ple that could have built them don’t know how to pro­gram. Pro­gram­ming as a skill is not acces­si­ble enough to non-pro­gram­mers and we as pro­fes­sion­als have too often for­got­ten how dif­fi­cult it was to learn to pro­gram.

In short, we need to do bet­ter at teach­ing peo­ple and get back to think­ing about com­put­ers as a medi­um for us to think through. I see many par­al­lels in Chris’s keynote to Bret Victor’s mes­sage (watch this and this talk, you will enjoy them). For non-pro­gram­mers, Excel is a great plat­form for you to inter­ac­tive­ly mod­el a data-cen­tric sys­tem made out of tab­u­lar data, and imme­di­ate­ly visu­alise the results and get feed­backs. But Excel has clear lim­i­ta­tions, and doesn’t scale to the scale that many finan­cial organ­i­sa­tions are using it for.

The fact that the world’s finance runs on Excel is a scary thought, and one of the rea­sons why the Tsuna­mi folks start­ed the FCell project to inject some dis­ci­pline and safe­ty to the oth­er­wise chaot­ic, any­thing-goes world of Excel. Chris then gave a live demo of the inter­ac­tive programming/modelling envi­ron­ment he has been work­ing on, called Eve. Eve is built on top of dat­a­log, pre­sum­ably with a pro­pri­etary imple­men­ta­tion in Clo­jure. I had a chat with Chris after his keynote and he men­tioned that they have made great progress with Eve and he expects an ear­ly alpha/beta ver­sion to be pub­licly avail­able by end of the year. Excit­ing times!

For the rest of the morn­ing, there was a sin­gle-track of talks + three par­al­lel work­shops on:

### The Joy of Testing (John Hughes)

This is actu­al­ly the third time I’ve seen John give this talk (or a vari­a­tion of it) and it’s still fun to hear him tell the sto­ry of how he dis­cov­ered bugs in the Erlang dets mod­ule that was dri­ving the folks at Klar­na nuts .

The steps to pro­duce those bugs were so bizarre (e.g. open-close-open file then per­form exact­ly 3 par­al­lel ops against it to cause file to be cor­rupt) that no human would ever think to write a test case for that!

It’s futile to try to cov­er all fail­ure cas­es by hand, even a *rea­son­able degree of con­fi­dence requires way more test than you’d ever want to write and main­tain.

So the take home from the ses­sion is sim­ple:

* side­bar (how many tests do you need) : if you have a func­tion that takes an int as input then an exhaus­tive test suit would need 2147483647 tests — $O(n)$. Then con­sid­er the qua­drat­ic effect of tak­ing two inte­gers, now you’re deal­ing with $O(n^2)$. Then there’s $O(n^3)$, $O(n^4)$, and so on, plus race con­di­tions!

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

In this talk Lau­rent asked the ques­tions “why is pro­gram­ming so hard?” and “why do we keep writ­ing bug­gy soft­ware?” and explored the pos­si­bil­i­ty that maybe, it’s because of the way we are wired.

Being aware of the pit­falls in the way we behave and the many forms of bias we suf­fer from (e.g. con­fir­ma­tion bias) helps us be more crit­i­cal of our deci­sion mak­ing. The will­ing­ness to ques­tion one­self and one’s beliefs is a com­mon trait I have observed in some of the most knowl­edge­able and open mind­ed peo­ple I have met.

Speak­ing of ques­tion­ing one’s beliefs, it reminds me of this scene from Ago­ra.

Lau­rent also men­tioned a cou­ple of books:

in addi­tion, if you’re curi­ous about/interested in behav­iour­al eco­nom­ics, you might also be inter­est­ed in these two books by Dan Ariely:

side­bar : towards the end of the ses­sion Lau­rent also touched on depres­sion, which is some­thing many pro­gram­mers suf­fer from to dif­fer­ent degrees. Again, this remind­ed me of a good talk I saw at Lamb­da­Days this year by Kinga Panasiewicz on the effects of con­tin­ued com­put­er use on our brain, includ­ing the poten­tial for caus­ing men­tal ill­ness­es.

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

The sec­ond keynote of the day focused on explor­ing dif­fer­ent pro­gram­ming styles. We’re not talk­ing about for­mat­ting styles, but approach­es to solv­ing prob­lems.

She demon­strat­ed how a sim­ple pro­gram to cal­cu­late term fre­quen­cy, can be writ­ten in a pletho­ra of ways, includ­ing:

The point of these exer­cis­es is to allow you to see that there are many solu­tions to the same prob­lem, and that each comes with a set of con­straints that needs to be com­mu­ni­cat­ed.

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

I real­ly enjoyed Crista’s keynote, and when I have some time I plan to go through the exer­cis­es in her book in some of my favourite lan­guages.

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

side­bar : the need to make one’s con­straints explic­it and com­mu­ni­cate them to oth­ers reminds me of some­thing Greg Young also said dur­ing his Build­Stuff keynote last year. Greg’s mes­sage was for you to be scep­ti­cal of the advices and so called “best prac­tices” oth­ers offer. Because whilst they’re well-intend­ed, these advices and best prac­tices are applic­a­ble only under a set of implic­it con­texts (i.e. con­straints) that the speak­er is oper­at­ing under, which might not be applic­a­ble to you. Whilst Greg was com­ing from a dif­fer­ent angle, I think it lends itself well to sup­port the points that both Lau­rent and Crista has made:

• be crit­i­cal of your beliefs, as well as the advice offered by oth­ers; don’t accept them blind­ly
• be explic­it about your con­straints (or con­texts, which seems to be syn­ony­mous here) so that it makes it eas­i­er for oth­ers to