Meeting C++ 2017 trip report I was at Meeting C++ 2017 to give a talk and then relax while listening to other speakers. That didn’t go exactly as planned.

About 6 months ago, I sent the abstract of one of my submissions to CppCon to my colleague Jonathan Boccara for advice. A few messages in the discussion he asks “did you also submit for Meeting C++?” and I admitted the thought hadn’t crossed my mind. To me, speaking at one conference like CppCon was already a big step and it would be redundant to propose the same talk at two different conferences anyway.

Turns out I was dead wrong, because first of all the hardest part in a talk is giving it the first time at a conference. After that, it becomes easier and easier so it does actually amortize the cost of preparing it (that and you gain more confidence with experience).

Second, each conference has its own public and even if some do attend most/all of them, that’s clearly a minority. For the rest, it’s probably the only time they get to see you live on stage and can then talk in person.

There are also replays on YouTube but let’s be honest: watching talks takes time and we’re all busy. So by speaking at conference you give people a chance to watch talks they probably wouldn’t have otherwise.

Keynotes

Sean Parent’s “Better Code: Human interface”

Of course it began with Sean Parent, which I was very eager to meet in person. His talk about removing raw loops from your code is still one of my favourites and if you still haven’t watched it, stop wasting your time reading my blog and do so now. His keynote built upon a previous one from CppCon 2015 about relationships and the importance for us to learn to reason about them when we design software. One of the key takeaways was that user interactions define the way your code will be constructed much more that developers usually realize because the relationship between objects derives from that. One example was two linked toggle settings in a UI where setting one implies the other (but not the other way around). There are a couple of way to express that and more than one correct answer, but in a lot of applications no two will behave the same way.

Sean has put a lot of thinking into that and written a couple of academic paper with a researcher that you can find here. It’s odd to see that it took a C++ developer to work on a formal representation of UX specifications, especially since C++ is rarely seen as a front-end language.

Kate Gregory’s “It’s complicated!”

The second keynote was given by the great Kate Gregory who is really talented at engaging audiences. Her subject was simplicity. The fact that we always want things to be more simple, more expressive and more elegant. Verboseness in code is usually the sign of over-complicated design so we try to make things plain and unambiguous. As she pointed out, guidelines are usually no exception but that thinking can lead us astray. Software IS complicated. Abstractions ARE imperfect. So while we should try to KISS, guidelines can’t be oversimplified.

An example I found was Sean’s “No Raw Loops” that he put in his slides in his C++ Seasoning talk. That’s a good phrase on a presentation because it’s short and easy to process, but that’s a terrible guideline. If you make it one, you’ll end up with convoluted lambdas inside calls to std::for_each just to write a simple “multiply all values in this array by 2”. Sometimes there’s an algorithm you can use, sometimes you can make a new one, that’s great and should try to if that makes sense. But also sometimes you just want to mutate the content of a std::vector with a simple operation and that’s not so great as an algorithm.

As he puts it, it’s more suited as a goal:

It is a 'goal'. I prefer GNRL (Goal No Raw Loops). Then you can write gnarly code!— Sean Parent (@SeanParent) 11 novembre 2017

There’s not one C++ Standard Guideline that directly says “No Raw Loops” but instead you can see the same idea in:

Wouter van Ooijen’s “What can C++ offer embedded, what can embedded offer C++?”

I’ll admit being less excited by the last keynote since embedded is not really my domain, but there were a couple of takeaways for me anyway and I thank Wouter for that.

The most important was the fact that there is actually a very wide range of technologies that are considered “embedded”, from the very specialized chips that control spaceships to the Raspberry Pi. While there are similarities between them, one could argue that a Pi is actually much closer to a mobile phone, a tablet or even a desktop PC than an Arianne flight control module.

It is therefore important to avoid broad generalities such as “you don’t use exceptions in embedded” because the constraints vary a lot from one kind to another. Some devices don’t have the space to store the full C++ runtime, while others come with a full Linux kernel and an X server.

Tracks

It would take me forever to discuss each talk I went to, especially since I could at most see 1/4 of all. Instead I’ll try to make a listing with some personal notes:

Lightning talks

There were 3 slots for lightning talks on Saturday, plus the “secret bonus track”. Yes, Meeting C++ had a secret bonus lightning talk session. And it was pretty cool. And no I’m not going to spoil it, but the recordings will once they get published.

Anyway there were too many talks to summarize here so I’ll wait for the videos to be uploaded if I were you. Speaking of that, Jens announced that he expects to upload the keynotes and the lightning talks in the coming month, then take a well deserved break, and then publish the regular talks somewhere at the beginning of next year.